Доведення бінарної купи має


16

Я намагаюся довести, що двійкова купа з н вузлами має рівно листя, враховуючи, що купа будується таким чином:н2

Кожен новий вузол вставляється через перколат вгору . Це означає, що кожен новий вузол повинен бути створений у наступної доступної дитини. Що я маю на увазі під цим, це те, що діти заповнені вниз і ліворуч праворуч. Наприклад, наступна купа:

    0
   / \
  1   2

буде мати , був побудований в наступному порядку: 0, 1, 2. (Числа тільки індекси, вони не дають ніяких вказівок на фактичних даних , що містяться в цьому вузлі.)

Це має два важливі наслідки:

  1. Не може існувати вузол на рівні без рівня k повністю заповненимк+1к

  2. Оскільки діти побудовані зліва направо, між вузлами на рівні не може бути "порожніх пробілів" або таких ситуацій: к+1

        0
       / \
      1   2
     / \   \
    3  4    6
    

(Це було б незаконною купою за моїм визначенням.) Таким чином, хороший спосіб подумати над цією купою - це реалізація масиву купи, де не може бути жодних «стрибків» в індексах масиву.

Отже, я думав, що індукція, ймовірно, буде хорошим способом зробити це ... Можливо, щось має справу з навіть дивними випадками для російської. Наприклад, деяка індукція, що використовує той факт, що навіть купи, побудовані таким чином, повинні мати внутрішній вузол з однією дитиною для парного n, а таких вузлів для непарних n немає. Ідеї?


@DaveClarke: Не зовсім; пов'язане питання є результатом непорозуміння з боку нас редакторів, залишених там для довідок.
Рафаель

Ви спробували індукцію над номером вузла, відповідно. кількість вставок?
Рафаель

@DaveClarke: Чому? Це само по собі питання, імхо.
Рафаель

До речі, питання не має нічого спільного з купими. Претензія стосується будь-якого повного двійкового дерева
Ран Г.

Відповіді:


8

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

Тоді доказ іде так.

  1. Ідеальне дерево глибиною має рівно 2 k + 1 - 1 вузли.к2к+1-1
  2. Припустимо, що купа досягає глибини . Таким чином к
    1. до рівня дерево ідеальне (і має 2 k - 1 вузол)к-12к-1
    2. на останньому рівні є рівно вузли, які є всіма листками.н-2к+1
  3. Кожен лист на му рівні має батьківську. Більше того, у кожного двох поспіль листя є одного батька (можливо, крім останнього вузла, у батька якого є лише одна дитина)к
  4. Таким чином, з вузлів на рівні k - 1 , n - 2 k + 12к-1к-1- батьки, а решта2k-1-n-2 k +1н-2к+12- листя.2к-1-н-2к+12
  5. Загальна кількість листя - Що дає вам те, що вам потрібно.
    н-2к+1+2к-1-н-2к+12

1
Зауважте, що повні відрізняються від повних , відрізняються від досконалих двійкових дерев. Невдалий, неоднозначний і непослідовний вибір слів там, але що з цим зробити. Думаю, дотримуватися визначення Вікіпедії має сенс, адже більшість шукатиме там першими?
Рафаель

О, вау, я навіть не знав цих термінів. Дякуємо, що вказали на це.
Ран Г.

"до рівня k − 1 дерево є ідеальним (і в ньому є 2 ^ k - 1 вузли)" і "Таким чином, з 2 ^ (k − 1) вузлів на рівні k − 1" здаються суперечливими твердженнями, чи я щось пропускаю?
Адріан h.

2k12k12k1+2k-2+...

Ах ви абсолютно праві, дякую за роз’яснення!
Адріан h.

11

Ось простіший логічний доказ.

nthn/2n/2+1)thn/2

(n/2)(n/2)


1
Досить інтуїтивно зрозуміле і зрозуміле пояснення. Спасибі.
whitehat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.