Скажем, у меня есть набор чисел из [0, ....., 499]
. Комбинации в настоящее время генерируются последовательно с использованием С++ std::next_permutation
. Для справки, размер каждого кортежа, который я вытягиваю, равен 3, поэтому я возвращаю последовательные результаты, такие как [0,1,2], [0,1,3], [0,1,4], ... [497,498,499]
.
Теперь я хочу распараллелить код, в котором он сидит, поэтому последовательное создание этих комбинаций больше не будет работать. Существуют ли какие-либо существующие алгоритмы для вычисления комбинации ith
3 из 500 чисел?
Я хочу убедиться, что каждый поток, независимо от итераций цикла, который он получает, может вычислить отдельную комбинацию на основе i
, с которой выполняется итерация. Поэтому, если мне нужна комбинация для i=38
в потоке 1, я могу вычислить [1,2,5]
, одновременно вычисляя i=0
в потоке 2 как [0,1,2]
.
РЕДАКТИРОВАТЬ Ниже утверждение не имеет значения, я перепутал себя
Я рассмотрел алгоритмы, которые используют факториалы, чтобы сузить каждый отдельный элемент слева направо, но я не могу использовать их как 500! уверен, не поместится в памяти. Любые предложения?