* ์ด์ง ํ์ (Binary serach) ๊ฐ๋
ํ์ ์๊ณ ๋ฆฌ์ฆ ์ค์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ค ํ๋์ด๋ค. ์์ฐจํ์(linear search)์ ์ฒซ๋ฒ์งธ ์์๋ถํฐ ์์๋๋ก ์ฐพ์ ๋์์ด ๋์ฌ๋๊น์ง ๊ฒ์ํด ๋๊ฐ๋ค. ์ด์ง ํ์์ ํ์ ์๋ ๋ถ๋ถ์ ๋ฐฐ์ ํ๋ฉฐ ๊ฒ์ ๋ฒ์๋ฅผ ์ค์ด๋ฉด์ ์งํํ๋ ํ์.
์ฒ์ ์ด์งํ์์ ๊ฐ๋
์ ์ฝ๊ณ , ์๊ฐ๋๋๊ฒ์ ์์ฃผ๋๊ป์ผ๋ก ํ๋ UP-DOWN ๊ฒ์์ด์๋ค.
์์ฃผ๋๊ป์๋ 1 ~ 50๊น์ง์ ์ซ์๊ฐ ์๋๋ฐ, ์์ฐ์ค๋ฝ๊ฒ ์ซ์๋ฅผ ๋ง์ถ ํ๋ฅ ์ ๋์ด๊ธฐ ์ํด์ ์ค๊ฐ๊ฐ์ ๊ณจ๋ผ๊ฐ๋ฉฐ ๋ฒ์๋ฅผ
์ค์ฌ๋๊ฐ๋ค.
์๋ฅผ๋ค์ด ๋ง์ถ๋ ์ฌ๋์ด 25๋ฅผ ์ธ์น๋ฉด, ์ถ์ ์๋ UP ์ด๋ Down์ ๋งํ์ฌ ๋ฒ์๋ฅผ ๋งํด์ค๋ค.
ํ์๋ฒ์ : 1 ~ 50
๋ง์ฝ UP์ ๋งํด์ฃผ์๋ค๋ฉด ๋ค์ ์์๋๋ 1~25๊น์ง์ ๋ฒ์๋ ํ์ํ ํ์๊ฐ ์๋์
์ด ๋๋ค.
1์ฐจ ์๋ ํ ํ์๋ฒ์ : 26 ~ 50
๋ค์์ผ๋ก 2์ฐจ ์๋๋, 40์ ์ธ์ณค๊ณ ์ถ์ ์๋ DOWN์ ์ธ์ณค๋ค๋ฉด ๋ค์ ํ์๋ฒ์๋
2์ฐจ ์๋ ํ ํ์๋ฒ์ : 26 ~ 39
์ด๋ฐ์์ผ๋ก ํ์ ๋ฒ์๊ฐ ์ ์ฐจ ์ค์ด๋ ๋ค.
* ์ด์งํ์์ ์ฝ๋ ๊ตฌํ
- ์๊ฐ๋ณต์ก๋ BigO : O(log N)
- ์ ์ ์กฐ๊ฑด : ๋ฐ๋์ ์ ๋ ฌ๋ ์๋ฃ์ฌ์ผ ํ๋ค. ๋ฌด์์ ์์๋ผ๋ฉด ์ด์งํ์์ ์ฌ์ฉํ ์ ์๋ค.
- ์ด์งํ์์ ์ฌ๊ท(Recursive)์ ์ผ๋ก๋ ๊ตฌํ ๊ฐ๋ฅํ๋ค. ๊ฐ์ ์ฐ์ฐ์ ๋ฐ๋ณต์ด๊ธฐ๋๋ฌธ์..
(bigocheatsheet.com ์ ์ฐจํธ์ ๋ฐ๋ฅด๋ฉด ์ด์งํ์์ Excellentํ ํจ์จ์ด๋ค.)
- ํ์ํ ๋์(๋ฐฐ์ด) array
- ํ์ ๋ฒ์์ ์์๊ณผ ๋์ ๋ํ๋ด๋ start , end ํน์ left , right
- ํ์ ๋ฒ์์ ์ค๊ฐ๊ฐ์ธ mid
- ํ์ ๋ชฉํ์ธ target
์ด์งํ์์ ๊ตฌํ
target = 15
arr = [i for i in range(100)]
arr.sort() # ์ฌ์ค ์์ด๋ ๋๋ค. for๋ฌธ์ผ๋ก arr๋ฅผ ๋ง๋ค์ด์ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ๋ผ์
print(arr)
start = 0
end = len(arr) - 1
cnt = 0
while start <= end:
cnt +=1
mid = (start + end) // 2
if arr[mid] == target:
print("%d์ฐจ ์๋ ,ํ์ ์๋ฃ !! ์ธ๋ฑ์ค ๋ฒํธ :%d" %(cnt, mid))
break
elif arr[mid] > target:
end = mid - 1
print("%d์ฐจ ์๋ :"%cnt, start,end)
else:
start = mid +1
print("%d์ฐจ ์๋ :"%cnt, start,end)
์ด์งํ์ ์ฌ๊ท์ ๊ตฌํ
def binarySearch(arr, start, end, target):
global cnt
mid = (start + end)//2
mid_value = arr[mid]
cnt += 1
if target == mid_value:
print("%d์ฐจ ์๋ , ํ์ ์๋ฃ !! ์ธ๋ฑ์ค ๋ฒํธ:%d"%(cnt, mid+1))
elif mid > target:
end = mid-1
print("%d์ฐจ ์๋ :"%cnt,start,end)
binarySearch(arr, start, end, target)
elif mid < target:
start = mid +1
print("%d์ฐจ ์๋ :"%cnt, start, end)
binarySearch(arr, start, end, target)
else:
return False
arr = [i for i in range(100)]
arr.sort()
target = 15
start = 0
end = len(arr) -1
cnt = 0
binarySearch(arr, start, end, target)
์ด์ง ํ์ ๊ตฌํ, ์ฌ๊ท์ ๊ตฌํ์ ๊ฒฐ๊ณผ๊ฐ (๊ฐ์)
*๊ฒฐ๊ณผ๊ฐ (์ถ๋ ฅ ๋ด์ฉ)
1์ฐจ ์๋ : 0 48
2์ฐจ ์๋ : 0 23
3์ฐจ ์๋ : 12 23
4์ฐจ ์๋ : 12 16
5์ฐจ ์๋ : 15 16
6์ฐจ ์๋ , ํ์ ์๋ฃ !! ์ธ๋ฑ์ค ๋ฒํธ:16