Jump to content

Дерево козла отпущения

Дерево козла отпущения
Тип дерево
Изобретенный 1989
Изобретён Арне Андерссон , Игаль Гальперин , Рональд Л. Ривест
Сложности в обозначении большого О
Пространственная сложность
Космос
Временная сложность
Функция Амортизированный Худший случай
Поиск [1] : 165 
Вставлять [1] : 165  [1] : 167 
Удалить [1] : 165  [1] : 167 

В информатике дерево козла отпущения это самобалансирующееся двоичное дерево поиска , изобретенное Арне Андерссоном. [2] в 1989 году и снова Игалом Гальперином и Рональдом Л. Ривестом в 1993 году. [1] Это обеспечивает наихудший случай время поиска (с как количество записей) и амортизированное время вставки и удаления.

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

Вместо небольших дополнительных операций ребалансировки, используемых большинством алгоритмов сбалансированного дерева, деревья козла отпущения редко, но дорого выбирают «козла отпущения» и полностью перестраивают поддерево, корнем которого является «козл отпущения», в полное двоичное дерево. Таким образом, деревья козлов отпущения производительность обновления в худшем случае.

Теория [ править ]

Бинарное дерево поиска называется сбалансированным по весу, если половина узлов находится слева от корня, а половина — справа.Узел со сбалансированным по весу определяется как отвечающий критерию смягченного баланса веса:

размер (слева) ≤ α*размер (узел)размер(справа) ≤ α*размер(узел) 

Где размер можно определить рекурсивно как:

размер функции  (узел)  :      если  узел = ноль  , то          возвращается  0     иначе          вернуть  размер (узел-> влево) + размер (узел-> вправо) + 1     конец, если  функция завершения 

Даже вырожденное дерево (связный список) удовлетворяет этому условию, если α=1, тогда как α=0,5 будет соответствовать только почти полным двоичным деревьям .

Бинарное дерево поиска, сбалансированное по α-весу, также должно быть сбалансированным по α-высоте , то есть

высота(дерево) ≤ пол(log  1/α  (размер(дерево))) 

В противоположность этому , дерево, которое не сбалансировано по α-высоте, не является сбалансированным по α-весу.

Деревья козлов отпущения не гарантируют постоянное сохранение α-баланса веса, но всегда слабо сбалансированы по α-высоте.

высота(дерево козла отпущения) ≤ пол(log  1/α  (размер(дерево))) + 1. 

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

Это делает деревья козлов отпущения похожими на красно-черные деревья , поскольку у них обоих есть ограничения по высоте. Однако они сильно различаются в своей реализации определения того, где происходят вращения (или, в случае с деревьями козлов отпущения, перебалансировка). В то время как красно-черные деревья хранят дополнительную «цветовую» информацию в каждом узле для определения местоположения, деревья козла отпущения находят козла отпущения , который не сбалансирован по α-весу, для выполнения операции перебалансировки. Это во многом похоже на деревья AVL , поскольку фактическое вращение зависит от «баланса» узлов, но способы определения баланса сильно различаются. Поскольку деревья AVL проверяют значение баланса при каждой вставке/удалении, оно обычно сохраняется в каждом узле; Деревья козлов отпущения способны вычислить его только по мере необходимости, то есть только тогда, когда нужно найти козла отпущения.

В отличие от большинства других самобалансирующихся деревьев поиска, деревья козлов отпущения совершенно гибки в плане балансировки. Они поддерживают любое значение α, такое, что 0,5 < α < 1. Высокое значение α приводит к меньшему количеству балансов, что делает вставку более быстрой, но поиск и удаление медленнее, и наоборот для низкого α. Поэтому в практических приложениях α можно выбирать в зависимости от того, как часто следует выполнять эти действия.

Операции [ править ]

Поиск [ править ]

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

Вставка [ править ]

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

При нахождении точки вставки необходимо также записать глубину нового узла. Это реализуется с помощью простого счетчика, который увеличивается во время каждой итерации поиска, эффективно подсчитывая количество ребер между корнем и вставленным узлом. Если этот узел нарушает свойство α-height-balance (определенное выше), требуется повторная балансировка.

Чтобы сбалансировать все поддерево, корни которого лежат в козле отпущения, подвергается операции балансировки. Козел отпущения определяется как предок вставленного узла, который не сбалансирован по α-весу. Всегда будет хотя бы один такой предок. Изменение баланса любого из них восстановит свойство сбалансированности α-высоты.

Один из способов найти козла отпущения — подняться от нового узла обратно к корню и выбрать первый узел, который не сбалансирован по α-весу.

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

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

размер (слева) ≤ α*размер (узел)размер(справа) ≤ α*размер(узел) 

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

Рассмотрим следующий пример, чтобы продемонстрировать это. Предполагая, что мы поднимаемся обратно к корню:

размер(родительский) = размер(узел) + размер(родственный) + 1 

Но как:

размер (вставленный узел) = 1. 

Дело упрощается до:

размер[x+1] = размер[x] + размер(одноуровневый) + 1 

Где x = этот узел, x + 1 = родительский элемент и size(sibling) — единственный фактически требуемый вызов функции.

Как только козел отпущения найден, поддерево, берущее начало в козле отпущения, полностью перестраивается и становится идеально сбалансированным. [1] Это можно сделать в время, проходя узлы поддерева, чтобы найти их значения в отсортированном порядке и рекурсивно выбирая медиану в качестве корня поддерева.

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

Эскиз подтверждения стоимости внедрения [ править ]

Определите дисбаланс узла v как абсолютное значение разницы в размерах между его левым и правым узлами минус 1 или 0, в зависимости от того, что больше. Другими словами:

Сразу после восстановления поддерева с корнем в v I( v ) = 0.

Лемма: Непосредственно перед перестроением поддерева с корнем в v ,

( это обозначение Большой Омеги .)

Доказательство леммы:

Позволять быть корнем поддерева сразу после перестроения. . Если есть вырожденные вставки (то есть когда каждый вставленный узел увеличивает высоту на 1), затем
,
и
.

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

Удаление [ править ]

Деревья козлов отпущения необычны тем, что удалить их проще, чем вставить. Чтобы обеспечить удаление, деревьям козла отпущения необходимо сохранить дополнительное значение в древовидной структуре данных. Это свойство, которое мы назовем MaxNodeCount, просто представляет собой наивысший достигнутый NodeCount. Для него устанавливается значение NodeCount при каждой перебалансировке всего дерева, а после вставки устанавливается значение max(MaxNodeCount, NodeCount).

Чтобы выполнить удаление, мы просто удаляем узел, как в простом двоичном дереве поиска, но если

NodeCount ≤ α*MaxNodeCount 

затем мы перебалансируем все дерево относительно корня, не забывая установить для MaxNodeCount значение NodeCount.

Это приводит к худшему результату удаления: время, тогда как амортизированное время .

удаления стоимости Эскиз доказательства

Предположим, что дерево козла отпущения имеет элементов и только что перестроено (другими словами, это полное двоичное дерево). Максимум удаление может быть выполнено до того, как дерево будет перестроено. Каждое из этих удалений занимает время (количество времени для поиска элемента и пометки его как удаленного). удаление приводит к перестроению дерева и занимает (или просто ) время. Используя совокупный анализ, становится ясно, что амортизированная стоимость удаления равна :

Этимология [ править ]

Название «Дерево козла отпущения » «[...] основано на общепринятом понимании, что, когда что-то идет не так, первое, что люди склонны делать, это найти виноватого (козла отпущения)». [3] В Библии козлом отпущения является животное, которое ритуально обременяют грехами других, а затем прогоняют.

См. также [ править ]

Ссылки [ править ]

  1. Перейти обратно: Перейти обратно: а б с д и ж г Гальперин, Игаль; Ривест, Рональд Л. (1993). Деревья козла отпущения (PDF) . Материалы четвертого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам . Филадельфия: Общество промышленной и прикладной математики . стр. 165–174. CiteSeerX   10.1.1.309.9376 . ISBN  0-89871-313-7 .
  2. ^ Андерссон, Арне (1989). Улучшение частичного восстановления за счет использования простых критериев баланса . Учеб. Семинар по алгоритмам и структурам данных. Журнал алгоритмов . Спрингер-Верлаг. стр. 393–402. CiteSeerX   10.1.1.138.4859 . дои : 10.1007/3-540-51542-9_33 .
  3. ^ Морин, Пэт . «Глава 8 — Деревья козла отпущения» . Открытые структуры данных (в псевдокоде) (0.1G β-ред.) . Проверено 16 сентября 2017 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9dba7ef1c5e077ffbae8083ad9bbf28b__1658806560
URL1:https://arc.ask3.ru/arc/aa/9d/8b/9dba7ef1c5e077ffbae8083ad9bbf28b.html
Заголовок, (Title) документа по адресу, URL1:
Scapegoat tree - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)