Недавно у меня был телефон для роли SE, и меня спросили, как бы я определил, были ли два слова анаграммами или нет, я дал ответ, который включал что-то в соответствие с тем, чтобы получить персонажа, итерации над словом, если он существует цикл выхода и т. д. Я думаю, что это было решение N^2 как один цикл за слово с внутренним циклом для сравнения.Использование простых чисел для определения анаграмм быстрее, чем цикл?
После звонка я сделал несколько копаний и написал новое решение; тот, который я планирую передать завтра на следующем этапе интервью, он использует хэш-карту с уникальным простым числом, представляющим каждый символ алфавита. Затем я перебираю список слов, вычисляя значение слова и проверяя, сравнивается ли оно со словом, которое я проверяю. Если значения совпадают, у нас есть победитель (весь бизнес математической теоремы).
Это означает, что один цикл вместо двух намного лучше, но я начал сомневаться в себе и задаюсь вопросом, являются ли дополнительные операции хэш-карты и умножения более дорогостоящими, чем исходное предложение.
Я 99% уверен, хэш-карта будет быстрее, но ...
Может кто-нибудь подтвердить или опровергнуть свои подозрения? Спасибо.
Редактировать: Я забыл упомянуть, что сначала проверяю размер слов, прежде чем даже придумываю что-либо.
Почему эта помеченная Java? И это конкретно вопрос об эффективном алгоритме? Если нет, это звучит немного запутанно. Наконец, мой подход состоял бы в том, чтобы построить 'int [26]' и increment/decment. – chrylis
@chrylis, бирка удален. Речь идет об алгоритме, извинения за отсутствие ясности. Можете ли вы рассказать о int [26] inc/dec, о котором вы упомянули? – null