演算法導論 第六課 順序統計,中值

2021-06-29 02:21:53 字數 1658 閱讀 8088

這一節課講到兩個線性演算法,乙個是順序統計演算法(order statistics)還有乙個是最壞情況線性時間順序統計法(worst-case linear-time order statistics)

這兩個演算法是要解決這樣乙個問題:對於乙個陣列a,我們需要求得第k小的乙個數,rank(k)

如果k=1, 就是求最小值

如果k=n, 就是求最大值

如果k=[(n+1)/2] or [(n-1)/2] 那麼就是求中值

1. 採用隨機分治的思想計算順序統計

計算在陣列 a[p,q] 中第i小的乙個數 // p,q是數列的序號

寫出這個演算法的偽**:

rand-select(a,p,q,i)

if p=q then return a[p]

r k

if i=k return a[r]

if i

接下來來分析這個演算法,

與隨機排序的分析方法差不多在除了worstcase的情況下,這個演算法的複雜度都是θ(n)

而如果每次分治都只排除了乙個元素的話 t(n)=t(n-1)+θ(n)那麼t(n)=θ(n^2)

現在我們需要求這個t(n)的期望值,可以看出,t(n)的值依賴於不同的分治方式,這個分治方式又依賴於隨機的指示變數,因此,構造乙個隨即指示器:

xk=1 分割成k和n-k-1兩段

xk=0 其他情況

推導過程見課件,與快速排序法的過程類似

最終通過代換法我們可以知道

e[t(n)]≤cn,因此這個演算法是線性的。

現在再來考慮一下,如果最壞的情況下,這種隨機選擇主元的方法會導致θ(n^2)的複雜度,那麼能不能有乙個演算法能保證選擇的主元是乙個好的主元呢?

2.最壞情況線性時間順序統計法(worst-case linear-time order statistics)

我們需要的是乙個好主元,這個時候就可以考慮我們可以遞迴的來選取主元,而不用隨機選擇

這個演算法包含以下四個步驟

1)對於乙個長度為n的陣列,我們把這些元素組成乙個5*[n/5]的陣列,並找出每一列的中值,時間複雜度θ(n)

2)求出這些中值的中值,定義為x,時間耗費n/5

3)以x為劃分元素,k為x的序號,遞迴的呼叫:

if i=k return x (這裡有乙個疑問,返回的x並不一定是陣列n的中值)

if ik then 在剩下的3/4部分裡迭代的尋找第i-k小的數

分析:這個演算法有趣的地方在於選取的這個分化元素x和每一組的中值,把整個陣列分成了四個部分,如下圖,

其中左上部分的值一定是小於等於x的,右下部分的值一定是大於等於x,

在遞迴的時候,無論i大於還是小於k我們都能將運算的規模減小3*n/5/2=3n/10

t(n)=t(7n/10)+t(n/5)+θ(n)

由代換法可知,這個遞迴式的主導因子是θ(n),因此t(n)=θ(n)是乙個線性的演算法

但是,這個演算法其實在現實中並不是那麼好,因為c會取到很大,不見得就不隨機選擇主元的順序統計法好。另外這個演算法返回的x不一定就是第i小的數,我認為在準確性上還有待討論。

第六課 字型

a.字型系列 font family times new roman times,serif b.字型樣式 font style normal 正常 正常顯示文字 font style italic 斜體 以斜體字顯示的文字 font style oblique 傾斜的文字 文字向一邊傾斜 和斜體非...

第六課 列表

序列是python中最基本的 種資料結構。序列 於儲存 組有序的資料,所有的資料在序列當中都有 個唯 的位置 索引 並且序列中的資料會按照新增的順序來分配索引。資料結構指計算機中資料儲存的 式。python 基礎教程 第二版 對序列的定義為 資料結構。資料結構是通過某種方式 例如對元素進行編號 組織...

第六課 文法

1.名詞 動詞 他動詞 用助詞 表示他動詞的直接受詞。飲 我喝果汁。注 的發音和 相同。只用在表示助詞時。2.名詞 日語的動詞 可以將其大範圍的名詞列為受詞。意思是執行該受詞表示的內容。下面舉幾個例子。1 運動,遊戲等 踢足球 玩撲克牌 2 集會,活動等 舉行派對 會議 召開會議 3 其他 宿題 做...