You are on page 1of 8

Homework of Analysis of algorithms

Paper Report of

Selection in X+Y Matrices with sorted rows and columns


(A.MIRZAIAN and E.ARJOMANDI)

Professor:陳維美

Student:張枱謙

Student No.:M9502230
1.問題與目標:

可否再尋找一個更好的 Selecting X+Y 演算法。

在這篇 paper 裡將會找到一個時間複雜度只有 O(n) 的演算法,這個演算法可從


矩陣 A 裡面找到第 K 小的元素,而這個矩陣 A 是由兩個以排序的向量 X 與 Y 使
用 Cartesian sum 的運算所產生的,在這篇發表之前,Jefferson,Shamos and Tarjan
發表了可以從 X+Y 裡找到中位數的演算法,這個演算法花了 O(nlogn)的時間複雜
度,而 Johnson and Mizoguchi 發表了可以從 X+Y 裡找到第 K 小的元素,這個演
算法也花了 O(nlogn)的時間複雜度,還有沒有更好的!有的。在 1982 年
G.N.Frederickson and D.B.Johnson 所發表的 The complexity of selection and ranking
in X+Y and matrices with sorted columns,這一篇裡他們從 X+Y 找到第 k 大的元素只
花了 O(max{n,nlog(k/n)}) 的時間複雜度,似乎實現了只花 O(n) 時間複雜度的演
算法,不過 A.Mirzaian 和 E.Arjoandin 將在這篇裡實現從 X+Y 只花了 O(n)的時間
複雜度來找到第 k 小的元素的演算法,這個演算法將會應用一些
divide-and-conquer 的演算法技術來獲得最好也比之前更簡單的演算法。

2.The selection algorithm 需要的基礎理論:


作者先定義一些式子
a 為一實數。A 為一個 nxn 矩陣。
1
而子矩陣 A 的維度為n × n 而 n = n+1
2

𝑟𝑎𝑛𝑘 +(L,a)=|{x∈L | x>a} | 意指在 L 列上比 a 大的個數。


𝑟𝑎𝑛𝑘 −(L,a)=|{x∈L | x<a} | 意指在 L 列上比 a 小的個數。
再假設 1 ≤ k ≤ L ; k 為 L 上第 k 小的元素。
而 a 要符合
1. 𝑟𝑎𝑛𝑘 −(L,a)≤ k – 1
2. 𝑟𝑎𝑛𝑘 +(L,a)≥ 𝐿 -k
如圖
本篇演算法最主要是應用以下理論
Theorem 3.1

也就是
母矩陣 A 裡小於元素 a 的個數必定比小於 4 倍子矩陣A比元素 a 小的個數。
母矩陣 A 裡大於元素 a 的個數必定比小於 4 倍子矩陣A比元素 a 大的個數。

不過這是可以以直覺想到的

假如 4 個子矩陣裡,其中一個子矩陣AL 裡面的元素都比 a 小,那麼 4 倍的個數

必定比由母矩陣 A 小於 a 的個數來得多,因為是排序過的,所以以左上角的矩陣
最有可能是如此。

3.The selection algorithm 的原理與運作:


在介紹主要的運算原理之前,現介紹一些需要用的 function

如下圖,𝑟𝑎𝑛𝑘 −(A,a) 這個 function 主要是尋找矩陣 A 比元素 a 小的元素的個數,


這段過程會花時間複雜度 O(n) ,𝑟𝑎𝑛𝑘 +(A,a) 同理。
另一個 function 是 pick(L,k)
如下圖,這個 function 主要是在 L 中提出第 K 小的矩陣
所花的時間複雜度為 O(|L|)

function pick(L,k);
begin
p=L[k]
return p
end;

Selection Algorithm 主要的核心演算 function :


其中第 3 行是應用 divide-and-conquer 演算技巧,把大問題分割成小問題,
在 function biselect(n,A,k1,k2) 裡,k1≧K2,而且會回傳(x,y),其中 x 是在矩陣 A
裡第 k1 小的元素,y 是矩陣 A 裡第 k2 小的元素,n 為 A 的維度。
1
在第 3 行裡,除了 n = n + 1 ,A為 A 的子矩陣,其維度是n × n,還有k1 與
2

k2 定義如下:

k1 代表A中第 k1 小的整數元素,但只少要大於母矩陣 A 中第 K1 個元素,而


k2 代表A中第 k1 大的整數元素,但只少要小於母矩陣 A 中第 K2 個元素

為了仔細分析演算法的詳細過程,這裡
先行把 function 分成如左圖 3 部分

下圖為演算樹:(記錄著詳細取 x,y 之值過程)


4.演算法之正確性探討與證明:
當在 biselect(n,A,k1,k2)被呼叫的過程,下面式子是永遠成立的
Lemma5.1 (i) n2 ≥ k 1 ≥ k 2 ≥ 1
(ii) k1 − k 2 ≤ 4n − 4
證明為何成立:
當 n 最多為 2 時,(i)與(ii)是顯然成立的,因為先天條件 k1=k2=k and n2≧k≧1。
當 n≧3 時分成 even 和 odd 兩個 case

CASE1:
當 n is even 時
Prove 1.1
1 1 1
由n = n + 2 ; n2 = n+2 2
= n2 + 4n + 4
2 4 4

1 1
又 k1 = n + 1 + k1 = 4n + 4 + k1
4 4

and we have n2 ≥ k1 ≥ 1 故 n2 ≥ k1
Prove 1.2
1
k2 = k2 + 3 k 2 = 4k 2 − 3
4

and we have 1 ≤ k 2 ≤ n2 1 ≤ 4k 2 − 3 ≤ n2 1 ≤ k2

Prove 1.3
1 1
k1 = 4n + 4 + k1 > k 2 = k 2 + 3
4 4
Because k1 ≥ k 2 ; 4>3 ; 又 n>1 → 4n>0;
故 k1 ≥ k 2

由 n2 ≥ k 1 和 1 ≤ k 2 和 k1 ≥ k 2 得知 n2 ≥ k1 ≥ k 2 ≥ 1
Prove 1.4
1 1
k1 − k 2 = 4n + 4 + k1 − k2 + 3
4 4

1 1 5
= 4n − 1 + k1 − k 2 < 4n − 1 + 4n − 4 = 2n − =4n − 4
4 4 4

故 k1 − k 2 ≤ 4n − 4

CASE2:
When n is odd 如 CASE 1 同理可證。
Theorem 5.2
Let A be an nxn ordered matrix and 𝑛2 ≥ 𝑘1 ≥ 𝑘2 ≥ 1 .Then biselect(n,A,k1,k2)
returns the k1th and k2th elements of A.

Proof.
當 Basis(n ≤ 2):理所當然成立。
那麼 n > 2 呢?
induction (n>2) :
因為 Lemma 5.1 的關係 n2 ≥ k1 ≥ k 2 ≥ 1 又k1 與 k 2 皆為子矩陣A的元素
所以
𝑟𝑎𝑛𝑘 +(𝐴,a)≤ 𝑛2 – 𝑘1
𝑟𝑎𝑛𝑘 −(𝐴,b)≤ 𝑘2 − 1
應用 Theorem3.1 得知
1 1
𝑟𝑎𝑛𝑘 +(A,a)≤ 4𝑛2 – 4𝑘1 = 4 n2 + 4n + 4 −4 4n + 4 + k1 = 𝑛2 − 𝑘1
4 4

1
𝑟𝑎𝑛𝑘 −(𝐴,b)≤ 4𝑘2 − 4 = 4 k +3 − 4 = k2 − 1
4 2

𝑟𝑎𝑛𝑘 +(A,a)≤ 𝑛2 − 𝑘1
𝑟𝑎𝑛𝑘 −(𝐴,b)≤ k 2 − 1
由上面我們推斷 a ≥ k1 th element ≥ k 2 th element ≥ b

在程式第 7 行
當 𝑟𝑎𝑛𝑘 −(𝐴,a)=𝑟𝑎−≤ k1 − 1 成立時再結合必然成立的 𝑟𝑎𝑛𝑘 +(A,a)≤ 𝑛2 − 𝑘1
,為了符合兩式,可知 a 還是 a ,所以程式設計傳回的 x 值還是原來的 a 值,也就
是 A 中的第k1 th element元素。
假設第 7 不成立時,往第 8 行執行
當 𝑟𝑎𝑛𝑘 +(𝐴,b)=𝑟𝑏 +≤ 𝑛2 − k1 成立時再結合必然成立的 𝑟𝑎𝑛𝑘 −(𝐴,b)≤ k 2 − 1
和 k1 ≥ k 2 ,由圖可看到,b 值會成為新的 a 值也就是 A 中的第k1 th element元
素。
假設第 8 行不成立時,往第 9 行執行
也就是
𝑟𝑎𝑛𝑘 −(𝐴,a)≥ k1 − 1
𝑟𝑎𝑛𝑘 +(𝐴,b)≥ 𝑛2 − k1
要符合兩個條件,那麼新的 a 值會在原本的 a 與 b 之間,a > k1 th element > b,
又 L = ra− + rb+ − n2 & L > 1

x 的回傳直到證明完畢,y 的回傳值同理可證。

5.時間複雜度分析:
因為 4,5,6 行花 O(n)的時間去執行,那麼就只看第 9 和第 12 行

L = rank− A, a + rank+ A, b − n2 ≤ 4rank− A, a + 4rank+ A, b −
(2n − 1)2 ≤ 4 k1 − 1 + 4 n2 − k 2 − 4n2 − 4n + 1 = 4 k1 − k 2 + 4n − 5 ≤
1
4 4n − 4 + 4n − 5 = 20n − 21=20 n+2 − 21 = 10n − 1 < 12n
2

所以也只花 O(n)的時間
1
再來執行 biselect(n,A,k1,k2) 的 T n = T n+2 + O(n)
2

所以 selection 演算法只花 O(n)時間複雜度。