[MIT6.006] 1. Algorithmic Thinking, Peak Finding 算法思維,峰值尋找


[MIT6.006] 系列筆記將記錄我觀看《MIT6.006 Introduction to Algorithms, Fall 2011》的課程內容和一些自己補充擴展的知識點。該課程主要介紹了一些基礎的算法,課程主要內容分為以下八個模塊:

模塊 例子
Algorithmic Thinking 算法思維 Peak Finding 峰值尋找
Sorting & trees 排序和樹 Event Simulation 事務模擬
Hashing 哈希 Genome Comparison 基因組對比
Numerics 數值 RSA Encryption RSA加密
Graphs 圖 Rubiks Cube 魔方
Shorest Paths 最短路徑 Caltech -> MIT
Dynamic Programming 動態規划 Image Compression 圖片壓縮
Advanced Topics 高級主題  

 

 

 

 

 

 

 

 

 

 

 

1. Algorithmic Thinking, Peak Finding 算法思維,峰值尋找

假設有一個如下圖的一維數列,格子下的數字代表它們的索引位置,位置2為峰值peak,b必須滿足:b≥a和b≤c。如果位置9為峰值,i≥h。這里是含有‘等於’是因為峰值尋找是建立“任何數列都存在峰值”的假設上。

 直接采用最簡單且最直接的峰值尋找方式,它的時間復雜度是ο(n)。為了實現更快的查詢方法,我們可以采用二分查找(Binary Search)的思想,如下圖所示:

二分尋找峰值法主要步驟(假設上圖數列為a,長度為n):

  • 先找到中間位置的數值a[n/2];
  • if a[n/2]<a[n/2 - 1],則在左邊1至n/2 - 1的元素中尋找峰值;
  • else if a[n/2]<a[n/2 + 1],則在右邊n/2 + 1至n的元素中尋找峰值;
  • else: n/2位置上的元素是峰值。

 

二分峰值尋找法的時間復雜度是ο(log2n)。跟二分法類似思路的時間復雜度常與log2n掛鈎。

假設有一個如下圖的二維網格圖,如果a≥b, a≥d, a≥c, a≥e,則a是2D-peak。

如果采用如下圖所示的貪心算法,它的時間復雜度是ο(nm)。

 

 而另一種方法是加入了二分查找思路去做:

如上圖所示:

  • 首先,選中間列 j=m/2;
  • 遍歷列j的所有元素,找到列j的全局最大值val(i, j);
  • 對比val(i, j-1), val(i, j), val(i, j+1);\
  • 如果val(i, j-1) > val(i, j),選擇左邊列繼續重復以上步驟。相似地,如果val(i, j+1) > val(i, j),選擇右邊列重復上面步驟。如果val(i, j)≥val(i, j-1)和val(i, j+1),則val(i,j )就是2D-peak。

 二分查找2D峰值的時間復雜度是ο(nlog2m),即在行(n)上尋找最大值 * 在列(m)上進行二分查找。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM