์•Œ๊ณ ๋ฆฌ์ฆ˜ - ํ•ฉ๋ณ‘์ •๋ ฌ

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)์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.