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>