元素選擇問題

2021-05-18 07:53:07 字數 1383 閱讀 9508

元素選擇又稱順序統計學,無非包含在乙個資料集中查詢最小的數,最大的數,中位數,第k位數,前k小數。。。云云。

1. 查詢最小數,查詢最大數:

順序查詢,比較次數 n—1 ,複雜度為o(n)

如果同時查詢出最大最小數,則採取如下方法 findminmax(a)

findminmax(a):

1. 將n個元素兩兩分為 n/2 組

2. 每組進行比較,則會得到 n/2 個較小和 n/2 個較大的資料集合

3. 在 n/2 個較小資料集合中查詢最小min

4. 在 n/2 個較大資料集合中查詢最大max

5. 如果是基數,則為 n/2 +1

複雜度分析:

2. 比較 n/2 次

3.4 比較 (n/2 - 1) + (n/2 - 1) = 2 * (n/2) - 2 次

最終得 3 * n/2 - 2 次

(在分組的時候減少了 n/2 次比較,個人認為也就優化在此)

2. 一般性選擇問題:

中位數的定義為位置處在中間的數,當i奇數時為 (i+1)/2,偶數時為兩個 i/2 和 (i+1)/2

(王曉東一本書中提到select方法,後續文章將對此方法進行討論)

本文採用一種類似快速排序的思想(隨機化演算法)來解決此問題

random-select (a, p, r, i)

ifp = r

then return a[p]

q <- random-partition(a, p, r)//在a陣列中,隨機選取乙個主元,位置為q,並將其劃分

k <- q - p + 1;

if i = k

then return a[q];

elseifi < k

then return random-select (a, p, q - 1, i)

else

return random-select (a, q + 1, r, i - k)

複雜度: 平均複雜度為o(n), 最壞情況為o(n^2)

3. 選取第二大的元素:

演算法1: 順序比較找到最大max並將其刪除,再從剩下的 n - 1個數中找最大。

複雜度: n - 1 + n - 2 = 2n - 3

演算法2: 錦標賽演算法 (後續博文討論)

複雜度為 n + log n - 2

4. 選取前k小元素:

演算法1: 運用select方法或者random-select演算法選取到第k個位置的數

順序查詢

複雜度為: o(n) + n - 1 = o(n)

演算法2: 將元素建最小堆,再取k次元素

複雜度為 o(n * log n)

選擇問題 第k小元素

問題描述 在乙個無序的序列t中,尋找第k小的元素 分析 將序列t進行公升序排列,下標為k的元素即為第k小的數。下標從1開始 考慮到快速排序的過程,每次進行一次partition 函式,就將比軸線值小的數放在軸線左邊,比軸線大的值放在軸線右邊,即可確定乙個軸線值的下標位置s。下面分三種情況 1 s k...

jQuery元素選擇

1 查詢所有符合條件的元素 find 舉例 ul find li addclass tmpexample 查詢頁面中ul元素下的所有li元素,並為查詢到的li元素增加tmpexample樣式。2 查詢指定元素的兄弟節點 siblings 舉例 li tmpcarrot slblings addcla...

JQuery選擇元素

參考 jquery基礎教程 雖然我個人覺得這本書的講解順序毫無邏輯,瞎搞 1.基於列表項的級別新增樣式 selected plays li addclass horizontal 查詢id為selected plays的元素的子元素中所有的列表項 selected plays li not hori...