Мы определяем алфавит, который содержит каждую букву в нашем списке слов.Далее нам нужно различное простое число для каждой буквы в алфавите, я рекомендую использовать наименьшее, которое вы можете найти.
Это даст нам следующее отображение: {a => 2, b => 3,c => 5, d => 7 и т. д.}
Теперь посчитайте буквы в слове, которое вы хотите представить как целое число, и построите свое целое число результата следующим образом:
Псевдокод:
result = 1
for each letter:
....result *= power(prime[letter], count(letter,word)
некоторые примеры:
aaaa => 2 ^ 4
aabb => 2 ^ 2 * 3 ^ 2 = bbaa = baba = ...
и т. Д.
Таким образом, у вас будет целое число, представляющее каждое слово в вашем словаре, и слово, которое вы хотите проверить, сможет быть преобразовано в целое число.Поэтому, если n - это размер вашего словаря, а k - это самое длинное слово, потребуется O (nk), чтобы построить новый словарь, и O (k), чтобы проверить новое слово.
Hackthissite.comесть проблема программирования, которая заключается в следующем: учитывая зашифрованное слово, найдите его в словаре, чтобы увидеть, есть ли какие-либо анаграммы этого слова в словаре.Есть хорошая статья об эффективном решении проблемы, из которой я позаимствовал ответ, также подробно рассматриваются дальнейшие оптимизации.