HTML Diff
1 added 17 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Древовидные структуры можно использовать для хранения и организации, причем не только цельных, но и группируемых данных.</p>
1 <p>Древовидные структуры можно использовать для хранения и организации, причем не только цельных, но и группируемых данных.</p>
2 <p>Например, такие данные могут состоять из последовательности одинаковых символов. Рассмотрим в качестве исходной точки несколько слов из толкового словаря:</p>
2 <p>Например, такие данные могут состоять из последовательности одинаковых символов. Рассмотрим в качестве исходной точки несколько слов из толкового словаря:</p>
3 <blockquote><p>ОБЕСПЕЧИВАТЬ. Несовершенный вид к "обеспечить"...</p>
3 <blockquote><p>ОБЕСПЕЧИВАТЬ. Несовершенный вид к "обеспечить"...</p>
4 <p>ОБЕСПЕЧИТЬ. Совершенный вид к "обеспечивать". Предоставить материальные средства для жизни...</p>
4 <p>ОБЕСПЕЧИТЬ. Совершенный вид к "обеспечивать". Предоставить материальные средства для жизни...</p>
5 <p>ОБЕСПЕЧИТЬСЯ. Совершенный вид к "обеспечиваться". Запастись, стать обеспеченным...</p>
5 <p>ОБЕСПЕЧИТЬСЯ. Совершенный вид к "обеспечиваться". Запастись, стать обеспеченным...</p>
6 </blockquote><p>Как можно видеть из примера, существует несколько слов, которые начинаются на одну и ту же последовательность символов. В нашем случае у слов один и тот же корень, меняются только суффиксы и окончания.</p>
6 </blockquote><p>Как можно видеть из примера, существует несколько слов, которые начинаются на одну и ту же последовательность символов. В нашем случае у слов один и тот же корень, меняются только суффиксы и окончания.</p>
7 <p>В информатике часть последовательности данных, которая не меняется и находится перед суффиксом, называется<strong>префиксной частью</strong>.</p>
7 <p>В информатике часть последовательности данных, которая не меняется и находится перед суффиксом, называется<strong>префиксной частью</strong>.</p>
8 <p>В этом уроке мы более подробно познакомимся с принципами работы префиксных деревьев, их производными версиями и механизмами работы.</p>
8 <p>В этом уроке мы более подробно познакомимся с принципами работы префиксных деревьев, их производными версиями и механизмами работы.</p>
9 <h2>Зачем нужны префиксные деревья</h2>
9 <h2>Зачем нужны префиксные деревья</h2>
10 <p>При помощи одинаковых префиксов можно сгруппировать наши слова в следующем виде:</p>
10 <p>При помощи одинаковых префиксов можно сгруппировать наши слова в следующем виде:</p>
11 <p>Префиксные деревья специально разработаны, чтобы помогать нам организовывать, хранить и группировать данные в таком виде. Префиксное дерево для нашего примера будут иметь следующий вид:</p>
11 <p>Префиксные деревья специально разработаны, чтобы помогать нам организовывать, хранить и группировать данные в таком виде. Префиксное дерево для нашего примера будут иметь следующий вид:</p>
12 <p>Префиксные деревья помогают прогнозировать пользовательский ввод - например, предлагая слово, наиболее близкое по составу введенных букв. Так работают системы проверки орфографии или дополнитель кода в среде разработки.</p>
12 <p>Префиксные деревья помогают прогнозировать пользовательский ввод - например, предлагая слово, наиболее близкое по составу введенных букв. Так работают системы проверки орфографии или дополнитель кода в среде разработки.</p>
13 <p>Механизм префиксов нашел свое место и в работе интернет-маршрутизации. Там он помогает эффективно хранить IP-адреса, группируемые по префиксам:</p>
13 <p>Механизм префиксов нашел свое место и в работе интернет-маршрутизации. Там он помогает эффективно хранить IP-адреса, группируемые по префиксам:</p>
14 <h2>Как устроены префиксные деревья</h2>
14 <h2>Как устроены префиксные деревья</h2>
15 <p>В качестве примера префиксного дерева рассмотрим хранение слов или некоторых ассоциативных массивов.</p>
15 <p>В качестве примера префиксного дерева рассмотрим хранение слов или некоторых ассоциативных массивов.</p>
16 <p><strong>Префиксным деревом</strong>называется дерево, в котором каждая вершина помечена некоторой буквой и имеет дополнительный<a>признак терминальности</a>. Если мы читаем вершины по порядку, мы получаем последовательность символов, соответствующую некоторому слову.</p>
16 <p><strong>Префиксным деревом</strong>называется дерево, в котором каждая вершина помечена некоторой буквой и имеет дополнительный<a>признак терминальности</a>. Если мы читаем вершины по порядку, мы получаем последовательность символов, соответствующую некоторому слову.</p>
17 <p>Если полученная последовательность заканчивается признаком терминальности, то такое слово считается существующим в этой структуре данных.</p>
17 <p>Если полученная последовательность заканчивается признаком терминальности, то такое слово считается существующим в этой структуре данных.</p>
18 <p>При этом два узла не могут быть связаны с общим предком с помощью одной и той же буквы.</p>
18 <p>При этом два узла не могут быть связаны с общим предком с помощью одной и той же буквы.</p>
19 <h2>Операции над деревом</h2>
19 <h2>Операции над деревом</h2>
20 <p>Для начала представим префиксное дерево в виде кода на JavaScript:</p>
20 <p>Для начала представим префиксное дерево в виде кода на JavaScript:</p>
21 - <p><strong>Javascript</strong></p>
 
22 - <p><strong>Java</strong></p>
 
23 - <p><strong>Python</strong></p>
 
24 - <p><strong>PHP</strong></p>
 
25 <p>С префиксными деревьями можно проводить разные операции, в том числе поиск слов, вставка нового слова и удаление слова. Разберем их подробнее.</p>
21 <p>С префиксными деревьями можно проводить разные операции, в том числе поиск слов, вставка нового слова и удаление слова. Разберем их подробнее.</p>
26 <h3>Поиск слова в дереве</h3>
22 <h3>Поиск слова в дереве</h3>
27 <p>Для выполнения поиска сперва необходимо обратиться к корневой вершине. Обычно считается, что значение корневой вершины равно пустоте.</p>
23 <p>Для выполнения поиска сперва необходимо обратиться к корневой вершине. Обычно считается, что значение корневой вершины равно пустоте.</p>
28 <p>Далее мы перемещаемся по указателям, соответствующим каждой следующей букве в искомом слове.</p>
24 <p>Далее мы перемещаемся по указателям, соответствующим каждой следующей букве в искомом слове.</p>
29 <p>Как только все переходы будут выполнены, нужно выполнить проверку на наличие флага терминальности в поле end нашего класса.</p>
25 <p>Как только все переходы будут выполнены, нужно выполнить проверку на наличие флага терминальности в поле end нашего класса.</p>
30 - <p>Если флаг конца слова присутствует, то поис считаем завершенным успешно - искомое слово найдено.</p>
26 + <p>Если флаг конца слова присутствует, то поиск считаем завершенным успешно - искомое слово найдено.</p>
31 <p>Представим теперь эту операцию в виде метода:</p>
27 <p>Представим теперь эту операцию в виде метода:</p>
32 - <p><strong>Javascript</strong></p>
 
33 - <p><strong>Java</strong></p>
 
34 - <p><strong>Python</strong></p>
 
35 - <p><strong>PHP</strong></p>
 
36 <h3>Вставка слова</h3>
28 <h3>Вставка слова</h3>
37 <p>В таком случае операция вcтавки слова в дерево будет выглядеть следующим образом:</p>
29 <p>В таком случае операция вcтавки слова в дерево будет выглядеть следующим образом:</p>
38 - <p><strong>Javascript</strong></p>
 
39 - <p><strong>Java</strong></p>
 
40 - <p><strong>Python</strong></p>
 
41 - <p><strong>PHP</strong></p>
 
42 <h3>Удаление слова</h3>
30 <h3>Удаление слова</h3>
43 <p>Операция удаления слова принимает следующий вид:</p>
31 <p>Операция удаления слова принимает следующий вид:</p>
44 - <p><strong>Javascript</strong></p>
 
45 - <p><strong>Java</strong></p>
 
46 - <p><strong>Python</strong></p>
 
47 - <p><strong>PHP</strong></p>
 
48 <h2>Сжатые префиксные деревья</h2>
32 <h2>Сжатые префиксные деревья</h2>
49 <p>Это особый подвид префиксных деревьев, заслуживающий отдельного внимания.</p>
33 <p>Это особый подвид префиксных деревьев, заслуживающий отдельного внимания.</p>
50 <p>В таких деревьях мы сжимаем структуру за счет размещения в вершине не одной буквы, а сразу целого фрагмента префикса. При этом из каждого элемента этого префикса существует строго одна связь с другим элементом префикса.</p>
34 <p>В таких деревьях мы сжимаем структуру за счет размещения в вершине не одной буквы, а сразу целого фрагмента префикса. При этом из каждого элемента этого префикса существует строго одна связь с другим элементом префикса.</p>
51 <p>Такие деревья гораздо удобнее использовать для чтения информации за счет уменьшения количества переходов по ссылкам между вершинами.</p>
35 <p>Такие деревья гораздо удобнее использовать для чтения информации за счет уменьшения количества переходов по ссылкам между вершинами.</p>
52 <p>Рассмотрим пример такого дерева на рисунке ниже:</p>
36 <p>Рассмотрим пример такого дерева на рисунке ниже:</p>
53 <p>А так это дерево выглядит без сжатия:</p>
37 <p>А так это дерево выглядит без сжатия:</p>
54 <p>Как видите, количество переходов между вершинами действительно сокращается. Но важно помнить, что такой способ хранения требует более сложную организацию процедур. При сжатии вставка и удаление слов могут потребовать более неочевидной организации вершин - например, их дополнительного разбиения или объединения.</p>
38 <p>Как видите, количество переходов между вершинами действительно сокращается. Но важно помнить, что такой способ хранения требует более сложную организацию процедур. При сжатии вставка и удаление слов могут потребовать более неочевидной организации вершин - например, их дополнительного разбиения или объединения.</p>
55 <p>Сжатые префиксные деревья отлично подходят для хранения данных, которые редко подвергаются изменениям.</p>
39 <p>Сжатые префиксные деревья отлично подходят для хранения данных, которые редко подвергаются изменениям.</p>
56 <h2>Выводы</h2>
40 <h2>Выводы</h2>
57 <p>В этом уроке вы познакомились с классическими и сжатыми префиксными деревьями. Это отличный механизм организации хранения группируемых данных. Такой способ хранения уменьшает объем хранимых данных, помогает предсказывать пользовательский ввод, автоматически исправлять ошибки и организовывать маршрутизацию в вычислительных сетях.</p>
41 <p>В этом уроке вы познакомились с классическими и сжатыми префиксными деревьями. Это отличный механизм организации хранения группируемых данных. Такой способ хранения уменьшает объем хранимых данных, помогает предсказывать пользовательский ввод, автоматически исправлять ошибки и организовывать маршрутизацию в вычислительных сетях.</p>