Алгоритм поиска 10 лучших поисковых терминов
в настоящее время я готовлюсь к интервью, и это напомнило мне о вопросе, который мне однажды задали в предыдущем интервью, который звучал примерно так:
" вас попросили разработать некоторое программное обеспечение для непрерывного отображения 10 лучших поисковых запросов в Google. Вам предоставляется доступ к каналу, который обеспечивает бесконечный поток в режиме реального времени поисковых запросов в настоящее время осуществляется в Google. Опишите, какой алгоритм и структуры данных вы бы использовали для реализации этого. Вы дизайн двух вариантов:
(i) отображение 10 лучших поисковых запросов за все время (т. е. с момента начала чтения ленты).
(ii) отображение только 10 лучших условий поиска за последний месяц, обновляется ежечасно.
вы можете использовать приближение, чтобы получить топ-10, но вы должны обосновать свой выбор."
я бомбил в этом интервью и до сих пор действительно не знаю, как это реализовать.
первая часть запрашивает 10 наиболее частых элементов в непрерывно растущая подпоследовательность бесконечного списка. Я изучил алгоритмы выбора, но не смог найти никаких онлайн-версий для решения этой проблемы.
вторая часть использует конечный список, но из-за большого количества обрабатываемых данных вы не можете хранить в памяти весь месяц поисковых запросов и вычислять гистограмму каждый час.
проблема усложняется тем, что список топ-10 постоянно обновляется, так что как-то вы нужно рассчитать свой топ-10 по скользящему окну.
какие идеи?
Comments