Binary_Search(์ด์ง ํ์)
1. Binary_Search๋
๋ฐฐ์ด์ ๋ด๋ถ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์์ด์ผ ์ฌ์ฉ๊ฐ๋ฅํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์กฐ๊ฑด๋ง ๋ง๋ค๋ฉด ๋งค์ฐ ๋น ๋ฅด๋ค. (O(logn)์ ์๊ฐ๋ณต์ก๋)
๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ฉ ์ขํ๊ฐ๋ฏ๋ก ์์น๋ฅผ ๋ํ๋ด๋ ๋ณ์ (์์์ , ์ค๊ฐ์ , ๋์ ) 3๊ฐ๊ฐ ํ์ํ๋ค.
์ฐพ์ผ๋ ค๋ ๋ฐ์ดํฐ์ ์ค๊ฐ์ ์์น์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋น๊ตํ๋๊ฒ์ด ์งํ๋ฐฉ์์ด๋ค.
2. ์์์ฝ๋
2.1 ์ฌ๊ทํจ์ ๋ฐฉ์
def binary_search(array, target, start, end):
if start > end: # array์ target๊ฐ์ด ์กด์ฌํ์ง ์์ ๊ณ์๋ ์ฌ๊ทํจ์ ํธ์ถ๋ก start > end๊ฐ ๋๊ฒฝ์ฐ None return
return None
mid = (start + end) // 2 # ์ค๊ฐ์
if array[mid] == target: # mid๊ฐ์ด target์ธ๊ฒฝ์ฐ - ์ฐพ์๊ฒฝ์ฐ ์ข
๋ฃ
return mid
elif array[mid] > target: # mid๊ฐ๋ณด๋ค target์ด ์์๊ฒฝ์ฐ
return binary_search(array, target, start, mid - 1) # end๊ฐ์ min - 1 ๋ก ๋ฐ๊พธ์ด ํ์ ๋ฒ์๋ฅผ ๋ฐ์ผ๋ก ์ค์ธ ์ฌ๊ทํจ์ ํธ์ถ
else:
return binary_search(array, target, mid + 1, end) # target๊ฐ์ด mid๊ฐ๋ณด๋ค ํฐ๊ฒฝ์ฐ, start ๊ฐ์ mid + 1๋ก ๋ฐ๊พธ์ด ์ฌ๊ทํจ์ ํธ์ถ
2.2 ๋จ์ ๋ฐ๋ณต๋ฌธ์ ํ์ฉํ ๋ฐฉ์
def binary_search(array, target, start, end):
while start <= end: # ๋ฐ๋ณตํ์ฌ array == target์ผ๋๊น์ง ๊ฐ์ ์ฐพ์
mid = (start + end) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
end = mid - 1
else:
start = mid + 1
return None # start > end ์ผ๋ None๊ฐ ๋ฐํ