Статья Автор: Лебедев Дмитрий

TUZ_4-04. Высота слова из текстового корпуса

TUZ_4-04. Высота слова из текстового корпуса

TUZ_4-04. Высота слова из текстового корпуса
4.4. Высота слова из текстового корпуса
Под длиной слова понимается количество содержащихся в нем символов, а под высотой – количество значимых подслов,
которые можно получить из него. Слово, не имеющее собственного значения, имеет нулевую высоту, тогда как слово,
которое имеет смысл и не может быть разделено на два значимых подслова, имеет высоту, равную единице.
Высота слов, которые можно разбить на подслова, равна наибольшей высоте его подслов плюс один.
Например, слово «roqm» не имеет собственного значения и, следовательно, имеет нулевую высоту.
С другой стороны, слово «chukker» нельзя разделить на два значимых подслова, поэтому его высота равна единице.
Наконец, такое слово, как «enterprise», можно рекурсивно разбить на подслова до получения бессмысленных слов,
и его высота будет определяться количеством его подслов.
Ваша задача: написать функцию, которая принимает список слов words и одно слово word и
возвращает высоту слова word, определяемую поиском подслов в words.
В табл. 4.4 показаны ожидаемые результаты для некоторых входных данных.
Таблица 4.4. Некоторые ожидаемые результаты для задачи определения высоты слова по словам в текстовом корпусе
Words, word Ожидаемый результат
A, chukker, corpus, text
wjobnv
0
A, chukker, corpus, text
chukker
1
A B C D AB AC AD BC BD CD ABC ABD ACD BCD ABCD
ABCD
4
Важно отметить, что полная высота слова определяется по словам в текстовом корпусе.
 

Алгоритм
Алгоритм рекурсивно вычисляет высоту слова, разбивая его на более мелкие части,
рекурсивно вычисляя высоты этих частей и комбинируя высоты частей, получает высоту исходного слова.
Чтобы избежать избыточных вычислений и повысить производительность, используется мемоизация.
Ниже подробно описаны шаги, выполняемые алгоритмом.
1. Принимается три входных параметра: words – список слов в текстовом корпусе,
    word – слово, высоту которого необходимо вычислить, и memo – словарь,
    используемый для запоминания ранее вычисленных высот.
   Список слов сортируется по возрастанию, либо считается, что он отсортирован
2. Если параметр memo не указан, то создается новый пустой словарь.
3. Если высота текущего слова уже вычислена и хранится в memo, то возвращается запомненное значение.
4. Для поиска данного слова в списке слов используется алгоритм двоичного поиска.
    Если слово найдено в списке, возвращается его индекс; в противном случае возвращается –1.
5. Если слово отсутствует в списке words, его высота принимается равной 0,
    возвращается 0 и алгоритм завершается.
6. Для хранения всех возможных способов деления слова на две части и проверки наличия обеих частей
    в списке слов используется список validList.
7. Цикл перебирает все возможные позиции разделения слова word, от позиции 1 до длины слова минус 1.
    Для каждой позиции извлекаются левая и правая части слова.
8. Если в списке words обнаруживаются левая и правая части, то они добавляются в список validList.
9. Если допустимых разбиений не обнаружено, высота слова принимается равной 1 и возвращается 1.
10. Для хранения высот всех допустимых разделений создается список hs.
11. Для каждого допустимого разделения (ls, rs) высота левой и правой частей вычисляется рекурсивно.
      Если высота какой-то части уже вычислена и хранится в memo, то используется запомненное значение;
      в противном случае выполняется рекурсивный вызов для вычисления высоты.
      Высоты обеих частей складываются, и прибавляется 1 (исходное слово имеет смысл),
      чтобы получить высоту текущего разделения.
12. По завершении возвращается максимальная высота из всех допустимых разделений, хранящихся в memo.


Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать