問題描述
有乙個一維的向量,對於向量的中間位置元素來說,如果數值大於等於兩邊相鄰位置元素的數值,則被認為是乙個peak,對於向量邊界位置元素來說,則只需大於等於一邊相鄰位置元素的數值就好。需要輸出給定向量的乙個peak。
如果條件是大於則可能不存在peak
演算法
1.最直接的演算法:從左到右遍歷,時間複雜度為θ(n
)\theta(n)
θ(n)
2.利用分治思維的演算法:
if a[n/2]時間複雜度為θ
\theta
θ(log2
n)問題描述
有乙個二維的向量,如果某位置數值大於等於四鄰域位置元素(邊界只有三個或兩個可比較的值)的數值,則被認為是乙個peak。需要輸出給定向量的乙個peak。
演算法
1.貪心ascent演算法
時間複雜度為θ(n
2)
\theta(n^2)
θ(n2
)2.利用分治思維的演算法:
min = 0;max = m;
pick a column j = (min+max)/2;
while true
find the position(i, j) of the maximum of column j
if (i,j-1)>(i,j)
max = j;
pick colum j = (min+max)/2;
else if (i, j+1)>(i,j)
min = j;
pick colum j = (min+max)/2;
else
return (i,j);
時間複雜度為θ
\theta
θ(nlog2
m),其中n表示行數,m表示列數
演算法導論學習(一)
插入排序演算法 ex 8 9 21 6 1 1.1 9 21 6 8 2.1 6 21 9 8 3.1 6 8 9 21 4.1 6 89 21 5.1 6 89 21 歸併排序演算法 ex 8 9 21 6 1 1.8 9 21 6 1 2.8 9 21 6 1 3.8 9 21 1 6 4.8 ...
《演算法導論》筆記一
看 introduction to algorithms,second editon 裡面提到插入排序和選擇排序,這兩個演算法的時間複雜度是一樣的。比較這兩個演算法的時候,我發現其實它倆是一回事。插入排序是把新元素插入到已經排好了序的序列裡,我們知道執行當前操作需要插入的數字 而在選擇排序中,需要插...
演算法導論 一 演算法基礎
迴圈不變式主要用來幫助我們理解程式的正確性。迴圈不變式的三條性質 初始化 迴圈的第一次迭代之前,它為真。保持 如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真。終止 再迴圈終止時,可驗證演算法的正確性。偽 的重要性在於它可以簡潔地表達出演算法的本質 縮排代表塊結構 採用縮排代表塊結構可以大大提...