Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Добавление элемента

Читайте также:
  1. В появившемся окне Добавление таблицы выделить имя таблицы “Студенты”®Добавить®Закрыть.
  2. В себя соотнесение с элементами, составляющими более
  3. Возможные темы дебатов с элементами политического кейса
  4. Добавление бобышки
  5. Добавление выпадающих меню
  6. Добавление данных
  7. Добавление динамического правила трансляции

Пусть дан пирамидально-упорядоченный массив Ai, (i=1,…,N). Требуется добавить к нему еще один элемент Ai+1 и переупорядочить массив. Для этого введем текущий номер элемента в массиве k. В начальный момент положим k= N+1.

Свойство пирамидально-упорядоченности выполняется для всех соответствующих пар элементов, кроме, быть может, пары (k,k/2). Если для этой пары свойство A[k/2] ³ Ak выполняется, то массив пирамидально упорядочен и ничего больше делать не надо. Иначе поменяем местами пару элементов с индексами k и k/2. При этом элемент с индексом k/2 не уменьшится, поэтому поддерево, с него начинающееся, но идущее по другой ветке, чем (k,k/2) останется пирамидально-упорядоченным (т.е., например для четного k, останется верным A[k/2] ³ Ak+1).

Перед обменом местами элементов с индексами (k,k/2), элемент A[k/2] был не меньше всех элементов в поддереве, начинающегося с A[k/2], кроме, быть может, Ak. Поэтому, после обмена местами элементов с индексами (k,k/2), элемент Ak будет не меньше всех элементов в поддереве, начинающегося с Ak. Осталось присвоить k=[k/2], и выполнить те же самые действия для нового k.

Таким образом, мы произведем не более [log N]+1 обменов местами соседних элементов, из чего следует, что процедура добавления элемента в пирамиду может быть произведена за время O(log N).

Корректировка положения элемента

Пусть дан пирамидально-упорядоченный массив Ai, (i=1,…,N). Для текущего элемента в массиве с номером k изменим значение элемента Ak. Требуется переупорядочить массив.

Если Ak³ A2k и Ak³ A2k+1, то задача полностью сводится к предыдущей.

Пусть, для определенности, Ak< A2k. Но тогда A[k/2] ³ Ak (т.к. A[k/2] ³ A2k> Ak), из чего получаем, что все элементы из поддерева, начинающегося с k- го элемента массива не превосходят A[k/2]. В этом случае возможно применить процедуру Heapify(A,k,N). Время ее работы O(log N).

¢

Лекция 9

 

Бинарные деревья поиска

Бинарными деревьями называют деревья, в которых, как правило, задан корневой элемент или корень и для каждой вершины существует не более двух потомков. Например, для задания одной вершины бинарного дерева целых чисел в языке С можно использовать следующую структуру

Typedef struct STree_

{

Int value;

struct STree_ *prev;

struct STree_ *left, *right;

} STree;

здесь указатель prev указывает на родительский элемент данной вершины, а left и right – на двух потомков, которых традиционно называют левым и правым. Величина value называется ключом вершины.

Бинарное дерево называется деревом поиска, если для любой вершины дерева a ключи всех вершин в правом поддереве больше или равны ключа a, а в левом – меньше. Неравенства можно заменить на строгие, если известно, что в дереве нет равных элементов.

Далее мы постараемся придерживать синтаксиса языка С, т.е., как правило, мы будем использовать в качестве вершины дерева a переменную типа

STree *a;

Отсутствие потомка обозначается нулевым значением соответствующего указателя.

Часто, если это не будет приводить к двусмысленностям, под сравнением элементов мы будем подразумевать сравнение соответствующих ключей.

Ветвью дерева называется последовательность вершин дерева, каждый последующий элемент в которой является потомком предыдущего.

Длиной ветви дерева называется количество элементов в ветви.

Высотой дерева называется максимальная длина всех ветвей дерева.

Основные операции, которые можно совершать с бинарными деревьями:

· поиск элемента в дереве (т.е. элемента с ключом, равным заданному)

· добавление элемента в дерево

· удаление элемента из дерева

· поиск минимального и максимального элемента в дереве

· если рассмотреть дерево поиска, как упорядоченную по возрастанию последовательность элементов, то: для текущего элемента поиск следующего/предыдущего

· для данной вершины дерева v разбиение дерева поиска T на два дерева поиска T1 и T2 таких, что все элементы в T1 меньше или равны v, и все элементы в T2 больше или равны v

· для двух деревьев поиска T1 и T2 таких, что все элементы в T1 меньше или равнывсех элементов в T2 (будем далее для таких деревьев говорить, что дерево T1 меньше или равно дерева T2: T1 £ T2): слияние деревьев в одно дерево поиска T

 

Покажем, что все эти операции можно совершить за время O(h), где h – высота рассматриваемого дерева.


Дата добавления: 2015-10-30; просмотров: 156 | Нарушение авторских прав


Читайте в этой же книге: То return QFindStatP (A, p, j, k,N ) | QFindStat5(A,1,N,k) | Структуры данных. | Struct SStack3 st3; | Стек. Реализация 5 (на основе указателя на указатель). | Struct SQueue | Стандартная ссылочная реализация списков | InsertData( value, head, current); | Реализация L2-списка на основе двух стеков | Поиск пути в графе с наименьшим количеством промежуточных вершин |
<== предыдущая страница | следующая страница ==>
Поиск кратчайшего пути в графе| Сбалансированные и идеально сбалансированные бинарные деревья поиска

mybiblioteka.su - 2015-2024 год. (0.008 сек.)