Я столкнулся со следующей проблемой на собеседовании по программированию:
Задача 1: N-граммы
N-грамма - это последовательность из N последовательных символов данного слова. У слова «пилот» есть три 3-грамма: «пил», «ило» и «лот». Для данного набора слов и длины n граммов Ваша задача:
• write a function that finds the n-gram that is the most frequent one among all the words
• print the result to the standard output (stdout)
• if there are multiple n-grams having the same maximum frequency please print the one that is the smallest lexicographically (the first one according to the dictionary sorting order)
Обратите внимание, что ваша функция получит следующие аргументы:
• text
○ which is a string containing words separated by whitespaces
• ngramLength
○ which is an integer value giving the length of the n-gram
Ограничения данных
• the length of the text string will not exceed 250,000 characters
• all words are alphanumeric (they contain only English letters a-z, A-Z and numbers 0-9)
Ограничения эффективности
• your function is expected to print the result in less than 2 seconds
Пример вводимого текста: «aaaab a0a baaab c»
Вывод aaa ngramLength: 3
Объяснение
Для входных данных, представленных выше, 3 грамма, отсортированные по частоте:
• "aaa" with a frequency of 3
• "aab" with a frequency of 2
• "a0a" with a frequency of 1
• "baa" with a frequency of 1
Если у меня есть только один час, чтобы решить проблему, и я решил использовать язык C для ее решения: стоит ли реализовать хеш-таблицу для подсчета частоты N-граммов за это время? потому что в библиотеке C нет реализации хеш-таблицы ...
Если да, то я думал реализовать хеш-таблицу, используя отдельную цепочку с упорядоченными связными списками. Эти реализации сокращают время, необходимое для решения проблемы ...
Это самый быстрый вариант?
Спасибо!!!