簡體   English   中英

在堆中找到最大值(方案)

[英]Finding the max value in a heap (Scheme)

我試圖返回一個函數,該函數返回堆中的最大值(其中堆從頂部的min到底部的max)。 我了解如何在BST中執行類似的操作。 但是我不知道如何在堆中執行此操作,因為我不完全了解堆的組織。 在BST中,我將一直向左移動直到結束。 但是,如果我繼續接近堆的底部,則最大值有可能在另一個子樹上。 (不確定是否完全有意義)。 任何幫助如何解決這一問題將不勝感激。 提前致謝。

*編輯

因此,我想到了另一種方法來解決此問題,但這是不正確的。 基本上得出了堆只是一堆嵌套列表的結論之后,我編寫了一個代碼,使堆成為一個列表,並使用另一個獲得最大值的幫助器函數。 但是,我將如何通過實際檢查每個節點來解決這個問題?

正確,在最小堆中,僅保證每個節點都大於其父節點。 完整的步行可以找到解決方案,但是您可以通過在結構底部的單例樹中實現最大值來變得更聰明。 您還可以使用let強制首先評估最左邊的樹。 假設堆為二進制結構。

(define (max-heap min-heap)
  ((empty-heap? min-heap)
   (error "empty heap has no maximum")
  ((singleton? min-heap)
   (node min-heap))
  ((empty-heap? (left-heap min-heap))
   (max-heap (right-heap min-heap)))
  ((empty-heap? (right-heap min-heap))
   (max-heap (left-heap min-heap)))
  (else 
   (let ((left-max (max-heap (left-heap min-heap))))
     (let ((right-max (max-heap (right-heap))))
       (if (> left-max right-max) left-max right-max))))))

您仍然必須步行整棵樹,但只需要執行一次。 而且您的堆棧僅與堆的深度一樣大。

暫無
暫無

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

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