๋ฆฌ์คํธ A = [ 0, 1, ,2, 3 ] ์ด ์์ ๋, ๋ง์ง๋ง ์์์ธ '3'์ ์ฐพ๋๋ค๊ณ ํด๋ณด์. |
Simple search, ๋จ์ ํ์์ ๊ฒฝ์ฐ ์ฒ์๋ถํฐ ์์ฐจ์ ์ผ๋ก ์์ ๊ฐ์ ํ์ธํ๋ค. ๋ง์ง๋ง์ ์์นํ๊ณ ์๋ ์์์ธ '3'์ ์ฐพ๊ธฐ ์ํด์๋ ๋ฆฌ์คํธ์ ๊ธธ์ด์ ๊ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๋ฆฌ์คํธ์ ๊ธธ์ด์ ๊ฐ์์๊ฐ์ O(n), linear time ์ ํ์๊ฐ ์ด๋ผ๊ณ ํ๋ค. |
Binary search, ์ด์ง ํ์์ ๋ฆฌ์คํธ์ ์ค๊ฐ์ ์๋ ์์์ ํฌ๊ธฐ์ ๋ฐ๋ผ ํ์ํ ๊ตฌ๊ฐ(range)๋ฅผ ๋ฐ์ฉ ์ค์ฌ๋๊ฐ O(log n), logarithm time ๋ก๊ทธ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋ฐฉ์์ด๋ค. ๋ง์ฝ 100๊ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฆฌ์คํธ๋ผ๋ฉด ํ์ํ ๊ตฌ๊ฐ์ด 100 ์์ 50, 25, 13, 7, 4, 2, 1 ์์ผ๋ก ์ค์ด๋ ๋ค. ๋ฐ๋ผ์, A์ ์ค๊ฐ์ ์์นํ A[2] ์์น์ ์์์ธ '2'์ ์ฐพ๊ณ ์ํ๋ ์์์ธ '3'๋ณด๋ค ์์ผ๋ฏ๋ก ๊ตฌ๊ฐ A[:3] = [ 0, 1] ์ ๋ฒ๋ ค์ง๊ณ , ๋ค์ iteration์์๋ A[3:] = [3]์ด ํ์๋๋ ๊ตฌ๊ฐ์ด๋ค. |
Binary search ํ์ด์ฌ ๊ตฌํ (* ์ด์ง ํ์์ ํ์ํ ๋ฆฌ์คํธ๊ฐ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์์ ๋๋ฅผ ๊ฐ์ ํ๋ค.)
'''
INPUT: A = sorted array, i = value want to fine
OUTPUT: If value i is in A, return the index of it,
if not return -1.low = ํ์ ๋ฒ์ ๋งจ ์ ์ธ๋ฑ์ค
high = ํ์ ๋ฒ์ ๋งจ ๋ ์ธ๋ฑ์ค
'''
def binarySearch(A,i):
low = 0
high = len(A) -1
while low <= high:
mid = (low + high) // 2
if A[mid] == i:
return mid
elif A[mid] < i:
low = mid+1
else:
high = mid
return -1