選擇問題——在序列中按順序找到某個元素。這可以用排序方法做到,即先排個序,在找到指定元素,但是這樣就按最快的堆排序、合併排序啥的都得是o(nlgn)數量級的,這裡採取的方法可以在期望為o(n)的時間內完成。
具體的實現方式如下:
int select(int *a, int begin, int end, int這裡randomizedpartition()函式返回劃分的位置,但是,並不是想隨機快速排序一樣劃分的兩個部分都遞迴呼叫自身,而是根據具體情況呼叫一部分。先把randomizedpartition()寫到下面:i)
int token =randomizedpartition(a, begin, end), dis;
dis = token -begin;
if(dis ==i)
else
if(dis >i)
else
}
1為了便於理解,下面舉個具體的例子,看看程式怎麼執行。int random(int begin, int
end)28
int randomizedpartition(int *a, int begin, int
end)926
}27 tmp = a[i+1
];28 a[i+1] =a[end];
29 a[end] =tmp;
30return i+1
;31 }
測試需要最短時間內找到最值錢的寶物
李和恆個人的理解是,軟體測試就像沙灘上的尋寶人,你不可能知道沙里埋了些什麼 有多少 在 尋寶人要在盡量短的時間裡面挖出盡量值錢的寶物。但極為諷刺的是,你不可能挖出所有的寶物,而且所有的寶物日後都會浮現出來,比如 海嘯地質運動什麼的。在這裡,測試工程師就是尋寶人,寶物就是bug。至於用什麼辦法尋寶,那...
在O n 時間內查詢陣列內第k小的數
前一陣子做作業,看到了這個,要求在 o n 時間內查詢前 k 小的 k 個數,給出的提示是,先在 o n 時間內查詢到第 k 小的數.由此想到,此前一直用 的 sort 函式,排完序後找下標為 k 1 的那個數,卻從來沒有考慮過具體的 實現.結合前一陣子學習的快速排序演算法,大致對此有了新的認識.首...
socket短時間內重連需注意的問題
socket短時間內重連需注意的問題 設定好監聽socket後,將socket的屬性設定為可重複使用位址,如 建立監聽socket socketlisten new socket addressfamily.internetwork,sockettype.stream,protocoltype.tc...