Информация об изменениях

Сообщение Re: Задачки с Amazon SDE Interview от 12.12.2020 11:05

Изменено 12.12.2020 11:10 Буравчик

Re: Задачки с Amazon SDE Interview
Здравствуйте, Chriso, Вы писали:

C>2. Дан список последовательностей чисел

C>Найти самую часто встречающуюся непрерывную подпоследовательность и сколько раз она встречается.
C>Облегчённый вариант, с которым я также не справился: длина подпоследовательности задана, рассматривать только подпоследовательности этой длины.
C>Очевидное решение с Dictionary, где ключом является сама подпоследовательность не подходит по требуемой памяти, даже в "облегчённом" варианте. Предполагается, что список читается из файла и в память не влезет.

C>Пример:

C>вход [[1, 2, 3, 4], [4, 2, 3, 1]]
C>выход [2, 3], 2

C>вход [[1, 2, 3, 4], [4, 2, 3, 2, 3]]

C>выход [2, 3], 3

Надо объединить все входящие последовательности в одну большую, заменяя промежутки между последовательностями специальным символом ($).
Теперь у нас стоит задача поиска наиболее часто повторяющейся подстроки в строке.

Для этого нужно построить суффиксное дерево (что само по себе не просто).
При построении дерева нужно запоминать количество вхождений этого суффикса.
Потом найти в дереве наиболее глубокий корень (по количеству символов в суффиксе). Это и будет ответ.

P.S. Да уж, задачи — жесть. В условиях малого времени сделать сложно
Re: Задачки с Amazon SDE Interview
Здравствуйте, Chriso, Вы писали:

C>2. Дан список последовательностей чисел

C>Найти самую часто встречающуюся непрерывную подпоследовательность и сколько раз она встречается.
C>Облегчённый вариант, с которым я также не справился: длина подпоследовательности задана, рассматривать только подпоследовательности этой длины.
C>Очевидное решение с Dictionary, где ключом является сама подпоследовательность не подходит по требуемой памяти, даже в "облегчённом" варианте. Предполагается, что список читается из файла и в память не влезет.

C>Пример:

C>вход [[1, 2, 3, 4], [4, 2, 3, 1]]
C>выход [2, 3], 2

C>вход [[1, 2, 3, 4], [4, 2, 3, 2, 3]]

C>выход [2, 3], 3

Думаю, так:

Надо объединить все входящие последовательности в одну большую, заменяя промежутки между последовательностями специальным символом ($).
Теперь у нас стоит задача поиска наиболее часто повторяющейся подстроки в строке.

Для этого нужно построить суффиксное дерево (что само по себе не просто).
При построении дерева нужно для каждого узла запоминать количество его вхождений в строку.
Потом найти в дереве наиболее глубокий узел по количеству символов, считая от корня. Это и будет ответ.

P.S. Да уж, задачи — жесть. В условиях малого времени сделать сложно