HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Основополагающие сведения о структурах данных</a><ul><li><a>Базовые термины</a></li>
1 <ul><li><a>Основополагающие сведения о структурах данных</a><ul><li><a>Базовые термины</a></li>
2 <li><a>Характеристики</a></li>
2 <li><a>Характеристики</a></li>
3 <li><a>Какие проблемы можно решить с помощью структуры данных</a></li>
3 <li><a>Какие проблемы можно решить с помощью структуры данных</a></li>
4 <li><a>Случаи выполнения</a></li>
4 <li><a>Случаи выполнения</a></li>
5 </ul></li>
5 </ul></li>
6 <li><a>Основные виды структур</a><ul><li><a>Массивы</a></li>
6 <li><a>Основные виды структур</a><ul><li><a>Массивы</a></li>
7 <li><a>Списки</a><ul><li><a>Связные (связанные) списки</a></li>
7 <li><a>Списки</a><ul><li><a>Связные (связанные) списки</a></li>
8 <li><a>Стеки</a></li>
8 <li><a>Стеки</a></li>
9 <li><a>Очереди</a></li>
9 <li><a>Очереди</a></li>
10 <li><a>Дек или двухсторонняя очередь</a></li>
10 <li><a>Дек или двухсторонняя очередь</a></li>
11 </ul></li>
11 </ul></li>
12 <li><a>Графы</a></li>
12 <li><a>Графы</a></li>
13 <li><a>Множества</a></li>
13 <li><a>Множества</a></li>
14 <li><a>Map</a></li>
14 <li><a>Map</a></li>
15 <li><a>Хэш-таблицы</a></li>
15 <li><a>Хэш-таблицы</a></li>
16 <li><a>Деревья</a><ul><li><a>Дерево двоичного (бинарного) поиска</a></li>
16 <li><a>Деревья</a><ul><li><a>Дерево двоичного (бинарного) поиска</a></li>
17 <li><a>Префиксные деревья (Trie), боры, лучи</a></li>
17 <li><a>Префиксные деревья (Trie), боры, лучи</a></li>
18 <li><a>Двоичная куча</a></li>
18 <li><a>Двоичная куча</a></li>
19 </ul></li>
19 </ul></li>
20 </ul></li>
20 </ul></li>
21 </ul><p>Предлагаем укрепить (или получить) знания о базовых структурах данных. Эти понятия являются основой всего, что связано с программами. Вспомните азы, а если не знаете - получите их. Они пригодятся в работе, а если есть цель найти ее, то и при прохождении интервью. Укажите, что вы знаете составляющие структуры данных, их применение, и это поможет в поиске работы. Потратив немного времени, вы приятно удивите интервьюера, начальника или коллег по работе.</p>
21 </ul><p>Предлагаем укрепить (или получить) знания о базовых структурах данных. Эти понятия являются основой всего, что связано с программами. Вспомните азы, а если не знаете - получите их. Они пригодятся в работе, а если есть цель найти ее, то и при прохождении интервью. Укажите, что вы знаете составляющие структуры данных, их применение, и это поможет в поиске работы. Потратив немного времени, вы приятно удивите интервьюера, начальника или коллег по работе.</p>
22 <h2>Основополагающие сведения о структурах данных</h2>
22 <h2>Основополагающие сведения о структурах данных</h2>
23 <p>Классическая структура данных представляет собой определенный способ организации этих самых данных для дальнейшего эффективного использования. Это если кратко. В более развернутом виде - она представляет собой некую упаковку, в которой данные сохраняются в определенной "моделе".</p>
23 <p>Классическая структура данных представляет собой определенный способ организации этих самых данных для дальнейшего эффективного использования. Это если кратко. В более развернутом виде - она представляет собой некую упаковку, в которой данные сохраняются в определенной "моделе".</p>
24 <p>Структуры данных делятся на:</p>
24 <p>Структуры данных делятся на:</p>
25 <ul><li>линейные (стеки, очереди, массивы) - элементы выстраиваются в последовательность либо линейный список. Также линейны и обходы узлов;</li>
25 <ul><li>линейные (стеки, очереди, массивы) - элементы выстраиваются в последовательность либо линейный список. Также линейны и обходы узлов;</li>
26 <li>нелинейные (графы, деревья) - данные выстраиваются без какой-либо последовательности. Также не линейны и обходы узлов.</li>
26 <li>нелинейные (графы, деревья) - данные выстраиваются без какой-либо последовательности. Также не линейны и обходы узлов.</li>
27 </ul><p>Коснемся основных действий. Данные можно получить, найти, добавить, удалить. Для реализации этих целей существует много разнообразных структур данных. Каждая отдельно взятая более эффективна в одних вопросах и менее эффективна в других. Потому разработчик должен понимать функциональные составляющие каждой структуры. Грамотное применение функциональных свойств структуры данных ускорит решение любой поставленной задачи.</p>
27 </ul><p>Коснемся основных действий. Данные можно получить, найти, добавить, удалить. Для реализации этих целей существует много разнообразных структур данных. Каждая отдельно взятая более эффективна в одних вопросах и менее эффективна в других. Потому разработчик должен понимать функциональные составляющие каждой структуры. Грамотное применение функциональных свойств структуры данных ускорит решение любой поставленной задачи.</p>
28 <p>Приходится часто искать информацию - укажите одну разновидность. Если нужно постоянно что-либо вставлять - укажите другую. А если частенько приходится выполнять действия по перестановке и удалению - укажите третье решение.</p>
28 <p>Приходится часто искать информацию - укажите одну разновидность. Если нужно постоянно что-либо вставлять - укажите другую. А если частенько приходится выполнять действия по перестановке и удалению - укажите третье решение.</p>
29 <h3>Базовые термины</h3>
29 <h3>Базовые термины</h3>
30 <p>Перед изучением структуры данных кратко коснемся их основы - терминов, а затем перейдем к применению. К ним относятся:</p>
30 <p>Перед изучением структуры данных кратко коснемся их основы - терминов, а затем перейдем к применению. К ним относятся:</p>
31 <ul><li>Интерфейс - определенный набор операций, поддерживающих структуру данных. Он присущ каждой структуре. Интерфейс может предоставлять только перечень поддерживаемых операций, тип принимаемых параметров и возвращает тип этих операций.</li>
31 <ul><li>Интерфейс - определенный набор операций, поддерживающих структуру данных. Он присущ каждой структуре. Интерфейс может предоставлять только перечень поддерживаемых операций, тип принимаемых параметров и возвращает тип этих операций.</li>
32 <li>Реализация - обеспечивает внутреннее представление структуры данных, помогает в определении алгоритмов, которые используются в операциях.</li>
32 <li>Реализация - обеспечивает внутреннее представление структуры данных, помогает в определении алгоритмов, которые используются в операциях.</li>
33 </ul><h3>Характеристики</h3>
33 </ul><h3>Характеристики</h3>
34 <p>Важными характеристиками структур данных являются:</p>
34 <p>Важными характеристиками структур данных являются:</p>
35 <ul><li>Корректность - она должна грамотно реализовывать свой интерфейс.</li>
35 <ul><li>Корректность - она должна грамотно реализовывать свой интерфейс.</li>
36 <li>Сложность времени - должно использоваться минимальное количество времени на выполнение операций.</li>
36 <li>Сложность времени - должно использоваться минимальное количество времени на выполнение операций.</li>
37 <li>Сложность пространства - при проведении операций память должна использоваться минимально.</li>
37 <li>Сложность пространства - при проведении операций память должна использоваться минимально.</li>
38 </ul><h3>Какие проблемы можно решить с помощью структуры данных</h3>
38 </ul><h3>Какие проблемы можно решить с помощью структуры данных</h3>
39 <p>В связи с тем, что приложения становятся все более сложными, а количество составляющей информации в них постоянно растет, то возникают три проблемы:</p>
39 <p>В связи с тем, что приложения становятся все более сложными, а количество составляющей информации в них постоянно растет, то возникают три проблемы:</p>
40 <ul><li>замедление процесса поиска в связи с ростом данных;</li>
40 <ul><li>замедление процесса поиска в связи с ростом данных;</li>
41 <li>ограниченная скорость процессоров. Несмотря на то, что она достаточно высокая, с ростом объема информации и она ограничивается;</li>
41 <li>ограниченная скорость процессоров. Несмотря на то, что она достаточно высокая, с ростом объема информации и она ограничивается;</li>
42 <li>многократные запросы через поиск на веб-серверах вызывают сбои в их работе.</li>
42 <li>многократные запросы через поиск на веб-серверах вызывают сбои в их работе.</li>
43 </ul><p>Структуры данных помогают в решение вышеперечисленных проблем. Данные можно организовать в структуры таким образом, что поиск будет осуществляться практически мгновенно.</p>
43 </ul><p>Структуры данных помогают в решение вышеперечисленных проблем. Данные можно организовать в структуры таким образом, что поиск будет осуществляться практически мгновенно.</p>
44 <h3>Случаи выполнения</h3>
44 <h3>Случаи выполнения</h3>
45 <p>Чтобы провести сравнение временных промежутков, необходимых для выполнения различной структуры, используются следующие случаи:</p>
45 <p>Чтобы провести сравнение временных промежутков, необходимых для выполнения различной структуры, используются следующие случаи:</p>
46 <ul><li>худший - сценарий, при котором для выполнения конкретной операции потребуется максимальное время, которое только возможно;</li>
46 <ul><li>худший - сценарий, при котором для выполнения конкретной операции потребуется максимальное время, которое только возможно;</li>
47 <li>средний - сценарий, при котором на выполнение операции отводится среднее время;</li>
47 <li>средний - сценарий, при котором на выполнение операции отводится среднее время;</li>
48 <li>наилучший - сценарий, который отображает кратчайший промежуток времени, необходимый для выполнения операции.</li>
48 <li>наилучший - сценарий, который отображает кратчайший промежуток времени, необходимый для выполнения операции.</li>
49 </ul><h2>Основные виды структур</h2>
49 </ul><h2>Основные виды структур</h2>
50 <p>К основным видам структуры данных относятся:</p>
50 <p>К основным видам структуры данных относятся:</p>
51 <h3>Массивы</h3>
51 <h3>Массивы</h3>
52 <p>Это наипростейшие и широко используемые структуры данных, в которых элементы следуют один за другим. Представляет собой контейнер, в котором может храниться фиксированное количество однотипных компонентов.</p>
52 <p>Это наипростейшие и широко используемые структуры данных, в которых элементы следуют один за другим. Представляет собой контейнер, в котором может храниться фиксированное количество однотипных компонентов.</p>
53 <p>Важнейшие термины:</p>
53 <p>Важнейшие термины:</p>
54 <ul><li>элементами называют все компоненты, хранящиеся в массиве;</li>
54 <ul><li>элементами называют все компоненты, хранящиеся в массиве;</li>
55 <li>индексы - местонахождение каждого элемента в массиве выражается целым числовым индексом, используемом для его идентификации.</li>
55 <li>индексы - местонахождение каждого элемента в массиве выражается целым числовым индексом, используемом для его идентификации.</li>
56 </ul><p>Размерность массива определяет количество индексов в нем. Они бывают одномерными (называют векторами) и многомерными (массив в середине массива). Массивы могут объявляться разными способами на различных языках программирования.</p>
56 </ul><p>Размерность массива определяет количество индексов в нем. Они бывают одномерными (называют векторами) и многомерными (массив в середине массива). Массивы могут объявляться разными способами на различных языках программирования.</p>
57 <p>Некоторые структуры являются производными массивов (стеки, очереди). В массиве каждый элемент имеет индекс (положительное целое числовое значение), соответствующий тому, какую позицию в массиве он занимает.</p>
57 <p>Некоторые структуры являются производными массивов (стеки, очереди). В массиве каждый элемент имеет индекс (положительное целое числовое значение), соответствующий тому, какую позицию в массиве он занимает.</p>
58 <p>Язык программирования определяет, с какого значения в массиве начинается нумерация. Во многих языках начальным индексом массива определен 0.</p>
58 <p>Язык программирования определяет, с какого значения в массиве начинается нумерация. Во многих языках начальным индексом массива определен 0.</p>
59 <p>Массивы бывают:</p>
59 <p>Массивы бывают:</p>
60 <ul><li>статическими - характеризуются однородностью данных;</li>
60 <ul><li>статическими - характеризуются однородностью данных;</li>
61 <li>динамическими - характеризуются непостоянством размера, который может меняться в ходе выполнения программы. Это усложняет процесс, ухудшает быстроту действий, но работа с информацией становится более гибкой;</li>
61 <li>динамическими - характеризуются непостоянством размера, который может меняться в ходе выполнения программы. Это усложняет процесс, ухудшает быстроту действий, но работа с информацией становится более гибкой;</li>
62 <li>гетерогенными - характеризуется неоднородностью данных.</li>
62 <li>гетерогенными - характеризуется неоднородностью данных.</li>
63 </ul><p>Основные операции, которые поддерживаются массивами:</p>
63 </ul><p>Основные операции, которые поддерживаются массивами:</p>
64 <ul><li>Traverse - выставляет один за одним все компоненты массива;</li>
64 <ul><li>Traverse - выставляет один за одним все компоненты массива;</li>
65 <li>Insert - добавляет один или несколько элементов по указанному индексу;</li>
65 <li>Insert - добавляет один или несколько элементов по указанному индексу;</li>
66 <li>Get - производит возврат элемента по указанному индексу;</li>
66 <li>Get - производит возврат элемента по указанному индексу;</li>
67 <li>Delete - выполняет удаление элемента по указанному индексу;</li>
67 <li>Delete - выполняет удаление элемента по указанному индексу;</li>
68 <li>Size - позволяет узнать общую численность элементов, содержащихся в массиве.</li>
68 <li>Size - позволяет узнать общую численность элементов, содержащихся в массиве.</li>
69 </ul><h3>Списки</h3>
69 </ul><h3>Списки</h3>
70 <p>Список является абстрактным типом данных. Существует несколько их разновидностей. Рассмотрим наиболее популярные:</p>
70 <p>Список является абстрактным типом данных. Существует несколько их разновидностей. Рассмотрим наиболее популярные:</p>
71 <h4>Связные (связанные) списки</h4>
71 <h4>Связные (связанные) списки</h4>
72 <p>Связной список представляет собой массив с конечным множеством элементов (отдельных объектов) и указателями на них.</p>
72 <p>Связной список представляет собой массив с конечным множеством элементов (отдельных объектов) и указателями на них.</p>
73 <p>Каждый объект содержит:</p>
73 <p>Каждый объект содержит:</p>
74 <ul><li>поле информации (тип данных может быть любым);</li>
74 <ul><li>поле информации (тип данных может быть любым);</li>
75 <li>ссылки (указатели) на последующий узел.</li>
75 <li>ссылки (указатели) на последующий узел.</li>
76 </ul><p>Таким образом упорядоченные элементы связного списка связаны друг с другом указателями. Вместе эти группы образуют последовательность.</p>
76 </ul><p>Таким образом упорядоченные элементы связного списка связаны друг с другом указателями. Вместе эти группы образуют последовательность.</p>
77 <p>Как и массив, список лежит в основе понятия классической структуры данных. Их функциональные особенности часто сравнивают, т.к. большинство других структур могут быть реализованы с помощью массивов или связных списков. Последний отличается от массива структурной гибкостью. Доступ к спискам осуществляется последовательно, а к массивам - произвольно.</p>
77 <p>Как и массив, список лежит в основе понятия классической структуры данных. Их функциональные особенности часто сравнивают, т.к. большинство других структур могут быть реализованы с помощью массивов или связных списков. Последний отличается от массива структурной гибкостью. Доступ к спискам осуществляется последовательно, а к массивам - произвольно.</p>
78 <p>Связанные списки бывают следующих видов:</p>
78 <p>Связанные списки бывают следующих видов:</p>
79 <ul><li>Однонаправленные (односвязные) - каждый узел сохраняет адрес либо ссылку на тот узел, который числится следующим. А узел, являющийся последним, содержит последующий адрес либо ссылку как NULL. Линейные однонаправленные списки встречаются чаще всего.</li>
79 <ul><li>Однонаправленные (односвязные) - каждый узел сохраняет адрес либо ссылку на тот узел, который числится следующим. А узел, являющийся последним, содержит последующий адрес либо ссылку как NULL. Линейные однонаправленные списки встречаются чаще всего.</li>
80 <li>Двунаправленные (двусвязные) - имеют две ссылки, которые связаны с каждым отдельным узлом (первая указывает на последующий, вторая - на предыдущий).</li>
80 <li>Двунаправленные (двусвязные) - имеют две ссылки, которые связаны с каждым отдельным узлом (первая указывает на последующий, вторая - на предыдущий).</li>
81 <li>Круговые (кольцевые) - все узлы списка соединены в круг при отсутствии в последнем NULL. Является подвидом двух предыдущих видов связных списков. Они могут быть одно- или двусвязными.</li>
81 <li>Круговые (кольцевые) - все узлы списка соединены в круг при отсутствии в последнем NULL. Является подвидом двух предыдущих видов связных списков. Они могут быть одно- или двусвязными.</li>
82 </ul><p>Чтобы односвязный список стал круговым, необходимо в его последний узел вставить указатель на первый элемент. Чтобы двунаправленный список преобразовать в кольцевой, следует добавить две ссылки на узлы: первый и последний.</p>
82 </ul><p>Чтобы односвязный список стал круговым, необходимо в его последний узел вставить указатель на первый элемент. Чтобы двунаправленный список преобразовать в кольцевой, следует добавить две ссылки на узлы: первый и последний.</p>
83 <p>Операции, являющиеся основными:</p>
83 <p>Операции, являющиеся основными:</p>
84 <ul><li>InsertAtEnd - вставка заданного элемента в конце списка;</li>
84 <ul><li>InsertAtEnd - вставка заданного элемента в конце списка;</li>
85 <li>InsertAtHead - вставка заданного элемента в начало списка;</li>
85 <li>InsertAtHead - вставка заданного элемента в начало списка;</li>
86 <li>Delete - удаление заданного элемента из списка;</li>
86 <li>Delete - удаление заданного элемента из списка;</li>
87 <li>DeleteAtHead - удаление первого элемента в списке;</li>
87 <li>DeleteAtHead - удаление первого элемента в списке;</li>
88 <li>Search - возвращение заданного элемента из списка</li>
88 <li>Search - возвращение заданного элемента из списка</li>
89 <li>isEmpty - в тем случае, когда список пустой, производится возврат True.</li>
89 <li>isEmpty - в тем случае, когда список пустой, производится возврат True.</li>
90 </ul><h4>Стеки</h4>
90 </ul><h4>Стеки</h4>
91 <p>Являются базовой структурой, в которой реализовано лишь добавление и удаление объектов в начало стека (через его вершину). Представляет собой список элементов, которые организованы по принципу LIFO (на английском языке Last In - First Out, что в переводе означает "последним зашел - первым ушел"). По тому же принципу работает в приложениях функционал "Отменить".</p>
91 <p>Являются базовой структурой, в которой реализовано лишь добавление и удаление объектов в начало стека (через его вершину). Представляет собой список элементов, которые организованы по принципу LIFO (на английском языке Last In - First Out, что в переводе означает "последним зашел - первым ушел"). По тому же принципу работает в приложениях функционал "Отменить".</p>
92 <p>Отличное сравнение - стопка тарелок. Чтобы из стопки взять тарелку, необходимо вначале снять верхние тарелки. А положить тарелку можно только на верх стопки.</p>
92 <p>Отличное сравнение - стопка тарелок. Чтобы из стопки взять тарелку, необходимо вначале снять верхние тарелки. А положить тарелку можно только на верх стопки.</p>
93 <p>Основные операции:</p>
93 <p>Основные операции:</p>
94 <ul><li>Push - вставка в стек элемента наверху;</li>
94 <ul><li>Push - вставка в стек элемента наверху;</li>
95 <li>Pop - удаление верхнего элемента из стека;</li>
95 <li>Pop - удаление верхнего элемента из стека;</li>
96 <li>Pip - отображается содержимое;</li>
96 <li>Pip - отображается содержимое;</li>
97 <li>isEmpty - происходит возврат True в случае, когда стек пустой;</li>
97 <li>isEmpty - происходит возврат True в случае, когда стек пустой;</li>
98 <li>Top - возвращает элемент сверху, не удаляя его из стека.</li>
98 <li>Top - возвращает элемент сверху, не удаляя его из стека.</li>
99 </ul><p>Чаще всего в программировании применяется:</p>
99 </ul><p>Чаще всего в программировании применяется:</p>
100 <ul><li>стек изменений в редакторе кода, позволяющий быстро делать отмену изменений и возвращаться к предыдущему состоянию;</li>
100 <ul><li>стек изменений в редакторе кода, позволяющий быстро делать отмену изменений и возвращаться к предыдущему состоянию;</li>
101 <li>стек передвижения по страницам в браузере - позволяет быстро переходить по страницам.</li>
101 <li>стек передвижения по страницам в браузере - позволяет быстро переходить по страницам.</li>
102 </ul><h4>Очереди</h4>
102 </ul><h4>Очереди</h4>
103 <p>Является яркой аналогией с очередью в магазин. Порядок входа в него определяет то, в каком порядке была занята очередь. Первый занявший очередь зайдет первым, за ним - второй и т.д. В очереди используется принцип доступа к данным FIFO (на английском языке - First In First Out, в переводе означает "Первый вошел, первый ушел").</p>
103 <p>Является яркой аналогией с очередью в магазин. Порядок входа в него определяет то, в каком порядке была занята очередь. Первый занявший очередь зайдет первым, за ним - второй и т.д. В очереди используется принцип доступа к данным FIFO (на английском языке - First In First Out, в переводе означает "Первый вошел, первый ушел").</p>
104 <p>Если кратко, то очередью является список, в котором добавление новых элементов допустимо строго в его конец, а извлечение - происходит строго с другого конца, который называют началом списка.</p>
104 <p>Если кратко, то очередью является список, в котором добавление новых элементов допустимо строго в его конец, а извлечение - происходит строго с другого конца, который называют началом списка.</p>
105 <p>Элементы сохраняются последовательно. Но для очереди используется принцип FIFO, а не LIFO.</p>
105 <p>Элементы сохраняются последовательно. Но для очереди используется принцип FIFO, а не LIFO.</p>
106 <p>Выполняются операции:</p>
106 <p>Выполняются операции:</p>
107 <ul><li>Enqueue - вставка элемента в конец очереди;</li>
107 <ul><li>Enqueue - вставка элемента в конец очереди;</li>
108 <li>Dequeue - удаление элемента из начала очереди;</li>
108 <li>Dequeue - удаление элемента из начала очереди;</li>
109 <li>isEmpty - будет возвращено значение True, если очередь пуста;</li>
109 <li>isEmpty - будет возвращено значение True, если очередь пуста;</li>
110 <li>Top - возвращает первый элемент из очереди.</li>
110 <li>Top - возвращает первый элемент из очереди.</li>
111 </ul><h4>Дек или двухсторонняя очередь</h4>
111 </ul><h4>Дек или двухсторонняя очередь</h4>
112 <p>Дек (двухсторонняя очередь) - это вид списка (стека) с двумя концами. Он позволяет добавлять и извлекать элементы с двух сторон (как в начале, так и в конце).</p>
112 <p>Дек (двухсторонняя очередь) - это вид списка (стека) с двумя концами. Он позволяет добавлять и извлекать элементы с двух сторон (как в начале, так и в конце).</p>
113 <p>Дек работает одновременно по FIFO и LIFO. Потому он и относится к отдельной программной единице, которая была получена в результате суммирования стека и очереди.</p>
113 <p>Дек работает одновременно по FIFO и LIFO. Потому он и относится к отдельной программной единице, которая была получена в результате суммирования стека и очереди.</p>
114 <h3>Графы</h3>
114 <h3>Графы</h3>
115 <p>Графом называют набор узлов (вершин), соединенных между собой связями (называют ребра, дуги).</p>
115 <p>Графом называют набор узлов (вершин), соединенных между собой связями (называют ребра, дуги).</p>
116 <p>Графы бывают:</p>
116 <p>Графы бывают:</p>
117 <ul><li>ориентированными - имеют ребра с единственно возможным направлением между парой связанных вершин;</li>
117 <ul><li>ориентированными - имеют ребра с единственно возможным направлением между парой связанных вершин;</li>
118 <li>неориентированными - для каждой дуги переход между вершинами может происходить в любом направлении, а также из каждой вершины можно перейти в другую;</li>
118 <li>неориентированными - для каждой дуги переход между вершинами может происходить в любом направлении, а также из каждой вершины можно перейти в другую;</li>
119 <li>смешанные - отличаются присутствием дуг, перечисленных выше.</li>
119 <li>смешанные - отличаются присутствием дуг, перечисленных выше.</li>
120 </ul><p>Графы могут иметь различную форму:</p>
120 </ul><p>Графы могут иметь различную форму:</p>
121 <ul><li>матрицы смежности - таблицы целых чисел, в которой каждая строка либо столбец являются другим узлом на графе. В месте пересечения столбца и строки находится число, указывающее на отношение. Нули указывают, что ребер нет, а единицы - что связи есть;</li>
121 <ul><li>матрицы смежности - таблицы целых чисел, в которой каждая строка либо столбец являются другим узлом на графе. В месте пересечения столбца и строки находится число, указывающее на отношение. Нули указывают, что ребер нет, а единицы - что связи есть;</li>
122 <li>матрицы инцидентности;</li>
122 <li>матрицы инцидентности;</li>
123 <li>списка смежности - представлен списком, в котором левая сторона выступает вершиной, а правая - перечнем всех иных узлов, соединенных с ней;</li>
123 <li>списка смежности - представлен списком, в котором левая сторона выступает вершиной, а правая - перечнем всех иных узлов, соединенных с ней;</li>
124 <li>списка ребер.</li>
124 <li>списка ребер.</li>
125 </ul><p>В графах используются алгоритмы обхода:</p>
125 </ul><p>В графах используются алгоритмы обхода:</p>
126 <ul><li>в глубину (depth-first search) - обход осуществляется по узлам.</li>
126 <ul><li>в глубину (depth-first search) - обход осуществляется по узлам.</li>
127 <li>в ширину (breadth-first search) - поиск осуществляется по уровням;</li>
127 <li>в ширину (breadth-first search) - поиск осуществляется по уровням;</li>
128 </ul><p>Стиль дуг граф может быть не только в виде прямой линии, а вершин - выражен в цифрах. Существуют графы, именуемые взвешенными, где ребрам соответствует определенное значение (именуемое его весом). При совпадении концов ребра его называют петлей.</p>
128 </ul><p>Стиль дуг граф может быть не только в виде прямой линии, а вершин - выражен в цифрах. Существуют графы, именуемые взвешенными, где ребрам соответствует определенное значение (именуемое его весом). При совпадении концов ребра его называют петлей.</p>
129 <p>Графы довольно часто используются в транспортных и компьютерных сетях, веб-технологиях. По принципу граф построены социальные сети, где люди являются узлами, а дуги - их связями.</p>
129 <p>Графы довольно часто используются в транспортных и компьютерных сетях, веб-технологиях. По принципу граф построены социальные сети, где люди являются узлами, а дуги - их связями.</p>
130 <h3>Множества</h3>
130 <h3>Множества</h3>
131 <p>Хранение данных во множество организовано беспорядочно и без повторяющихся значений. В них можно добавлять и удалять объекты, а также есть еще ряд важнейших функций, позволяющих работать одновременно с двумя наборами функций.</p>
131 <p>Хранение данных во множество организовано беспорядочно и без повторяющихся значений. В них можно добавлять и удалять объекты, а также есть еще ряд важнейших функций, позволяющих работать одновременно с двумя наборами функций.</p>
132 <p>Так, при двух заданных множествах функции выполнят:</p>
132 <p>Так, при двух заданных множествах функции выполнят:</p>
133 <ul><li>Union (объединение множеств) - объединятся все элементы, принадлежащие им обеим. Результат будет возвращен в качестве нового (не имеющего дубликатов);</li>
133 <ul><li>Union (объединение множеств) - объединятся все элементы, принадлежащие им обеим. Результат будет возвращен в качестве нового (не имеющего дубликатов);</li>
134 <li>Intersection (пересечение множеств) - будет возвращено новое множество, которому будут принадлежать объекты, имевшиеся в обеих заданных множествах;</li>
134 <li>Intersection (пересечение множеств) - будет возвращено новое множество, которому будут принадлежать объекты, имевшиеся в обеих заданных множествах;</li>
135 <li>Difference (разница множеств) - будет возвращено множество с элементами, содержавшимися в одном и не повторявшиеся в другом;</li>
135 <li>Difference (разница множеств) - будет возвращено множество с элементами, содержавшимися в одном и не повторявшиеся в другом;</li>
136 <li>Subset (подмножество) - возвращает булево значение, демонстрирующее содержатся ли в множестве все объекты иного.</li>
136 <li>Subset (подмножество) - возвращает булево значение, демонстрирующее содержатся ли в множестве все объекты иного.</li>
137 </ul><h3>Map</h3>
137 </ul><h3>Map</h3>
138 <p>Map также именуют ассоциативный массив или словарь. Это структура данных, которая сохраняет данные в связке уникальный ключ/ значение. Чаще всего он используется, когда необходим быстрый поиск информации</p>
138 <p>Map также именуют ассоциативный массив или словарь. Это структура данных, которая сохраняет данные в связке уникальный ключ/ значение. Чаще всего он используется, когда необходим быстрый поиск информации</p>
139 <p>С помощью Map можно:</p>
139 <p>С помощью Map можно:</p>
140 <ul><li>добавить пару;</li>
140 <ul><li>добавить пару;</li>
141 <li>удалить пару;</li>
141 <li>удалить пару;</li>
142 <li>изменить пару;</li>
142 <li>изменить пару;</li>
143 <li>найти значения, которые связаны с определенными ключами.</li>
143 <li>найти значения, которые связаны с определенными ключами.</li>
144 </ul><h3>Хэш-таблицы</h3>
144 </ul><h3>Хэш-таблицы</h3>
145 <p>Это структуры, реализующие интерфейс Map, позволяющий сохранять пару (ключ/ значение). Хеширование применяется для нахождения в массиве значения индекса, по которому будет найдено нужное значение.</p>
145 <p>Это структуры, реализующие интерфейс Map, позволяющий сохранять пару (ключ/ значение). Хеширование применяется для нахождения в массиве значения индекса, по которому будет найдено нужное значение.</p>
146 <p>При детальном рассмотрении можно увидеть, что хэш-таблица является массивом. В нем хэш-функция является индексом.</p>
146 <p>При детальном рассмотрении можно увидеть, что хэш-таблица является массивом. В нем хэш-функция является индексом.</p>
147 <p>Коллизией называют хеширование двух вводов, имеющих одинаковый цифровой выход. Цель - уменьшение числа коллизий.</p>
147 <p>Коллизией называют хеширование двух вводов, имеющих одинаковый цифровой выход. Цель - уменьшение числа коллизий.</p>
148 <p>Когда в хэш-таблицу вводится пара ключ/ значение, с уникальным ключом проводится хеширование, после чего он становится числом. Оно в последствии используется в качестве фактического ключа, в котором это значение хранится. При повторной попытке получить доступ к этому же ключу, хеш-функция проведет его обработку и вернет то же числовое значение, которое в дальнейшем будет использовано для нахождения связанного значения. Это способствует быстрому поиску.</p>
148 <p>Когда в хэш-таблицу вводится пара ключ/ значение, с уникальным ключом проводится хеширование, после чего он становится числом. Оно в последствии используется в качестве фактического ключа, в котором это значение хранится. При повторной попытке получить доступ к этому же ключу, хеш-функция проведет его обработку и вернет то же числовое значение, которое в дальнейшем будет использовано для нахождения связанного значения. Это способствует быстрому поиску.</p>
149 <p>Производительность хеширования зависит от:</p>
149 <p>Производительность хеширования зависит от:</p>
150 <ul><li>функций хеширования;</li>
150 <ul><li>функций хеширования;</li>
151 <li>параметров хэш-таблиц;</li>
151 <li>параметров хэш-таблиц;</li>
152 <li>методов устранения коллизий.</li>
152 <li>методов устранения коллизий.</li>
153 </ul><h3>Деревья</h3>
153 </ul><h3>Деревья</h3>
154 <p>Деревом является иерархическая структура данных. Она составлена из узлов (вершин) и дуг (ребер). При близком рассмотрении можно понять, что деревьями являются связанные графы, не имеющие цикличности.</p>
154 <p>Деревом является иерархическая структура данных. Она составлена из узлов (вершин) и дуг (ребер). При близком рассмотрении можно понять, что деревьями являются связанные графы, не имеющие цикличности.</p>
155 <p>От деревьев, встречающихся в природе, классическое математическое дерево отличается тем, что корень последнего расположен вверху. А его ветви "растут" сверху вниз.</p>
155 <p>От деревьев, встречающихся в природе, классическое математическое дерево отличается тем, что корень последнего расположен вверху. А его ветви "растут" сверху вниз.</p>
156 <p>Дереву присущи характеристики:</p>
156 <p>Дереву присущи характеристики:</p>
157 <ol><li>Каждое имеет единственную вершину (корневой узел), расположенную сверху и не имеющую предков. Никакая вершина не ссылается на корень, а из него можно достичь любой имеющейся вершины дерева (это следствие свойства связанности древовидной структуры).</li>
157 <ol><li>Каждое имеет единственную вершину (корневой узел), расположенную сверху и не имеющую предков. Никакая вершина не ссылается на корень, а из него можно достичь любой имеющейся вершины дерева (это следствие свойства связанности древовидной структуры).</li>
158 <li>Вершины, которые не имеют потомков (не ссылаются на иные) называются терминальными узлами (листьями).</li>
158 <li>Вершины, которые не имеют потомков (не ссылаются на иные) называются терминальными узлами (листьями).</li>
159 <li>Объекты, которые располагаются между вершиной и листьями, называются промежуточными узлами.</li>
159 <li>Объекты, которые располагаются между вершиной и листьями, называются промежуточными узлами.</li>
160 <li>Каждая вершина древовидной структуры имеет лишь единого предка, а если он является корневым - не имеет ни одного предка.</li>
160 <li>Каждая вершина древовидной структуры имеет лишь единого предка, а если он является корневым - не имеет ни одного предка.</li>
161 <li>У корневого узла может быть от нуля или более потомков.</li>
161 <li>У корневого узла может быть от нуля или более потомков.</li>
162 <li>У каждого дочернего узла может быть от нуля или более дочерних вершин.</li>
162 <li>У каждого дочернего узла может быть от нуля или более дочерних вершин.</li>
163 </ol><p>Поддеревом называется часть древовидной структуры, которая имеет вершину и имеющиеся потомки.</p>
163 </ol><p>Поддеревом называется часть древовидной структуры, которая имеет вершину и имеющиеся потомки.</p>
164 <p>Существует несколько типов деревьев. Чаще других встречается бинарное дерево. Оно представляет собой структуру данных с иерархией, в которой каждый узел имеет определенное значение (которое является ключом) вместе со ссылками на потомков (слева и справа).</p>
164 <p>Существует несколько типов деревьев. Чаще других встречается бинарное дерево. Оно представляет собой структуру данных с иерархией, в которой каждый узел имеет определенное значение (которое является ключом) вместе со ссылками на потомков (слева и справа).</p>
165 <p>Для деревьев используются следующие методы обхода:</p>
165 <p>Для деревьев используются следующие методы обхода:</p>
166 <ul><li>прямой - осуществляется сверху вниз (начинается с посещения предков и постепенно переходит к потомкам);</li>
166 <ul><li>прямой - осуществляется сверху вниз (начинается с посещения предков и постепенно переходит к потомкам);</li>
167 <li>обратный - обход осуществляется снизу вверх (прежде посещаются потомки, потом - предки);</li>
167 <li>обратный - обход осуществляется снизу вверх (прежде посещаются потомки, потом - предки);</li>
168 <li>симметричный - обход осуществляется слева направо (по очереди осуществляется обход поддеревьев главного дерева).</li>
168 <li>симметричный - обход осуществляется слева направо (по очереди осуществляется обход поддеревьев главного дерева).</li>
169 </ul><p>Выражение информации в виде древовидных структур оправдано в том случае, если у нее есть явная иерархия. Иерархически выраженная структура потребуется при работе с данными о географических объектах, служебных должностях и т.д. В таких случаях информацию лучше представлять в виде классических математических деревьев.</p>
169 </ul><p>Выражение информации в виде древовидных структур оправдано в том случае, если у нее есть явная иерархия. Иерархически выраженная структура потребуется при работе с данными о географических объектах, служебных должностях и т.д. В таких случаях информацию лучше представлять в виде классических математических деревьев.</p>
170 <h4>Дерево двоичного (бинарного) поиска</h4>
170 <h4>Дерево двоичного (бинарного) поиска</h4>
171 <p>Кроме вышеуказанных характеристик деревьев, дереву двоичного поиска характерны еще ряд характеристик:</p>
171 <p>Кроме вышеуказанных характеристик деревьев, дереву двоичного поиска характерны еще ряд характеристик:</p>
172 <ol><li>Узел может иметь не больше двух детей (потомков).</li>
172 <ol><li>Узел может иметь не больше двух детей (потомков).</li>
173 <li>Левые потомки меньше текущего узла, что меньше, чем у правых детей.</li>
173 <li>Левые потомки меньше текущего узла, что меньше, чем у правых детей.</li>
174 </ol><p>Бинарные деревья помогают существенно ускорить работу объектами (находить, удалять, добавлять их).</p>
174 </ol><p>Бинарные деревья помогают существенно ускорить работу объектами (находить, удалять, добавлять их).</p>
175 <h4>Префиксные деревья (Trie), боры, лучи</h4>
175 <h4>Префиксные деревья (Trie), боры, лучи</h4>
176 <p>Префиксные деревья, именуемые иногда борами и лучами, являются разновидностью древовидных структур. Они особенно эффективны для работы со строками, т.к. обеспечивают быстрый поиск информации. По сути бор является деревом поиска.</p>
176 <p>Префиксные деревья, именуемые иногда борами и лучами, являются разновидностью древовидных структур. Они особенно эффективны для работы со строками, т.к. обеспечивают быстрый поиск информации. По сути бор является деревом поиска.</p>
177 <p>Чаще всего боры используют для:</p>
177 <p>Чаще всего боры используют для:</p>
178 <ul><li>поиска слов в словарях;</li>
178 <ul><li>поиска слов в словарях;</li>
179 <li>автозавершений в поисковиках;</li>
179 <li>автозавершений в поисковиках;</li>
180 <li>IP-маршрутизации.</li>
180 <li>IP-маршрутизации.</li>
181 </ul><p>Бор хранит данные в узлах. Такие деревья часто используются для хранения слов. Они хранятся в борах сверху вниз - в каждом узле по букве.</p>
181 </ul><p>Бор хранит данные в узлах. Такие деревья часто используются для хранения слов. Они хранятся в борах сверху вниз - в каждом узле по букве.</p>
182 <p>Для записи слова необходимо проследовать по ветвям дерева, вписывая за раз по одной букве. Если порядок букв не похож на другие слова в дереве либо слово заканчивается, шаги начинают расходиться. В каждой вершине находится буква (данные) вместе с логическим значением, которое указывает на то, является ли данный узел в слове последним или нет.</p>
182 <p>Для записи слова необходимо проследовать по ветвям дерева, вписывая за раз по одной букве. Если порядок букв не похож на другие слова в дереве либо слово заканчивается, шаги начинают расходиться. В каждой вершине находится буква (данные) вместе с логическим значением, которое указывает на то, является ли данный узел в слове последним или нет.</p>
183 <h4>Двоичная куча</h4>
183 <h4>Двоичная куча</h4>
184 <p>Так называют полное дерево, у которого в каждом узле до двух детей. У двоичной кучи все уровни до последнего заполнены полностью. В последнем уровне заполнение ведется слева направо.</p>
184 <p>Так называют полное дерево, у которого в каждом узле до двух детей. У двоичной кучи все уровни до последнего заполнены полностью. В последнем уровне заполнение ведется слева направо.</p>
185 <p>Она может быть:</p>
185 <p>Она может быть:</p>
186 <ul><li>максимальной - у родительских узлов ключи всегда больше либо равны тем ключам, которые у детей;</li>
186 <ul><li>максимальной - у родительских узлов ключи всегда больше либо равны тем ключам, которые у детей;</li>
187 <li>минимальной - у родительских узлов ключи меньше либо равны ключам у дочерних элементов.</li>
187 <li>минимальной - у родительских узлов ключи меньше либо равны ключам у дочерних элементов.</li>
188 </ul><p>В двоичной куче прослеживается важность порядка между уровнями, но не между узлами одного уровня.</p>
188 </ul><p>В двоичной куче прослеживается важность порядка между уровнями, но не между узлами одного уровня.</p>
189 <p>Это вся важная информация о структурах данных программы. Изучайте материал, находите новое и применяйте на практике. Если возникли вопросы - задавайте. Обязательно ответим на них.</p>
189 <p>Это вся важная информация о структурах данных программы. Изучайте материал, находите новое и применяйте на практике. Если возникли вопросы - задавайте. Обязательно ответим на них.</p>
190 <a></a>
190 <a></a>