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 ⌈ nlá, cho rằng heap được xây dựng theo cách sau:
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:
Không thể tồn tại nút nào ở cấp mà không hoàn thành cấp k
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:
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?