์ด์ง ํ์ (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)
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ - ๋๋น ์ฐ์ ํ์ (Breadth-First Search) (0) | 2024.02.20 |
---|---|
[Algorithm] ์์ฐจ ํ์ (Sequential Search) (0) | 2024.02.07 |
[Algorithm] ๋ณํฉ ์ ๋ ฌ(merge sort) (0) | 2024.02.06 |
[Algorithm] ํต ์ ๋ ฌ(Quick Sort) (0) | 2024.02.05 |
๋์ ๊ณํ๋ฒ( Dynamic Programming) ๊ณผ ๋ถํ ์ ๋ณต(Divide Conquer) (0) | 2024.02.05 |