Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы аисд.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.94 Mб
Скачать

28.Поиск по бинарному дереву. Эффективность поиска по бинарному дереву.

Вначале рассмотрим просто поиск по бинарному дереву.

Длительность операции зависит от структуры дерева. Действительно, дерево может быть вырождено в однонаправленный список, как правое на рисунке ниже

В этом случае время поиска будет такое же, как и в однонаправленном списке, т.е. придется перебирать n/2 элементов. 

Наибольший эффект использования дерева достигается в том случае, когда дерево сбалансировано.

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

Поиск элемента в сбалансированном дереве называется бинарным поиском по дереву. Такое дерево называют деревом бинарного поиска.

При бинарном поиске по дереву перебирается не больше log2N элементов. Другими словами, эффективность бинарного поиска по дереву имеет порядок O(log2N). 

Суть поиска заключается в следующем. Анализируем вершину очередного поддерева. Если ключ меньше информационного поля вершины, то анализируем левое поддерево, больше - правое.

 

  

 Алгоритм поиска по бинарному дереву

p = tree

whlie p <> nil do

    if key = k(p) then

      search = p

      return

    endif

    if key < k(p) then

      p = left(p)

    else

      p = right(p)

    endif

endwhile

search = nil

return

 Очень часто следствием поиска являются ситуации: 

если узел с заданным ключом не найден, то его надо вставить;

 

если узел с заданным ключом найден, то его надо удалить.

29.Поиск по бинарному дереву с включением.

Вначале рассмотрим просто поиск по бинарному дереву.

Длительность операции зависит от структуры дерева. Действительно, дерево может быть вырождено в однонаправленный список, как правое на рисунке ниже

В этом случае время поиска будет такое же, как и в однонаправленном списке, т.е. придется перебирать n/2 элементов. 

Наибольший эффект использования дерева достигается в том случае, когда дерево сбалансировано.

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

Поиск элемента в сбалансированном дереве называется бинарным поиском по дереву. Такое дерево называют деревом бинарного поиска.

При бинарном поиске по дереву перебирается не больше log2N элементов. Другими словами, эффективность бинарного поиска по дереву имеет порядок O(log2N). 

Суть поиска заключается в следующем. Анализируем вершину очередного поддерева. Если ключ меньше информационного поля вершины, то анализируем левое поддерево, больше - правое.

 

  

 Алгоритм поиска по бинарному дереву

p = tree

whlie p <> nil do

    if key = k(p) then

      search = p

      return

    endif

    if key < k(p) then

      p = left(p)

    else

      p = right(p)

    endif

endwhile

search = nil

return

 Очень часто следствием поиска являются ситуации: 

если узел с заданным ключом не найден, то его надо вставить;

 

если узел с заданным ключом найден, то его надо удалить.

  

Поиск по бинарному дереву с включением (вставкой) 

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

Для включения новой записи в дерево, прежде всего нужно найти тот узел, к которому можно присоединить новый элемент. Алгоритм поиска нужного узла тот же самый, что и при поиске узла с заданным ключом. Однако непосредственно использовать процедуру поиска нельзя, потому что по ее окончании не фиксирует тот узел, из которого была выбрана ссылка NIL (search = nil).

Модифицируем описание процедуры поиска так, чтобы в качестве ее побочного эффекта фиксировалась ссылка на узел, в котором был найден заданный ключ (в случае успешного поиска), или ссылка на узел, после обработки которого поиск прекращается (в случае неуспешного поиска), а затем делается всавка элемента.

Алгоритм поиска по бинарному дереву с включением (вставкой)

p = tree

q = nil

while p <> nil do

    q = p

    if key = k(p) then

      search = p

      return

    endif

   if key < k(p) then

      p = left(p)

                else

      p = right(p)

    endif

endwhile

v = maketree(key, rec)

if q = nil then

        tree = v

       else 

    if key < k(q)   then

      left(q) = v

     else

      right(q) = v

    endif

endif

search = v

return

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]