簡體   English   中英

使用分而治之范式的算法實現

[英]Algorithm implementation using divide and conquer paradigm

我需要為該算法實現一個遞歸版本。 作為遞歸的新手,我對如何解決此問題有一個非常模糊的想法。

描述一個給定n個整數S的Θ(n lg n)時間算法,該算法確定S中的哪兩個元素具有最小的差異。

一個可能使您的生活更輕松的觀察結果是認識到,如果數字是按順序排序的,那么差異最小的一對數字必須彼此相鄰。 因此,一種簡單的算法將是對元素進行排序,然后查看所有相鄰對以找到最小的對。

由於要求您遞歸執行此操作,因此您可以嘗試遞歸解決每個部分。 對於第一部分-分揀-有一的良好的遞歸排序算法-歸並排序和快速排序命名其中的兩個。 Mergesort的運行時間為O(n log n),因此這是一個很好的起點。

至於如何使用遞歸找到最佳對,以下一些見解可以使您獲得遞歸解決方案:

  • 如果數組中只有兩個元素,則它們必須具有最小的差異,因為沒有其他選擇。
  • 如果數組中有三個或更多元素,則最佳對使用第一個元素,否則不使用。 如果確實使用第一對,則該值由前兩個元素給定。 如果不是,那么您可以(遞歸)計算最佳的一對元素,方法是在子數組中(第一個元素除外)尋找差異最小的元素對。

該總體方法在時間O(n log n)中運行。 我將把細節保留為練習,因為這似乎是一個問題集問題。

暫無
暫無

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

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