์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๋ถ„ํ• ์ •๋ณต

2021. 3. 16. 10:55ใ†์ „๊ณต ๊ณผ๋ชฉ/์ปดํ“จํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๋ถ„ํ• ์ •๋ณต

 

1) ๋ถ„ํ•  : ํ•ด๊ฒฐํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

2) ์ •๋ณต : ๋‚˜๋ˆˆ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ๊ฐ๊ฐํ•ด๊ฒฐํ•œ๋‹ค.

3) ํ†ตํ•ฉ : (ํ•„์š”ํ•˜๋‹ค๋ฉด) ํ•ด๊ฒฐ๋œ ํ•ด๋‹ต์„ ๋ชจ์€๋‹ค.

 

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„(top-down)ํ•˜ํ–ฅ์‹ ์ ‘๊ทผ๋ฐฉ๋ฒ• ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 

์ด๋Š” ์ด๋ถ„๊ฒ€์ƒ‰(Binary Search) ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ๋‹ค.

์ด๋ถ„๊ฒ€์ƒ‰์€ O(logn)์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ˆœ์ฐจ๊ฒ€์ƒ‰์ด O(n)์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์„ ๋ณด๋ฉด ๋”์šฑ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

์ด๋ถ„๊ฒ€์ƒ‰์˜ ์„ค๊ณ„์ „๋žต:

1) x๊ฐ€ ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์— ํ•ญ๋ชฉ๊ณผ ๊ฐ™์œผ๋ฉด ๋น™๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด:

๋ถ„ํ•  : ๋ฐฐ์—ด์„ ๋‚˜๋ˆ„์–ด์„œ x๊ฐ€ ์ค‘์•™๋ณด๋‹ค ์ž‘์œผ๋ฉด ์™ผ์ชฝ์— ์œ„์น˜ํ•œ ๋ฐ˜์ชฝ์„ ์„ ํƒํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜ํ•œ ๋ฐฐ์—ด ๋ฐ˜์ชฝ์„ ์„ ํƒํ•œ๋‹ค.

2) ์ •๋ณต : ์„ ํƒ๋œ ๋ฐ˜์ชฝ ๋ฐฐ์—ด์—์„œ x๋ฅผ ์ฐพ๋Š”๋‹ค.

3) ์ด ๋‘ ๊ฐœ๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

4) (์ด ๋•Œ)ํ†ตํ•ฉ์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

index location (index low, index high){
	index mid;

	if(low>high)
	   return 0;
	else {
	   mid = (low + high) /2
	   if( x == S[mid])
		return mid;
	   else if( x <S[mid])
		return location(low, mid-1);
	   else 
		return location(mid+1, high);
	 }
     }

...
locationout = location(1,n);

 

๊ณ ์ฐฐ : ์œ„์˜ ์žฌ๊ท€ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ (S,n)๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‚ญ๋น„๊ฐ€ ๋œ๋‹ค.

์ด๋ฅผ ๊ผฌ๋ฆฌ ์žฌ๊ท€ํ˜ธ์ถœ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์ด์™€ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฐ˜๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์ˆ˜์›”ํ•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ๋ฐ˜๋“œ์‹œ ๋ณต์žก๋„๊ฐ€ ์žฌ๊ท€๋ณด๋‹ค ์ข‹๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ƒ์ˆ˜์ ์œผ๋กœ๋งŒ ์ข‹๋‹ค๋Š” ๋ง์ด๋‹ค.

 

๋ถ„ํ• ์ •๋ณต์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„