Автор работы: Пользователь скрыл имя, 20 Октября 2014 в 20:48, курсовая работа
Когда поиск некоторого элемента необходимо осуществить в упорядоченной по возрастанию или убыванию последовательности, тогда применим алгоритм двоичного (бинарного) поиска. Метод использует стратегию «разделяй и властвуй», а именно: заданная последовательность делится на две равные части и поиск осуществляется в одной из этих частей, которая потом также делится надвое, и так до тех пор, пока обнаружится наличие искомого элемента или его отсутствие.
Введение 5
1. Общие сведения о бинарных деревьях 6
2.Описание интерфейса программы. 10
Заключение 11
Список использованных источников 12
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное
Учреждение высшего профессионального образования
Кубанский государственный технологический университет
(ФБГОУ ВПО КубГТУ)
Факультет компьютерных технологий и автоматизированных систем
Кафедра информационных систем и программирования
КУРСОВАЯ РАБОТА
по дисциплине «Алгоритмы и структура данных»
(наименование дисциплины)
на тему: Исследование алгоритма поиска на бинарном дереве 1
(тема курсового проекта (работы))
Выполнил студент
группы
13-СМ-231000
Дердерян Андрей Аиквич_____________________
(ф.и.о.)
Допущен к
защите________________________
Руководитель
работы
Защищен _______________________ Оценка _______________________
Члены комиссии
Краснодар
2013
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное
Учреждение высшего профессионального образования
Кубанский государственный технологический университет
(ФБГОУ ВПО КубГТУ)
Факультет компьютерных технологий и автоматизированных систем
Кафедра информационных систем и программирования
УТВЕРЖДАЮ
Зав. кафедрой ИСП
Профессор
« »
ЗАДАНИЕ
на курсовую работу
Студенту: Дердерян Андрей Аиквич группы 13-СМ-2310 1 курса
Факультета
МИППС
Направление
231000 Программная инженерия
(шифр и наименование)
Тема проекта: Исследование
алгоритма поиска на бинарном дереве.
Содержание задания: Разобрать принцип работы алгоритма поиска на бинарном дереве.
Объем курсовой работы:
а) пояснительная записка 16 с.
б) программа.
Рекомендуемая литература: Информатика Программирование (Т.А. Павловская) Практическое программирование. Приемы создания программ на языке Паскаль 1
Срок выполнения проекта: с «6» апреля 2013г. по «20» мая 2013г.
Срок защиты:
Дата выдачи задания:
Дата сдачи проекта на кафедру: «25» мая 2013 г.
Руководитель работы ______________________________
Задание принял студент ______________________________
Реферат
Пояснительная записка курсовой работе 16 с., 8 рис., 5 источника.
ДЕРЕВО, ОБХОД, КОРЕНЬ, УЗЕЛ, ВИДЫ ДЕРЕВЬЕВ, БИНАРНОЕ ДЕРЕВО, ПОИСК В БИНАРНОМ ДЕРЕВЕ, ВИДЫ ОБХОДА, ПРОГРАММИРОВАНИЕ, ЯЗЫКЕ ПРОГРАММИРОВАНИЯ, PASCAL ABC.
В данной курсовой работе было проведено исследование и рассмотрены вопросы исследования алгоритма поиска на бинарном дереве.
Цель работы: закрепление основ и углубление знаний в области информатики и программирования, разработка алгоритма обхода дерева, получение дополнительных практических навыков и приемов работы средствами Pascal ABC.
Содержание
Когда поиск некоторого элемента необходимо осуществить в упорядоченной по возрастанию или убыванию последовательности, тогда применим алгоритм двоичного (бинарного) поиска. Метод использует стратегию «разделяй и властвуй», а именно: заданная последовательность делится на две равные части и поиск осуществляется в одной из этих частей, которая потом также делится надвое, и так до тех пор, пока обнаружится наличие искомого элемента или его отсутствие. Использовать эту операцию, уменьшая каждый раз зону поиска вдвое, позволительно лишь исходя из того факта, что элементы последовательности заранее упорядочены. Найдя средний элемент (сделать это, зная число элементов массива, не составит труда), и сравнив его значение с искомым, можно уверено сказать, где относительно среднего элемента находится искомый элемент.
Постановка задачи
Построить бинарное дерево поиска целочисленного типа данных. Выполнить обход дерева сверху вниз (корень - левое поддерево - правое поддерево). При обходе подсчитать:
a) количество вершин, имеющих хотя бы одну ненулевую связь;
б) количество вершин, имеющих две ненулевые связи;
в) количество вершин, имеющих не более одной ненулевой связи.
Бинарное дерево-это конечное множество элементов, которое либо пусто, либо содержит один элемент, называемый корнем дерева, а остальные элементы множества делятся на два непересекающихся подмножества, каждое из которых само является бинарным деревом. Эти подмножества называются левым и правым поддеревьями исходного дерева. Каждый элемент бинарного дерева называется узлом дерева.
Рис.1 "Пример бинарного дерева"
На рисунке показан общепринятый способ изображения бинарного дерева. Это дерево состоит из семи узлов, и А-кореня дерева. Его левое поддерево имеет корень В, а правое - корень С. Это изображается двумя ветвями, исходящими из А: левым - к В и правым - к С. Отсутствие ветви обозначает пустое поддерево. Например, левое поддерево бинарного дерева с корнем С и правое поддерево бинарного дерева с корнем Е оба пусты. Бинарные деревья с корнями D, G, Н и F имеют пустые левые и правые поддеревья.
Если А - корень бинарного дерева и В - корень его левого или правого поддерева, то говорят, что А-отец В, а В-левый или правый сын А. Узел, не имеющий сыновей (такие как узлы D, G, Н и F), называется листом.
Узел nl - предок узла n2 (а n2-потомок nl), если nl-либо отец n2, либо отец некоторого предка n2.
Узел n2-левый потомок узла n1, если n2 является либо левым сыном n1, либо потомком левого сына n1. Похожим образом может быть определен правый потомок.
Два узла являются братьями, если они сыновья одного и того же отца. Если каждый узел бинарного дерева, не являющийся листом, имеет непустые правые и левые поддеревья, то дерево называется строго бинарным деревом. Строго бинарное дерево с n листами всегда содержит 2n-1 узлов. Пример строго бинарного дерева приведен на рисунке ниже.
Рис.2 "Строго бинарное дерево"
Уровень узла в бинарном дереве может быть определен следующим образом. Корень дерева имеет уровень 0, и уровень любого другого узла дерева имеет уровень на 1 больше уровня своего отца. Например, в бинарном дереве на первом рисунке узел Е - узел уровня 2, а узел Н-уровня 3. Глубина бинарного дерева - это максимальный уровень листа дерева, что равно длине самого длинного пути от корня к листу дерева. Стало быть, глубина дерева на первом рисунке равна 3.
Полное бинарное дерево уровня n - это дерево, в котором каждый узел уровня n является листом и каждый узел уровня меньше n имеет непустые левое и правое поддеревья. На рисунке приведен пример полного бинарного дерева.
Рис.3 "Полное бинарное дерево"
Почти полное бинарное дерево - это бинарное дерево, для которого существует неотрицательное целое k такое, что:
1. Каждый лист в дереве имеет уровень k или k+1.
2. Если узел дерева имеет правого потомка уровня k+1, тогда все его левые потомки, являющиеся листами, также имеют уровень k+1.
Есть еще одна разновидность бинарных деревьев, которая называется дерево поиска. Это двоичное дерево организовано так, что для каждой вершины справедливо утверждение, что все ключи левого поддерева меньше ключа , а все ключи правого поддерева больше его, то такое дерево будем называть деревом поиска. В таком дереве легко обнаружить заданный элемент, для этого достаточно, начав с корня, двигаться к левому или правому поддереву на основании лишь одного сравнения с ключом текущей вершины. Дерево поиска для заданной последовательности целых чисел 23, 17, 26, 32, 18, 6, 2, 5, 8, 29, 146 имеет вид:
Рис.4 "Бинарное дерево писка"
Над бинарным деревом есть операция - его прохождение, т.е. нужно обойти все дерево, отметив каждый узел один раз.
Существует 3 способа обхода бинарного дерева.
в прямом порядке
в симметричном порядке
в обратном порядке
В прямом порядке:
Попасть в корень
Пройти в прямом порядке левое поддерево
Пройти в прямом порядке правое поддерево
В симметричном порядке:
Пройти в симметричном порядке левое поддерево
Попасть в корень
Пройти в симметричном порядке правое поддерево
В обратном порядке:
Пройти в обратном порядке левое поддерево
Пройти в обратном порядке правое поддерево
Попасть в корень
Рис.5"Пример обхода бинарного дерева разными способами"
Прямой порядок: ABDGCEHIF
Симметричный порядок: DGBAHEICF
Обратный порядок: GDBHIEFCA
Применение
бинарное дерево программа поиск
Организация данных с помощью бинарных деревьев часто позволяет значительно сократить время поиска нужного элемента. Поиск элемента в линейных структурах данных обычно осуществляется путем последовательного перебора всех элементов, присутствующих в данной структуре. Поиск по дереву не требует перебора всех элементов, поэтому занимает значительно меньше времени. Максимальное число шагов при поиске по дереву равно высоте данного дерева, т.е. количеству уровней в иерархической структуре дерева.
При запуске программы пользователь увидит форму с полем для ввода количества элементов дерева (Рис.5).
Рис.6 "Рабочее окно программы"
Затем поочередно вводим необходимые данные (Рис.7).
Рис.7 "Ввод данных"
Рис.8 "Вывод результата работы программы на экран"
После нажатия Enter программа будет выдавать графическое представление дерева, а также искомые величины. (Рис.8)
В данной курсовой работе была создана программа в среде Pascal ABC, которая позволяет создавать бинарное дерево и выполнять с ним следующие операции: добавлять элементы дерева, выводить дерево на экран, выполнять обход дерева сверху вниз. При обходе подсчитывать: количество вершин, имеющих хотя бы одну ненулевую связь, количество вершин, имеющих две ненулевые связи, количество вершин, имеющих не более одной ненулевой связи. Были описаны алгоритмы выполнения этих операций. Для решения этой задачи была прочитана соответствующая литература. Я приобрел опыт в работе с компонентами среды Pascal ABC, и познакомилась с некоторыми приемами программирования.
1. Ахо А.А., Хопкрофт Д.Э., Ульман Д.Д. Структуры данных и алгоритмы. М.: Вильямс, 2007.
2. Бежанова М. М, Москвина Л.А. Практическое програмирование. Приемы создания программ на языке Паскаль. М. Научный Мир. 2000. - 270 с.
3. Подвальный С.Л., Холопкина Л.В., Носачева М.П. Программирование на языке паскаль: практикум. Воронеж. ГОУВПО ВГТУ. 2008.
4. Информация с Веб-сайта http://www.lib. csu.ru.
5. Информация с Веб-сайта http://algolist. manual.ru/sort/pyramid_sort. php; кому нужны исходники - стучитесь - lexmod@mail.ru денег не беру))
Листинг программы:
Program Binar_derevo;
Uses Crt;
{Варианты запуска обхода с подсчетом:
1 - количество вершин, имеющих хотя бы одну ненулевую связь;
2 - количество вершин, имеющих две ненулевые связи;
3 - количество вершин, имеющих не более одной ненулевой связи. }
Const NeMensheOdnoj=1;
Dve=2;
NeBolsheOdnoj=3;
Type inform = Integer;
ss = ^zveno;
zveno = Record
key: Integer;
inf: Inform;
left, right: ss;
End;
Var t: ss;
n,nn,c, i,k: Integer;
{----формирование дерева----}
Procedure Vstavka (Var p: ss; x: Integer);
Begin
If p = Nil Then
Begin
New (p);
p^. inf: =x;
p^. key: =1;
p^. left: =Nil;
p^. right: =Nil;
End
else begin
If x<p^. inf Then Begin Vstavka (p^. left,x); End;
If x>=p^. inf Then Begin Vstavka (p^. right,x); End;
end;
End;
{----вывод дерева----}
Procedure Print (Var p: ss; h: Integer);
Var i: Integer;
Begin
If p <> Nil Then
Begin
Print (p^. right,h+4);
For i: =1 To h Do Write (' ');
Writeln (p^. inf);
Print (p^. left,h+4);
End;
End;
{ Рекурсивная функция, делающая подсчёт для текущего дерева }
Function Count (p: ss; v: integer): integer;
Информация о работе Исследование алгоритма поиска на бинарном дереве