Пожалуйста, прочтите новое правило об ограничении использования AI-инструментов. ×

Блог пользователя fr0st

Автор fr0st, 10 лет назад, По-русски

Здравствуйте ! Я новичёк, хотелось бы узнать каким методом можно решить данную задачу http://acm.timus.ru/problem.aspx?space=1&num=1542 . Пробовал так — строим префиксное дерево из входных слов. Находим все слова, удовлетворяющие заданному префиксу, сортируем по частоте и выводим. Такое решение вылетало с TLE. Ещё пробовал пару способов, но всё равно получал TLE. Возможно через хеширование или дерево отрезков можно решить. Подскажите, пожалуйста, каким способом можно решить данную задачу

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
10 лет назад, # |
  Проголосовать: нравится -15 Проголосовать: не нравится

Сложновата задача для новичка. Я бы советовал сначала познакомиться с ассимптотическим анализом времени исполнения программы и деревом отрезков.

»
10 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится

Хотя в принципе можно и префиксным деревом решить. Главное помнить, что нам надо только первые 10 ответов найти и, собственно, не лезть в остальные.

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Вы уже построили дерево. В каждой вершине предподсчитайте (начиная с листьев) 10 самых часто используемых концов. Чтобы быстро пересчитывать в детях можно использовать кучу(типа как мердж в мерджсорте, только из нескольких а не 2х частей) или мб достаточно просто посортить и взять топ10 ибо всего будет не больше 26 * 10 слов.

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Я бы решал так : я бы построил бор по начальным словам, и в каждой вершине еще бы хранил 10 значений таких : максимальные встречаемости слов, а если их меньше 10, то дополнял бы -1, и теперь нам подается слово : мы идем по бору, идем по начальным буквым вглубь дерева, теперь дошли до нужного места : теперь идем по детям , и с помощью 26 указателей (так как алфавит 26) ищем нужные слова (их не больше 10), и так рекурсивно для детей продолжаем и выписываем все.

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится

У меня еще 2 варианта решения:

  1. Посортировать строки, затем деревом отрезков 10 раз заменить максимум на соответствующем подотрезке на 0, и вывести строки, которые были заменены, а потом восстановить их.

  2. Делать примерно так же, но на боре, поддерживая для перехода максимальную достижимую по нему частоту.

»
10 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Всем большое спасибо за советы ! Попробую доделать свой вариант с префиксным деревом (бор). И в качестве практики как посоветовал adamant, вариант с деревом отрезков