2015-08-13 1 views
1

Я создаю программу, которая будет генерировать все возможные комбинации из заданного диапазона с заданной длиной.Как разделить диапазон и дать ему несколько потоков для генерации всех комбинаций

Eg. 
range: 1-6 
length: 3 
111 
112 
113 
114 
115 
116 
121 
... 
666 

Я могу сделать такую ​​программу, кто бы я хотел добавить многопоточность. Поэтому я хочу получить несколько потоков от пользователя и разделить работу между ними, так что instand из 1 потока, который генерирует комбинации, я хочу, чтобы N потоков это делали. Я не могу придумать способ разделить работу между потоками. Я искал в Google и здесь, но без везения, вероятно, я не использую правильные ключевые слова. Мне нужен какой-то алгоритм для этого, если вам нужен язык программирования для его описания, я смогу понять любой язык из семейства C.

ответ

1

Возможный раздел может быть разделом (или - префикс). Например:

диапазон: 1-6, длина: 4, N 2:

thread1: все перестановки, которые начинаются с 1, 2 или 3.

thread2: все перестановки, которые начинаются с 4, 5 или 6.

Поскольку вы уже знаете, как вывести все перестановки с одним потоком, просто создайте N потоков, но дайте им новую длину (в приведенном выше примере - new_length = 3). Это должно быть достаточно простым, если у вас есть однопоточный рабочий код. Теперь для каждого потока просто добавьте все префиксы потока. Вернемся к примеру - после того, как Thread1 сделан, создавая все перестановки {range: 1-6, length: 3}, вы просто создаете 3 перестановки из каждого значения результатов - одно с префиксом «1», одно с префиксом из 2 и один с префиксом «3». для 556, например, вы выводите 1556, 2556, 3556.

+0

Я хочу, чтобы, если количество потоков больше, чем символы в диапазоне (например, N: 12), могу ли я использовать все потоки для выполнения работы ? –

+0

Я думаю, вы можете рекурсивно разделить нагрузку между ними. В моем примере, если вам нужно 10 потоков вместо 2, разделите нагрузку потока 1 на 5 потоков точно так же. –

+0

@Planet_Earth см. Мое последнее редактирование –

Смежные вопросы