Учебное пособие Самара 2015 + 004. 43 Ббк 32. 973 Н 19
Download 1.98 Mb.
|
Lekcii AiSD 2015
поиска» не следует, что оно применяется только для поиска.
Отдельные типы деревьев применяются для решения специ- альных задач, например основные деревья на графах (каркас ы графов, Spanning Tree) нпн РАТRlСlА-деревья (Practical Algo- rithm То Retrieve Information Coded in Alphanumeric), исполь- зуемые для поиска данных на основе их поразрядного двоичного представления. Несколько несвязанных между собой деревьев образуют структуру данных, которая называется «лес» (иногда её называют «6op» ). Двоичные деревья поиска Ещё раз дадим определение дерева как структуры данных. Дерево — динамическая нелинейная структура данных, каж- дый элемент которой содержит собственно информацию (или ссылку на то место в памяти ЭВМ, где хранится информация) и ссылки на несколько (не менее двух) других таких же элементов. Для двоичного (бинарного) дерева таких ссылок две: на правый соседний и левый соседний элементы. В общем случае данные, хранящиеся в дереве, не обязаны быть упорядочены каким-либо образом. Но часто требуется co- блюдение упорядоченности по некоторому принципу. Именно по такому принципу и отличаются «пирамиды» и « Ьереввл»: — пирамида («кучп») — древовидная структура данных, в ко- торой значения всех узлов, размещённых на одном уровне, боль- ше (или меньше) значений узлов, размещённых на выше лежа- щем уровне (см. рисунок 10.1); 10 12 13 14 Рис. 10.1 Двоичная пирамида дерево древовидная структура данных, в которой значе- ния всех узлов, размещённых правее некоторого узла, больше значений узлов, размещённых левее, причём это справедливо как для всего дерева, так и для любой его части (см. рисунок). Здесь необходимо сделать одно существенное уточнение: по указанно- му принципу строится дерево, получившее название «двоичного дерева поиска» (Binary Search Tree, BST), т.е. дерево, в котором очень удобно искать данные, причём с высокой эффективностью этого поиска. В дальнейшем под двоичными деревьями будут подразумеваться именно двоичные деревья поиска. 12 10 14
11 15
Рис. 10.2 — Двоичное дерево поиска Как видно из сравнения рисунков 10.1 и 10.2, структура у пирамиды и дерева практически одинакова, отличаются они только характером размещения данных. Также на этих рисунках видны и связи между элементами деревьев (узл‹zмп), похожие на связи между звеньями списка. Чем же отличается двоичное дерево от двусвязного списка? Иногда ничем, не только от двусвязного, но и от односвязного списка. Основное отличие — у списка соседними являются предшест- вующий и последующий элементы, и структура линейна; а у дво- ичного дерева поиска соседними являются элементы с меньшим и большим ключом, и структура, в общем случае ветвящаяся — в виде дерева, откуда она и получила свое название. Кроме того, любая часть дерева по своей структуре повторяет всё дерево в целом, т.е. дерево (любое, не только двоичное) это рекурсивная структура данных (фактически дерево можно считать фракталь- ной структурой). 114 Рис. 10.3 — Фрактальные деревья Нужно помнить, что дерево — это только метод логической организации информации в памяти, а память — линейна. В случае, если информация хранится в произвольном (и не- известном программисту) месте памяти, а ключ и информация разные понятия (иногда они могут и совпадать), структура узла дерева может быть представлена следующим образом:
Рис. 10.4 — Обобщённая структура узла дерева Этой структуре соответствует набор типов на языке Пac- type
115
left, right: ptr; data: ’info end; var
struct node int key; //kMюЧ, MOKOTOpoMy TpOИTCP дe eBO float data; / OM ë5HLeĄäHHbe o6orOTИШâ пode *left, *right; //YKaзdTeЛHHdCoeqHнeyзлы ДBOHЧHOë дe]3ëBO, o6pasOBilHHOë TiIKHMИ 3JIëMëHTiIMH, HOK£tЗiI- HO HИWö. 0
7 0 0 ЙЛëMëHT Дë]3ëBII пoлyчил HIlЗBiIHHë t‹yзeл» (node). EДИHCTBëH- HЬIЙ HtlUtlJIЬHЬIЙ 3JIëMëHT (oTKyдa дepeBo ]3I13BИBIłëTCIl) HOpëH ö (root). ФparMeHT (UIłCTЬ) ne]3ëBIł — HOØQë]3ëBO HЛH 8ëM 8b. 3ëH , OT KOTO]ЭOГO He OTXOДЯT BëTBH — KOHëЧHЬIЙ HЛH mepминaльньıй yзeл, 116
Download 1.98 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling