Здравствуйте ! Я новичёк, хотелось бы узнать каким методом можно решить данную задачу http://acm.timus.ru/problem.aspx?space=1&num=1542 . Пробовал так — строим префиксное дерево из входных слов. Находим все слова, удовлетворяющие заданному префиксу, сортируем по частоте и выводим. Такое решение вылетало с TLE. Ещё пробовал пару способов, но всё равно получал TLE. Возможно через хеширование или дерево отрезков можно решить. Подскажите, пожалуйста, каким способом можно решить данную задачу
Сложновата задача для новичка. Я бы советовал сначала познакомиться с ассимптотическим анализом времени исполнения программы и деревом отрезков.
Хотя в принципе можно и префиксным деревом решить. Главное помнить, что нам надо только первые 10 ответов найти и, собственно, не лезть в остальные.
Вы уже построили дерево. В каждой вершине предподсчитайте (начиная с листьев) 10 самых часто используемых концов. Чтобы быстро пересчитывать в детях можно использовать кучу(типа как мердж в мерджсорте, только из нескольких а не 2х частей) или мб достаточно просто посортить и взять топ10 ибо всего будет не больше 26 * 10 слов.
Я бы решал так : я бы построил бор по начальным словам, и в каждой вершине еще бы хранил 10 значений таких : максимальные встречаемости слов, а если их меньше 10, то дополнял бы -1, и теперь нам подается слово : мы идем по бору, идем по начальным буквым вглубь дерева, теперь дошли до нужного места : теперь идем по детям , и с помощью 26 указателей (так как алфавит 26) ищем нужные слова (их не больше 10), и так рекурсивно для детей продолжаем и выписываем все.
У меня еще 2 варианта решения:
Посортировать строки, затем деревом отрезков 10 раз заменить максимум на соответствующем подотрезке на 0, и вывести строки, которые были заменены, а потом восстановить их.
Делать примерно так же, но на боре, поддерживая для перехода максимальную достижимую по нему частоту.
Всем большое спасибо за советы ! Попробую доделать свой вариант с префиксным деревом (бор). И в качестве практики как посоветовал adamant, вариант с деревом отрезков