Minh một đống nhị phân có


16

Tôi đang cố gắng chứng minh rằng một đống nhị phân với nút có chính xác nnlá, cho rằng heap được xây dựng theo cách sau:n2

Mỗi nút mới được chèn thông qua percolate lên . Điều này có nghĩa là mỗi nút mới phải được tạo ở con có sẵn tiếp theo. Điều tôi muốn nói là điều này là trẻ em bị lấp đầy, và từ trái sang phải. Ví dụ, đống sau:

    0
   / \
  1   2

sẽ phải được xây dựng theo thứ tự này: 0, 1, 2. (Các số chỉ là chỉ mục, chúng không đưa ra dấu hiệu nào về dữ liệu thực tế được giữ trong nút đó.)

Điều này có hai ý nghĩa quan trọng:

  1. Không thể tồn tại nút nào ở cấp mà không hoàn thành cấp kk+1k

  2. Bởi vì trẻ em được xây dựng từ trái sang phải, không thể có "khoảng trống" giữa các nút ở cấp độ hoặc các tình huống như sau: k+1

        0
       / \
      1   2
     / \   \
    3  4    6
    

(Đây sẽ là một đống bất hợp pháp theo định nghĩa của tôi.) Vì vậy, một cách tốt để nghĩ về đống này là một triển khai mảng của một đống, trong đó không thể có bất kỳ "bước nhảy" nào trong các mảng của mảng.

Vì vậy, tôi đã nghĩ rằng cảm ứng có lẽ sẽ là một cách tốt để làm điều này ... Có lẽ một cái gì đó phải giải quyết ngay cả một trường hợp kỳ lạ cho n. Ví dụ, một số cảm ứng sử dụng thực tế là các đống thậm chí được xây dựng theo kiểu này phải có một nút bên trong có một con cho n chẵn và không có nút nào như vậy cho n lẻ. Ý tưởng?


@DaveClarke: Không hoàn toàn; câu hỏi được liên kết là kết quả của sự hiểu lầm về các bộ phận biên tập viên của chúng tôi còn lại để tham khảo.
Raphael

Bạn đã thử cảm ứng trên số nút resp. số lần chèn?
Raphael

@DaveClarke: Tại sao? Đó là một câu hỏi hợp lệ trong chính nó, imho.
Raphael

BTW, câu hỏi không liên quan gì đến đống. Khiếu nại giữ cho bất kỳ cây nhị phân hoàn chỉnh
Ran G.

Câu trả lời:


8

Nếu tôi nhận được câu hỏi của bạn một cách chính xác, heap thu được chỉ là một cây nhị phân có thứ tự, trong đó theo thứ tự tôi có nghĩa là chỉ có thể chiếm cấp thứ sau khi cấp k - 1 được lấp đầy và mỗi cấp được chiếm từ bên trái bên phải, không bỏ qua.kk1

Sau đó, bằng chứng đi như thế này.

  1. Một cây hoàn hảo có độ sâu có chính xác 2 k + 1 - 1 nút.k2k+11
  2. Giả sử rằng heap đạt đến độ sâu . Như vậy k
    1. lên đến cấp cây hoàn hảo (và có 2 k - 1 nút ở đó)k12k1
    2. n2k+1
  3. k
  4. 2k1k1n2k+122k1n2k+12
  5. n2k+1+2k1n2k+12

1
Lưu ý rằng đầy đủ khác với hoàn thành khác với cây nhị phân hoàn hảo . Không may, mơ hồ và lựa chọn từ không nhất quán ở đó, nhưng bạn có thể làm gì về nó. Tôi đoán dính vào định nghĩa của Wikipedia có ý nghĩa, vì hầu hết sẽ nhìn ở đó đầu tiên?
Raphael

Ồ, wow, tôi thậm chí còn không biết những điều khoản này. Cảm ơn đã chỉ ra điều này.
Ran G.

"lên đến cấp k 1 cây hoàn hảo (và có 2 ^ k - 1 nút ở đó)" và "Do đó, trong số các nút 2 ^ (k − 1) ở cấp k − 1" dường như là các câu lệnh mâu thuẫn, hoặc tôi đang thiếu một cái gì đó?
adrian h.

2k12k12k1+2k2+...

Ah bạn hoàn toàn đúng, cảm ơn rất nhiều vì đã làm rõ!
adrian h.

11

Đây là một bằng chứng logic đơn giản hơn.

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

(n/2)(n/2)


1
Giải thích khá trực quan và rõ ràng. Cảm ơn.
WhiteHat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.