Tôi đã bối rối trong khi giải quyết vấn đề sau (câu hỏi 1 trận3).
Câu hỏi
Một d đống -ary giống như một đống nhị phân, nhưng (với một ngoại lệ có thể) các nút lá không có d trẻ em thay vì 2 trẻ em.
Làm thế nào bạn sẽ đại diện cho một d đống -ary trong một mảng?
Chiều cao của một đống d -ary của n phần tử theo n và d là bao nhiêu?
Đưa ra một thực hiện có hiệu quả TRÍCH-MAX trong một d -ary max-heap. Phân tích thời gian chạy của nó theo d và n .
Đưa ra một thực hiện có hiệu quả INSERT trong một d -ary max-heap. Phân tích thời gian chạy của nó theo d và n .
Đưa ra một thực hiện có hiệu quả TĂNG-KEY ( Một , i , k ), trong đó cờ một lỗi nếu k <A [i] = k và sau đó cập nhật d -ary ma trận đống cấu trúc một cách thích hợp. Phân tích thời gian chạy của nó theo d và n .
Giải pháp của tôi
Cho một mảng
→ Ký hiệu của tôi có vẻ hơi phức tạp. Có cái nào đơn giản hơn không?
Hãy h biểu thị chiều cao của d đống -ary.
Giả sử rằng đống là một hoàn thành d -ary cây
Đây là triển khai của tôi:
EXTRACT-MAX(A) 1 if A.heapsize < 1 2 error "heap underflow" 3 max = A[1] 4 A[1] = A[A.heapsize] 5 A.heap-size = A.heap-size - 1 6 MAX-HEAPIFY(A, 1) 7 return max MAX-HEAPIFY(A, i) 1 assign depthk-children to AUX[1..d] 2 for k=1 to d 3 compare A[i] with AUX[k] 4 if A[i] <= AUX[k] 5 exchange A[i] with AUX[k] 6 k = largest 7 assign AUX[1..d] back to A[depthk-children] 8 if largest != i 9 MAX-HEAPIFY(A, (2+(1+d+d^2+..+d^{k-1})+(largest-1) )
Thời gian hoạt động của MAX-HEAPIFY:
→ Đây có phải là một giải pháp hiệu quả? Hoặc có điều gì đó sai trong giải pháp của tôi?
h = (log [nd−1+1])− 1
vì thế chúng tôi giải thích về chiều cao sẽ không đúng. h = log [nd 1 + 1] 1 = log [nd] -1 = log [n] Mặc dù vậy, chiều cao của cây được viết làΘ(log(n)).
Lưu ý: log luôn ở gốc d cho một đống d-ary .