๊ณต๋ถ€/์ฝ”๋”ฉ

์‹œ๊ฐ„/๊ณต๊ฐ„ ๋ณต์žก๋„์™€ Big-O ํ‘œ๊ธฐ๋ฒ•

sourceoftax 2025. 8. 18. 20:03

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํ˜„์žฌ ์ž…๋ ฅ๋œ ํฌ๊ธฐ n์— ๋Œ€ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰ ์‹œ๊ฐ„์ด๋‹ค. ์ด๋ฅผํ…Œ๋ฉด ๊ธธ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ํ•  ๋•Œ, ๊ฐ€์žฅ ๋น ๋ฅธ ๊ธธ์€ ์ตœ์„  ์ผ€์ด์Šค๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์ ๋‹นํžˆ ๋Œ์•„๊ฐ„๋‹ค๋ฉด ํ‰๊ท  ์ผ€์ด์Šค, ๊ทธ๋ฆฌ๊ณ  ์ •๋ง ์ตœ์•…์˜ ์ผ€์ด์Šค ์—ญ์‹œ ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Big-O๋Š” ์ตœ์•…์˜ ์ผ€์ด์Šค๋ฅผ ๋ถ„์„ํ•œ๋‹ค. ํ•ด๋‹น ์ตœ์•…์˜ ์ผ€์ด์Šค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์œผ๋กœ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค.

 

 

๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ํ˜„์žฌ ์ž…๋ ฅ๋œ ํฌ๊ธฐ n์— ๋Œ€ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด๋‹ค. ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ์ž…๋ ฅ ๊ณต๊ฐ„, ๋ณด์กฐ ๊ณต๊ฐ„, ์ถœ๋ ฅ ๊ณต๊ฐ„์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ค‘ ์šฐ๋ฆฌ๋Š” ์ฃผ๋กœ ๋ณด์กฐ ๊ณต๊ฐ„์„ ๋ถ„์„ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๋ณด์กฐ ๊ณต๊ฐ„์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์ž„์‹œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐ„์ด๋ผ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. ์ด ๊ณต๊ฐ„์€ ์ž…๋ ฅ ๊ณต๊ฐ„์„ ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ์—, ์ˆœ์ˆ˜ํ•˜๊ฒŒ ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ์— ์œ ์šฉํ•ด ์ด๊ฑธ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ์„ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณต๊ฐ„ ๋ณต์žก๋„ ์—ญ์‹œ Big-O ํ‘œ๊ธฐ๋ฒ•์„ ์ด์šฉํ•ด ๋ณต์žก๋„๋ฅผ ํ‘œ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๋ฐฑ์ค€ ๋ฌธ์ œ๋“ค์„ ๋ณด๋‹ค๋ณด๋ฉด ์‹œ๊ฐ„ ์ œํ•œ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์ด ๋‚˜์˜ค๋Š”๋ฐ, ์ด๊ฒŒ ๊ฐ๊ฐ ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„์— ๊ด€๋ จ๋œ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

์•„๋ž˜ ํ‘œ๋Š” Big-O ํ‘œ๊ธฐ๋ฒ•์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค

 

์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ํ‘œ๊ธฐ๋ฒ•์„ ํ™•์ธํ•ด๋ณด์ž. ํŒŒ์ด์ฌ ์ฝ”๋“œ์ด๋‹ค

def func(arr, target):
 	for i in range(len(arr)):
 		if arr[i] == target:
 			return i
 return -1

์šฐ์„  ๋ฌด์—‡์ด n์ธ๊ฐ€? ์—ฌ๊ธฐ์—์„œ๋Š” len(arr)์ด n์ด ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ target์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ตœ๋Œ€ n๋ฒˆ์˜ ๋ฐ˜๋ณต๋ฌธ์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋”ฑํžˆ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žก์•„๋จน์ง€ ์•Š๊ณ  ์žˆ๋Š” ์ •๋ณด๋งŒ ์‚ฌ์šฉํ•ด์„œ ํƒ์ƒ‰ํ•˜๊ธฐ์— ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋‹ค. 

 

def func(arr, target, left, right):
 	if left > right:
 		return -1
 mid = (left + right) // 2
	 if arr[mid] == target:
 		return mid
 elif arr[mid] < target:
 	return func(arr, target, mid + 1, right)
 else:
	 return func(arr, target, left, mid - 1)

์ด๋ฒˆ์—๋Š” ์žฌ๊ท€๋ฅผ ํฌํ•จํ•œ ์ด์ง„ ํƒ์ƒ‰ ํ•จ์ˆ˜์ด๋‹ค. ๋งค๋ฒˆ ์žฌ๊ท€๋ฅผ ๋ฐ˜๋ณตํ•  ๋•Œ๋งˆ๋‹ค ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ค๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(log n)์ด๋‹ค. ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ์–ด๋–จ๊นŒ? ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” ๊ณ„์† ๋™์ผํ•˜์ง€๋งŒ, ์žฌ๊ท€๋กœ ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์— log n๊ฐœ์˜ ํ•จ์ˆ˜ ํ”„๋ ˆ์ž„์ด ์ €์žฅ๋˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๊ณต๊ฐ„ ๋ณต์žก๋„ ์—ญ์‹œ O(log n)์ด๋‹ค.