Алгоритм перестановки

У меня есть Hashmap под названием H1.

Для H1 существует n ключей Hashmap.

Для хэш-карты H1 программа создаст все перестановки набора мощности {1,2,3,4, ... n}.

Другими словами, если n = 5, любое число от 1,2,3, .. 5555 является допустимым списком для H1.

So if,

Ключ 1 = 22

Ключ 2 = 50

Ключ 3 = 12

Ключ 4 = 44

Ключ 5 = 55

Для 111 = {22,22,22}, для 213 = {50,22,12} для 12345 = {22,50, 12, 44, 55}.

По сути, мне нужно найти все списки во всех возможных комбинациях в каждом порядке (например: 1342! = 3142).

У меня есть возможное решение, но я вообще не считаю его оптимальным, оно включает в себя преобразование значений int в строку и просмотр каждого символьного элемента в строке, я ищу, знает ли кто-нибудь более эффективный способ.


person user3256369    schedule 07.03.2015    source источник
comment
Не видя своего возможного решения, невозможно оценить, насколько оно эффективно. Обратите внимание, что минимально возможное время, необходимое для создания набора мощности, должно быть O (2 ^ n), потому что это количество элементов, которые вы должны создать: почти ни один алгоритм не будет «быстрым».   -  person Nathaniel Ford    schedule 07.03.2015


Ответы (1)


Алгоритм для генерации всех возможных перестановок списка?

В любом случае это сложный алгоритм, я думаю, рекурсивный способ - интересный.

Рекурсивный способ в основном удаляет один элемент, вызывает рекурсию в сокращенном списке, а затем возвращает рекурсивный результат с удаленным элементом в каждой позиции.

person Will    schedule 07.03.2015