問題:
令a[1..n]是乙個由n個數所組成的陣列。序列a[1], a[2], … , a[n]被稱為是單模的(unimodal),當且僅當存在頂點序號1≤p≤n,使得陣列的元素從a[1]、a[2]開始到a[p]單調增加,而從a[p]、a[p+1]開始到a[n]則單調下降。
對於乙個給定的單模序列a[1], a[2], … , a[n],請找出其頂點序號p。設計乙個求解此問題的演算法並分析其最壞時間複雜性。
演算法設計:
1.最簡單易懂無非就是順序便利整個序列,判斷是否為遞減並結束遍歷。
2.分治演算法:
我們可以將序列分為兩部分,其中我們發現序列的前一部分是單調遞增,後一部分是單調遞減。所以我們將序列從中間分為兩部分(i=(1+n)/2),根據a[i-1],a[i],a[i+1]的值判斷定點在哪一部分,然後進行遞迴呼叫。
偽**:
find(int a,intb){
int i=(a+b)/2
;
if((a[i]-a[i-1]>0) && (a[i+1] -a[i]>0
)) find(i,b);
else
if((a[i]-a[i-1]<0) && (a[i+1] -a[i]<0
)) find(a,i);
else
return i;
最壞時間複雜度:
演算法的深度為logn,在最壞的情況下,則演算法遍歷到最下面一層,每層只需判斷中點處的情況則總複雜度為0(log n)。
python之在序列中尋找不同的元素
a list the sixth sick sheik s sixth sheep s sick set a list 利用set的唯一屬性,的確是個不錯的主意,呵呵 a string east is east set a string words send more money join word...
同時尋找序列的最大最小值
問題描述 給定乙個長度為n n 2 的無序正整數序列ary,要求同時找到其中最大和最小值元素,並返回其和。分析 將最大值max和最小值min看成一對 mix,min 每次從序列中成對地取出兩個元素,將其中較小者與min比較並更新,將其中較大者與max必將並更新,這樣處理每一對元素只需要3次比較,整個...
自動計算頂點緩衝中所有頂點的法線
問題 當繪製自定義的結構時,你會發現光照不正確。這是因為你沒有指定正確的法線向量,顯示卡要求每個頂點都有法線資訊,這樣它才可以決定每個三角形獲得多少光照,詳細資訊可見第六章。為每個頂點計算法線向量看起來很複雜,因為大多數頂點被多個三角形共享。如果每個頂點只被乙個三角形使用,你只需找到三角形的法線向量...