Двоичное Б-дерево поиска
Разработка и анализ подпрограммы построения двоичного дерева для массива целых чисел. Ознакомление с условиями переопределения ссылок. Исследование и характеристика понятия сильноветвящегося дерева - дерева, имеющего вершины со многими потомками.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | практическая работа |
Язык | русский |
Дата добавления | 20.12.2021 |
Размер файла | 104,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Тема: «Двоичное Б-дерево поиска»
Введение
Цель работы: Изучение процесса программного построения ДБД.
1. Постановка задачи
1.Разработать подпрограмму построения ДБ-дерева для массива целых чисел
2.Построить ДБ-дерево из 100, 200,…, 500 вершин (данные в вершинах произвольные, но все различные). Распечатать обход дерева слева направо.
3.Для построенного ДБ-дерева вычислить размер, контрольную сумму, высоту и среднюю высоту (как для двоичного дерева) и высоту ДБ-дерева как количество уровней, сравнить их с аналогичными характеристиками АВЛ-дерева. ДБ-дерево необходимо строить для той же последовательности данных, что и АВЛ-дерево. Заполнить таблицу и проанализировать полученные результаты.
2. Описание используемых алгоритмов
Деревья, имеющие вершины со многими потомками, будем называть сильноветвящимися.
Б - дерево порядка m - это дерево со следующими свойствами:
1.В каждой странице хранится k элементов данных d1 < d2 < ... < dk и k+1 указатель p0, p1, ...pk. Каждый указатель pi либо равен NIL, либо указывает на вершину, все элементы которой больше di, но меньше di+1.
Построение Б-дерева или включение нового элемента данных D в Б-дерево происходит следующим образом:
*Выполним поиск элемента D в дереве.
*Если элемента D нет в дереве, то мы имеем страницу a и позицию R, в которой ожидали найти элемент D.
*Вставим элемент в позицию R+1, при этом количество элементов на странице k увеличилось на 1.
*Если k < = 2m, то процесс включения закончен.
*Если k > 2m (переполнение страницы), то создаём новую страницу b, переносим в неё m правых элементов из страницы a, а средний элемент переносим на один уровень вверх на родительскую страницу.
*Включение элемента в родительскую страницу производится по такому же алгоритму.
*Если родительской страницы нет, то она создаётся и в неё включается один элемент.
Двоичное Б-дерево состоит из вершин (страниц) с одним или двумя элементами. Следовательно, каждая страница содержит две или три ссылки на поддеревья. подпрограмма двоичный ссылка
Двоичные Б-деревья представляют собой альтернативу АВЛ-деревьям. При этом поиск в двоичном Б-дереве происходит как в обычном двоичном дереве.
Высота двоичного Б-дерева . Если рассматривать двоичное Б-дерево как обычное двоичное дерево, то его высота может увеличиться вдвое, т.е. .
Построение двоичного Б-дерева происходит путем добавления новой вершины в уже существующее дерево. Введем логическую переменную VR, показывающую вертикальный рост дерева (в случае, если страница переполнилась и средний элемент передается на вышележащий уровень) и логическую переменную HR, определяющую горизонтальный рост дерева (если новый элемент размещается на этой же условной странице). Также определим показатель баланса BAL для каждой вершины, который принимает значение 0, если у данной вершины есть только вертикальные ссылки (вершина одна на странице), и значение 1, если у данной вершины есть правая горизонтальная ссылка.
При добавлении элементов в двоичное Б-дерево различают 4 ситуации, возникающих при росте левых или правых поддеревьев. Самый простой случай) -- рост правого поддерева вершины А, когда А -- единственный элемент на странице. Тогда вертикальная ссылка просто превращается в горизонтальную (HR=1, баланс вершины А равен 1). Если на странице уже два элемента (2), то при добавлении новой вершины С средняя вершина В передается на вышестоящий уровень (VR=1, баланс вершины В равен 0).
В случае роста левого поддерева, если вершина В одна на странице, то вершина А добавляется на эту страницу. Однако левая ссылка не может быть горизонтальной, поэтому требуется переопределение ссылок (HR=1, баланс вершины А равен 1). Если на странице два элемента, то, как и в случае 2, средняя вершина В поднимается на вышестоящий уровень (VR=1, баланс вершины В равен 0).
При построении двоичного Б-дерева реже приходится переставлять вершины, поэтому АВЛ-деревья предпочтительней в тех случаях, когда поиск ключей происходит значительно чаще, чем добавление новых элементов. Кроме того, существует зависимость от особенностей реализации, поэтому вопрос о применение того или иного тапа деревьев следует решать индивидуально для каждого конкретного случая.
Для определения дерева в программе описана структура содержащая данные одного узла дерева:
typedef struct TreeNode
{
int Key;
TreeNode * left;
TreeNode * right;
unsigned char height; //Для AVL
int Balance; //Для DBD
int size; //Для идеально сбалансированного
} TreeNode;
Данная структура подходит для реализации всех типов деревьев, с которыми необходимо работать в программах. Для реализации алгоритмов написаны 2 набора функций.
3. Результат работы программы
Для решения поставленной задачи разработана программа «L3». Программа последовательно строит ДБ-дерево из 100, 200,…, 500 вершин, затем последовательно строит AVL-дерево из 100, 200,…, 500 вершин. Для деревьев выполняются все необходимые замеры, результаты выводятся в текстовые файлы AVL.txt и DBD.txt.
На рисунке 1 показан вывод программы на консоль.
Рисунок 1 - Вывод программы на консоль
4. Анализ и сравнение полученных результатов с теоретическими оценками
На основе полученных данных заполним таблицу.
Размер дерева |
АВЛ-дерево |
ДБД |
||||||
Контр. сумма |
Высота факт. |
Теор. оценки для сред. высоты |
Контр. сумма |
Кол-во уровней |
Теор. оценки для высоты ДБД |
Теор. оценки для сред. высоты двоичного дерева |
||
100 |
1558626 |
8 |
4.86 |
1558626 |
10 |
10 |
5.22 |
|
200 |
3275687 |
9 |
5.89 |
3275687 |
13 |
12 |
7.72 |
|
300 |
4797179 |
10 |
6.41 |
4797179 |
16 |
13 |
8.07 |
|
400 |
6446496 |
10 |
6.82 |
6446496 |
16 |
13 |
8.47 |
|
500 |
8043283 |
11 |
7.17 |
8043283 |
16 |
14 |
8.78 |
Вывод
Мы построили AVL-дерево и ДБ-дерево для наборов данных одного и того же размера. Фактически полученная высота ДБ-дерева во всех случаях больше, чем высота AVL-дерева.
Размещено на Allbest.ru
...Подобные документы
Рассмотрение нелинейных динамических структур данных в виде бинарного дерева. Построение дерева двоичного поиска. Реализация трех обходов дерева, выведение обходов на экран компьютера. Разработка текста программы. Симметричноправая прошивка дерева.
контрольная работа [81,6 K], добавлен 14.12.2011Понятие и базовые свойства ориентированного дерева. Обходы (способы нумерации вершин) в глубину и ширину. Представление бинарных графов с помощью указателей и массива, скобочной записи, списком прямых предков. Сбалансированность дерева двоичного поиска.
презентация [330,6 K], добавлен 19.10.2014Общая характеристика организации массива в виде двоичного дерева. Особенности линейного и двоичного поиска заданного элемента массива. Методика упорядочения массива методом сортировки деревом. Инструкции и текст программы для нечисленной обработки данных.
курсовая работа [242,3 K], добавлен 12.11.2010Описание процедуры выбора структуры хранения данных. Программная реализация одномерного неоднородного массива. Представление бинарного дерева в виде динамической структуры данных. Изучение способов поиска в упорядоченном дереве. Содержание базы данных.
практическая работа [850,0 K], добавлен 16.04.2015Разработка программы на языке С#, которая будет заниматься построением бинарного дерева для исходных данных и их редактированием, поиском информации о товарах по заданному ключу. Графические схемы алгоритмов поиска и удаления элемента бинарного дерева.
курсовая работа [796,9 K], добавлен 22.02.2016Способы построения остовного дерева (алгоритма поиска в глубину и поиска в ширину). Вид неориентированного графа. Понятие и алгоритмы нахождения минимальных остовных деревьев. Последовательность построения дерева графов по алгоритмам Крускала и Прима.
презентация [22,8 K], добавлен 16.09.2013Разработка шаблона для работы с двоичным файлом, в котором хранится структура данных (двоичное дерево объектов). Представление двоичного дерева в файле. Вставка объекта в дерево, его удаление. Алгоритм сжатия файла. Описание пользовательского интерфейса.
курсовая работа [1,1 M], добавлен 26.01.2013Организация данных с помощью бинарных деревьев. Определение бинарного дерева. Упорядоченное двоичное дерево поиска и его свойства. Программная реализация добавления данных в упорядоченное двоичное дерево с использованием динамических структур данных.
курсовая работа [459,0 K], добавлен 09.08.2012Основные понятия теории грамматик простого и операторного предшествования, алгоритмы синтаксического разбора предложения для классов КС-грамматик; разработка дерева вывода для грамматики входного языка в форме Бэкуса-Наура с указанием шагов построения.
лабораторная работа [28,0 K], добавлен 24.07.2012Сбалансированные многоходовые деревья поиска. Исследование структуры B+-дерева, её основные операции. Доказательство их вычислительной сложности. Утверждение о высоте. Поиск, вставка, удаление записи, поиск по диапазону. B+-деревья в системах баз данных.
курсовая работа [705,5 K], добавлен 26.12.2013Организация бинарного дерева. Порядок размещения данных в нелинейных структурах. Организация пользовательского интерфейса. Симметричный обход дерева. Параллельная работа обработчиков исключений. Расширенный графический интерфейс и его возможности.
курсовая работа [426,0 K], добавлен 24.06.2013Понятие дерево, двоичное дерево, поддерево. Способы хранения деревьев в памяти ЭВМ, их основные недостатки и достоинства. Преобразования, не нарушающие упорядоченности дерева и способствующие лучшей сбалансированности. Анализ алгоритмов управления.
лабораторная работа [310,1 K], добавлен 14.10.2013Описание структуры бинарного дерева поиска на языке C# среды Visual Studio. Требования к интерфейсу пользователя, структуре данных и программным средствам. Компоненты программных средств, результаты тестирования, диаграммы вариантов использования классов.
курсовая работа [968,2 K], добавлен 26.01.2013Составление программной функции, которая вычисляет среднее арифметическое элементов непустого списка. Функция, которая находит наименьший элемент дерева. Нахождение искомых элементов, добавление элементов в дерево. Выведение состояния дерева на экран.
лабораторная работа [636,3 K], добавлен 02.04.2014Работа с компонентом TTreeView, служащим для отображения иерархических данных в виде дерева. Обеспечение заполнения дерева, очистка, анализ и редакция элементов. Процедура удаления элемента. Демонстрация работы программы, исходные данные и результаты.
лабораторная работа [788,6 K], добавлен 11.01.2012Структура компилятора PascalABC.NET. Структура дерева и примеры узлов. Упрощенный синтаксис записи модулей. Объявление имен, совпадающих с ключевыми словами. Генерация узла семантического дерева. Сериализация и десериализация узлов семантического дерева.
курсовая работа [1,8 M], добавлен 18.12.2011Линейные динамические структуры. Построение списочной структуры, состоящей из трехнаправленного и двух однонаправленных списков, связанных между собой. Дерево двоичного поиска для заданного множества целых чисел. Листинг программы на языках Си и Паскаль.
курсовая работа [451,1 K], добавлен 19.10.2013Исследование особенностей основных файловых менеджеров, разработанных под операционную систему Windows. Изучение порядка заполнения элементов бинарного дерева. Обзор приложения, реализующего графический интерфейс доступа пользователя к папкам и файлам.
курсовая работа [2,9 M], добавлен 11.07.2012Обоснование выбора языка и среды программирования. Обзор и анализ существующих программных решений. Разработка графического и пользовательского интерфейса. Алгоритм бинарного поиска. Методы добавления, удаления элемента из дерева и вывода на экран.
курсовая работа [1,3 M], добавлен 31.05.2016Древовидная структура – "Бинарное дерево поиска", его структура и взаимосвязь основных компонентов, исследование в глубину. Описание разработанного программного продукта. Главные функции редактирования исходных данных и принципы работы с файлами.
курсовая работа [1,6 M], добавлен 13.06.2014