Идеально сбалансированное дерево поиска и случайное дерево поиска
Разработка подпрограммы поиска вершины с заданным ключом в двоичном дереве поиска. Ознакомление с результатами вывода программы на консоль. Характеристика и сравнение полученных результатов с теоретическими оценками. Описание используемых алгоритмов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | практическая работа |
Язык | русский |
Дата добавления | 17.12.2021 |
Размер файла | 104,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Тема: «Идеально сбалансированное дерево поиска и случайное дерево поиска»
Введение
Цель работы: Изучение процесса программного построения ИСДП и СДП.
1. Постановка задачи
1.Написать подпрограммы для вычисления характеристик двоичного дерева, которые определяют:
-размер дерева;
-высоту дерева;
-среднюю высоту дерева;
-контрольную сумму данных в вершинах дерева;
-проверить их работу на конкретном примере.
2.Запрограммировать обход двоичного дерева слева направо и вывести на экран получившуюся последовательность данных.
3.Разработать подпрограмму поиска вершины с заданным ключом в двоичном дереве поиска.
4. Разработать подпрограмму построения идеально сбалансированного дерева поиска (ИСДП) для массива случайных чисел, а также логическую функцию для определения является ли данное двоичное дерево деревом поиска. Построить ИСДП из 100, 200,…, 500 вершин (данные в вершинах произвольные, но все различные). Распечатать обход дерева слева направо. Для построенных деревьев вычислить размер, контрольную сумму, высоту и среднюю высоту, используя разработанные функции. Заполнить таблицу и проанализировать полученные результаты.
5. Разработать подпрограмму построения случайного дерева поиска (СДП). Построить СДП из 100, 200,…, 500 вершин (данные в вершинах произвольные, но все различные). Распечатать обход дерева слева направо. Для построенного дерева вычислить размер, контрольную сумму, высоту и среднюю высоту, сравнить их с аналогичными характеристиками ИСДП. ИСДП необходимо строить для той же последовательности данных, что и СДП. Заполнить таблицу и проанализировать полученные результаты.
2. Описание используемых алгоритмов
Определим двоичное дерево следующим образом:
1. Отдельная вершина V является двоичным деревом.
2. Двоичное дерево - это вершина V, соединенная с (возможно пустыми) левым (ТL) и правым (ТR) двоичными деревьями.
Каждая вершина дерева может содержать какую-либо информацию. Выделенная вершина дерева называется корнем. Концевые вершины дерева, не имеющие поддеревьев, называются листьями. Дуги ориентированы по направлению от корня к листьям. Путь от корня к листу называется ветвью. Под длиной ветви будем понимать число входящих в неё вершин. Высота дерева h определяется как число вершин в самой длинной ветви дерева. Размер дерева - число входящих в него вершин. Средней высотой дерева называется усредненная по количеству вершин в дереве сумма длин путей от корня к каждой вершине. подпрограмма двоичный консоль
Приведем алгоритмы для вычисления различных характеристик двоичных деревьев.
1)Определение размера дерева
Алгоритм на псевдокоде
Размер(p: pVertex)
IF (p = NIL) Размер := 0
ELSE Размер := 1 + Размер (p>Left) + Размер (p>Right)
FI
2)Определение высоты дерева
Алгоритм на псевдокоде
Высота(p: pVertex)
IF (p = NIL) Высота := 0
ELSE Высота := 1+ max(Высота (p>Left), Высота(p>Right))
FI
3)Определение средней высоты дерева
Для определения средней высоты дерева понадобится функция вычисления суммы длин путей от корня до каждой вершины на L-том уровне.
Алгоритм на псевдокоде
СДП (p: pVertex; L: уровень вершины)
IF (p = NIL) СДП:= 0
ELSE СДП:= L + СДП(p > Left, L+1) + СДП(p > Right, L+1)
FI
Тогда средняя высота вычисляется следующим образом
hcp := СДП(Root, 1)/ Размер(Root)
4)Определение контрольной суммы для дерева
Алгоритм на псевдокоде
Сумма (p: pVertex)
IF (p = NIL) Сумма := 0
ELSE Сумма:= p›Data + Сумма(p›Left) + Сумма(p›Right )
FI
Двоичное дерево называется деревом поиска, если ключ в каждой его вершине больше ключа любой вершины в левом поддереве и меньше ключа любой вершины в правом поддереве.
Двоичное дерево называется идеально сбалансированным (ИСД), если для каждой его вершины размеры левого и правого поддеревьев отличаются не более чем на 1.
Отметим некоторые свойства идеально сбалансированного дерева.
Свойство 1. Высота ИСД с n вершинами минимальна и равна
hИСД(n) = hmin (n) =log(n+1).
Свойство 2. Если дерево идеально сбалансировано, то все его поддеревья также идеально сбалансированы.
Задача построения идеально сбалансированного дерева поиска из элементов массива А = (а1, а2, … , аn) решается в два этапа:
1.Сортировка массива А.
2.В качестве корня дерева возьмем средний элемент отсортированного массива, из меньших элементов массива строим левое поддерево, из больших - правое поддерево. Далее процесс построения продолжается до тех пор, пока левое или правое поддерево не станет пустым.
Для идеально сбалансированного дерева Сmax = 2log(n+1). Если считать, что поиск любой вершины происходит одинаково часто, то ИСДП обеспечивает минимальное среднее время поиска. К существенным недостаткам ИСДП можно отнести то, что при добавлении нового элемента к множеству данных необходимо строить заново ИСДП.
Для определения дерева в программе описана структура содержащая данные одного узла дерева:
typedef struct TreeNode
{
int Key;
TreeNode * left;
TreeNode * right;
unsigned char height; //Для AVL
int Balance; //Для DBD
int size; //Для идеально сбалансированного
} TreeNode;
Данная структура подходит для реализации всех типов деревьев, с которыми необходимо работать в программах. Для реализации алгоритмов написаны 2 набора функций.
3. Результат работы программы
Для решения поставленной задачи разработана программа «LR1». Программа последовательно строит ИСДП из 100, 200,…, 500 вершин, затем последовательно строит СДП из 100, 200,…, 500 вершин. Для деревьев выполняются все необходимые замеры, результаты выводятся в текстовые файлы SDP.txt и ISDP.txt.
На рисунке 1 показан вывод программы на консоль.
Рисунок 1 - Вывод программы на консоль
4. Анализ и сравнение полученных результатов с теоретическими оценками
На основе полученных данных заполним таблицу.
Размер дерева |
СДП |
ИСДП |
|||||
Контр. сумма |
Высота фактическая |
Теор. оценки для сред. высоты |
Контр. сумма |
Высота фактическая |
Теор. оценки для сред. высоты |
||
100 |
1558626 |
10 |
5.65 |
1558626 |
7 |
4.80 |
|
200 |
3275687 |
15 |
7.54 |
3275687 |
8 |
5.76 |
|
300 |
4797179 |
18 |
8.90 |
4797179 |
9 |
6.33 |
|
400 |
6446496 |
18 |
8.30 |
6446496 |
9 |
6.74 |
|
500 |
8043283 |
20 |
9.64 |
8043283 |
9 |
7.00 |
Вывод
Мы построили СДП и ИСДП для наборов данных одного и того же размера. Фактически полученная высота СДП во всех случаях больше, чем высота ИСДП примерно в 2 раза.
Размещено на Allbest.ru
Подобные документы
Описание структуры бинарного дерева поиска на языке C# среды Visual Studio. Требования к интерфейсу пользователя, структуре данных и программным средствам. Компоненты программных средств, результаты тестирования, диаграммы вариантов использования классов.
курсовая работа [968,2 K], добавлен 26.01.2013Структура оптимальных бинарных деревьев поиска. Рекурсивное решение; вычисление математического ожидания стоимости поиска; выбор ключа, который приводит к его минимальному значению. Вычисленные с помощью процедуры Optimal_BST для распределения ключей.
доклад [1,2 M], добавлен 14.11.2011Разработка программы на языке С#, которая будет заниматься построением бинарного дерева для исходных данных и их редактированием, поиском информации о товарах по заданному ключу. Графические схемы алгоритмов поиска и удаления элемента бинарного дерева.
курсовая работа [796,9 K], добавлен 22.02.2016Реализация комплекса программ поиска подстроки в тексте алгоритмом прямого поиска и алгоритмом Кнута-Морриса-Пратта. Сравнительный анализ теоретических и экспериментальных оценок эффективности алгоритмов. Разработка структуры программы, ее листинг.
курсовая работа [2,8 M], добавлен 22.01.2015Обзор алгоритмов распознания объектов на двумерных изображениях. Выбор языка программирования. Обнаружение устойчивых признаков изображения. Исследование алгоритмов поиска объектов на плоскости. Модификация алгоритма поиска максимума дискретной функции.
дипломная работа [1,0 M], добавлен 16.06.2013Основные определения поиска подстроки в строке. Простейшие алгоритмы поиска подстроки в строке. Алгоритмы последовательного поиска и Рабина-Карпа, создание и описание программы, реализующей их. Порядок работы с приложением. Тестирование алгоритмов.
курсовая работа [2,7 M], добавлен 24.05.2012Основные критерии и требования к средствам поиска по ресурсу. Технологии создания инструментов поиска. Способы поиска по ресурсу. Принцип действия поиска по ключевым словам и при помощи поисковых систем. Разработка ресурса "Поиск по ресурсу" в виде блога.
курсовая работа [983,7 K], добавлен 01.02.2015Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.
курсовая работа [1,7 M], добавлен 16.04.2012Практическое использование алгоритмов для нахождения минимального пути в лабиринте. Разработка программы на языке С++ и в среде Visual C++. Основные способы поиска пути: метод волны и приоритетов. Описание разработанных функций и инструкция пользователя.
дипломная работа [54,3 K], добавлен 16.03.2012Исследование проблемы сравнения звуковых файлов и определение степени их схожести. Сравнение файлов с использованием метода нечеткого поиска, основанного на метрике (расстоянии) Левенштейна. Сравнение MIDI-файлов и реализация алгоритмов считывания.
курсовая работа [2,0 M], добавлен 14.07.2012