簡體   English   中英

在Java PriorityQueue中,為什么queue[n]的children是queue[2*n+1]和queue[2*(n+1)]?

[英]In Java PriorityQueue, why does children of queue[n] are queue[2*n+1] and queue[2*(n+1)]?

Java 中的最小堆實現由 PriorityQueue 表示,而 PriorityQueue 又由transient Object[] queue;

它的javadoc的引用是

優先級隊列表示為平衡二叉堆:queue[n] 的兩個孩子是 queue[2n+1] 和 queue[2(n+1)]。

為什么不排隊 [2n] 和隊列 [2n+1] 正如 Tim Roughgarden 在這里所說的https://www.coursera.org/learn/algorithms-graphs-data-structures/lecture/KKqlm/heaps-implementation-details-advanced-可選08:00?

正如 caco3 在評論中提到的,如果優先隊列中的元素存儲在數組中,則該優先隊列數據結構的設計者可以決定將數組中的第一項存儲在 position 0 或 position 1 處。

將第一項放入 position 0 意味着子項位於位置 2N + 1 和 2N + 2。當第一項存儲在 position 1 中時,子項位於位置 2N 和 2N + 1。

任何一種選擇都可以導致正確的實施。 從 0 開始可以節省一點空間。 但是有些人覺得從 1 開始數學和代碼更優雅。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM