Доказ того, що випадкове побудоване двійкове дерево пошуку має логарифмічну висоту


10

Як довести, що очікувана висота випадково побудованого двійкового дерева пошуку з вузлами дорівнює ? Є доказ у CLRS Введення в алгоритми (глава 12.4), але я цього не розумію.nO(logn)


1
Яке питання? Який приклад? Будь ласка, відредагуйте та надайте повну інформацію.
Ран Г.

3
Будь ласка, уникайте використання скорочень (наприклад, BST) і припускайте, що у більшості з нас немає книги CLRS. Якщо ви зможете скопіювати сюди теорему і пояснити, що ви не розумієте, ви отримаєте більше відповідей.
Ран Г.

2
Це залежатиме від того, як побудовано двійкове дерево пошуку. (Навіть якщо результату немає, доказ буде.) Ще кілька деталей були б корисні.
Пітер Шор

Відповіді:


21

Давайте спочатку подумаємо про це інтуїтивно. У найкращому випадку дерево є ідеально збалансованим; у гіршому випадку дерево зовсім не врівноважене:

Зрівноважене по висоті дерево бінарного пошукуНайгірше дерево бінарного пошуку

Починаючи з кореневого вузла , це ліве дерево має вдвічі більше вузлів на кожній наступній глибині, так що дерево має вузол і висота (що в даному випадку 3). З невеликою математикою, , що означає, що вона має висота. Для повністю незбалансованого дерева висота дерева просто . Отже, у нас є межі.pn=i=0h2i=2h+11hn2h+11hlog2(n+1)1log2nO(logn)n1O(n)

Якби ми будували збалансоване дерево із упорядкованого списку , ми вибрали б середній елемент, який буде нашим кореневим вузлом. Якщо ми замість цього випадково будуємо дерево, будь-який з вузлів однаковою мірою буде вибраний, і висота нашого дерева становить: Ми знаємо, що у двійковому дереві пошуку ліве піддерево повинно містити лише ключі менше, ніж кореневий вузол. Таким чином, якщо ми вибираємо випадковим чином елемент, у лівого піддерева є елементи а в правому піддереві є елементів, тож більш компактно:{1,2,,n}n

heighttree=1+max(heightleft subtree,heightright subtree)
ithi1nihn=1+max(hi1,hni). Звідси має сенс, що якщо кожен елемент з однаковою ймовірністю буде обраний, очікуване значення - це лише середнє значення всіх випадків (а не зважене середнє). Отже:E[hn]=1ni=1n[1+max(hi1,hni)]

Як я впевнений, ви помітили, я трохи відхилився від того, як це підтверджує CLRS, тому що CLRS використовує дві відносно поширені методи доказування, які заважають непосвяченим. Перший полягає у використанні експонентів (або логарифмів) того, що ми хочемо знайти (в даному випадку висоти), що змушує математику працювати трохи більш чисто; друге - використовувати функції індикаторів (які я просто збираюся тут ігнорувати). CLRS визначає експоненціальну висоту як , тому аналогічний повтор .Yn=2hnYn=2×max(Yi1,Yni)

Припускаючи незалежність (що кожний малюнок елемента (з наявних елементів) є коренем піддірева незалежно від усіх попередніх малюнків), ми все ще маємо відношення: для якого я зробив два кроки: (1) переміщення назовні, тому що це константа і однією з властивостей підсумовувань є те, що , і (2) переміщення 2 назовні, тому що воно також є постійним і одним із властивостей очікуваних значень є . Тепер ми будемо замінювати

E[Yn]=i=1n1nE[2×max(Yi1,Yni)]=2ni=1nE[max(Yi1,Yni)]
1nici=ciiE[ax]=aE[x]maxфункціонувати з чимось більшим, тому що інакше спростити складно. Якщо ми сперечаємось з негативним , : , тоді: таким чином, що останній крок випливає із спостереження, що для , і і відбувається все шлях до , і , тому коженXYE[max(X,Y)]E[max(X,Y)+min(X,Y)]=E[X]+E[Y]
E[Yn]2ni=1n(E[Yi1]+E[Yni])=2ni=0n12E[Yi]
i=1Yi1=Y0Yni=Yn1i=nYi1=Yn1Yni=Y0Y0до з'являється двічі, тому ми можемо замінити всю суму на аналогічну. Хороша новина полягає в тому, що у нас є рецидив ; погана новина полягає в тому, що ми не набагато далі, ніж там, де ми почали.Yn1E[Yn]4ni=0n1E[Yi]

У цей момент CLRS витягує індукційне підтвердження ім'я зі свого ... репертуару математичного досвіду, такого, що включає ідентифікацію вони залишають користувачеві для доказування. Важливим для їх вибору є те, що найбільший його термін - , і нагадаємо, що ми використовуємо експоненціальну висоту таку, що . Можливо, хтось прокоментує, чому саме цей двочлен був обраний. Загальна ідея, однак, пов'язана зверху нашою повторюваністю виразом для деякої постійної .E[Yn]14(n+33)i=0n1(i+33)=(n+34)n3Yn=2hnhn=log2n3=3log2nO(logn)nkk

На закінчення одним вкладишем:

2E[Xn]E[Yn]4ni=0n1E[Yi]14(n+33)=(n+3)(n+2)(n+1)24E[hn]=O(logn)

WOW.Thanks !!!! Хоча я не знаю про очікувану цінність, цей вид має сенс. Я не робив стриманого курсу математики, перш ніж робити алгоритми. Я опублікую більше коментарів, якщо у мене є сумніви. Дякую, Мербс.
user1675999

але чому саме експоненціальна висота менше або дорівнює вибраному двочленю? Я досі не розумію, чому ми не можемо вибрати будь-який інший біном з різним найбільшим терміном і робити саме таку математику ... напевно, я дурний, але просто не можу зрозуміти, чому ... і до цього моменту підтверджую має ідеальний сенс, тоді їм просто довелося витягнути щось зовсім із синього і без жодних пояснень сказати нам, що це "доводить" їх права ...
Зекс

@Zeks Отже, ми можемо вибирати інші двочлени з більшими термінами. Якщо термін все ще є многочленом ( n^k), то висновок такий самий, тому що kв нотації big-O (спосіб 3 був упущений) випадає. Але якби ми замінили щось експоненціальне ( e^n), воно все-таки буде правильною верхньою межею, просто не тісною . Ми знаємо, що очікувана висота є щонайменше логарифмічною, тому визначення того, що вона є не більше логарифмічної, робить її тісною.
Мербс

@DavidNathan Я не розумію вашого занепокоєння - ви сумніваєтесь, що 1 / n є постійною або що її можна перенести за межі підсумовування? Він, як і константа 2, значною мірою виведений для ілюстративних цілей, щоб спростити решту доказів.
Мербс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.