์ด์ง ํ์ (Binary Search) ?
ํ์ํ ์๋ฃ๋ฅผ ๋๋ก ๋๋์ด ํด๋น ๋ฐ์ดํฐ๊ฐ ์์๋งํ ๊ณณ์ ํ์ํ๋ ๋ฐฉ๋ฒ
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ด์ง ํ์
- ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ (Divide and Conquer)
- Divide : ๋ฌธ์ ๋ฅผ ํ๋ ๋๋ ๋ ์ด์์ผ๋ก ๋๋๋ค.
- Conquer : ๋๋ ์ง ๋ฌธ์ ๊ฐ ์ถฉ๋ถํ ์๊ณ , ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ฉด ํด๊ฒฐํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ค์ ๋๋๋ค.
- ์ด์ง ํ์
- Divide : ๋ฆฌ์คํธ๋ฅผ ๋ ๊ฐ์ ์๋ธ ๋ฆฌ์คํธ๋ก ๋๋๋ค.
- Conquer
- ๊ฒ์ํ ์ซ์(search) > ์ค๊ฐ๊ฐ , ๋ท ๋ถ๋ถ์ ์๋ธ ๋ฆฌ์คํธ์์ ๊ฒ์ํ ์ซ์๋ฅผ ์ฐพ๋๋ค.
- ๊ฒ์ํ ์ซ์(search) < ์ค๊ฐ๊ฐ , ์ ๋ถ๋ถ์ ์๋ธ ๋ฆฌ์คํธ์์ ๊ฒ์ํ ์ซ์๋ฅผ ์ฐพ๋๋ค.
def binary_search(data, search):
if len(data) == 1 and search == data[0]:
return True
if len(data) == 1 and search != data[0]:
return False
if len(data) == 0:
return False
medium = len(data) // 2
if search == data[medium]:
return True
else:
if search > data[medium]:
return binary_search(data[medium + 1:], search)
else:
return binary_search(data[:medium], search)