2021. 3. 17. 00:07ใ์ ๊ณต ๊ณผ๋ชฉ/์ปดํจํฐ ์๊ณ ๋ฆฌ์ฆ
์๊ณ ๋ฆฌ์ฆ - ํฉ๋ณ์ ๋ ฌ
1๊ฐ๊ฐ ๋จ์ ๋๊น์ง ๋๋๋ค.(DIVIDE),
ํฉ์น๋ค.
mergesort ์ merge๋ 2:1์ ๊ด๊ณ์ ์๋ค. ์ฌ๊ท์ด๊ธฐ ๋๋ฌธ์ -> ์คํ์ ์ด์ฉํ๋ค.
mergesortํจ์์ ์์ค์ฝ๋
void mergesort(int n, keytype S[]){
if(n>1){
const int h = n/2, m = n-1;
keytype U[h], V[m];
for(int I = 0; i<h;i++){
U[i] = S[i];
}
int index =0 ;
for(int I = h+1; i<n; I++){
V[index] = S[i];
index++;
}
mergesort(h,U);
mergesort(m,V);
merge(h,m,U,V,S);
}
}
mergeํจ์์ ์์ค์ฝ๋
void merge(int h, int m, const keytype U[]. const keytype V[]. const keytype S[]){
index I,j,k;
I = 1; j=1; k=1;
while(i<=h && j<=m){
if (U[i] < V[j]) {
S[k] = U[i];
I++;
}
else{
S[k] = V[j];
j++;
}
k++;
}
if(i >h)
copy V[j] through V[m] to S[k] through S[h+m];
else
copy U[i] through U[h] to S[k] through S[h+m];
ํฉ๋ณ์ ๋ ฌ์ merge ์๊ฐ๋ณต์ก๋
๋จ์์ฐ์ฐ : U[i]์ V[j]์ ๋น๊ต
U๋ฐฐ์ด์ ๊ฐ์๊ฐ h๊ฐ, V๋ฐฐ์ด์ ๊ฐ์๊ฐ m๊ฐ๋ผ๊ณ ํ์ ๋ ๋น๊ต์ฐ์ฐ์ด ์ต์ ์ ๊ฒฝ์ฐ๋ผ๋ h+m-1๋ฒ์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฆ W(h,m) = h+m-1์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
ํฉ๋ณ์ ๋ ฌ์ ์ ์ฒด ์๊ฐ๋ณต์ก๋
mergesortํ ๋ n์ ๋ฐ์ผ๋ก ๋ถ๋ฆฌํ W(2/n)๋งํผ ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์ ์ ์๊ณ , ์ด๋ ๋ ๋ฒ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ 2*W(2/n)์ด๋ค. ๋ํ, merge๋ฅผ ํ ๋๋ ์์ ์ธ๊ธํ ๊ฒ๊ณผ ๊ฐ์ด h+m-1์ด๋ผ๊ณ ๋ณผ ์ ์๊ณ , h+m์ n์ด๊ธฐ ๋๋ฌธ์ ์ด ์๊ฐ ๋ณต์ก๋๋ 2*W(2/n)+n-1๋ก ์ ์ํ ์ ์๋ค.
W(1) = 0 -> ํฉ๋ณ์ด ์ ํ ์ด๋ฃจ์ด์ง์ง ์์ผ๋ฏ๋ก,
์ด๋ฌํ ๋ณต์ก๋๋ ๋์ฌ์ ๋ฆฌ๋ฅผ ํตํ์ฌ W(n) = O(nlogn)๊ฐ ๋๋ค.
ํฉ๋ณ์ ๋ ฌ์ ๊ณต๊ฐ๋ณต์ก๋ ๋ถ์
๋ฐ์ฉ ๋๋ ์ง๊ธฐ ๋๋ฌธ์ ์ฒ์์๋ n๋งํผ ํ์ํ์ง๋ง ์ ์ 2/n์ ํฌ๊ธฐ ๋ ๊ฐ, 4/n๋งํผ์ ํฌ๊ธฐ ๋ค ๊ฐ ๋ฑ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๊ฒ ๋๋ค. ์ด๋ 2n์ด ๋๋๋ฐ 2n์ O(n)์ด๋ผ๊ณ ํ ์ ์๋ค.
'์ ๊ณต ๊ณผ๋ชฉ > ์ปดํจํฐ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๊ณ ๋ฆฌ์ฆ - ๋ถํ ์ ๋ณต (0) | 2021.03.16 |
---|