🌱 → 🌳

Algorithm) Binary Search(이진탐색) λ³Έλ¬Έ

Algorithms

Algorithm) Binary Search(이진탐색)

BAY 2022. 10. 25. 12:55
728x90

탐색 μ•Œκ³ λ¦¬μ¦˜

  • 순차 탐색: 리슀트 μ•ˆμ— μžˆλŠ” νŠΉμ •ν•œ 데이터λ₯Ό μ°ΎκΈ° μœ„ν•΄ μ•žμ—μ„œλΆ€ν„° 데이터λ₯Ό ν•˜λ‚˜μ”© ν™•μΈν•˜λŠ” 방법
  • 이진 탐색: μ •λ ¬λ˜μ–΄ μžˆλŠ” λ¦¬μŠ€νŠΈμ—μ„œ 탐색 λ²”μœ„λ₯Ό μ ˆλ°˜μ”© μ’ν˜€κ°€λ©° 데이터λ₯Ό νƒμƒ‰ν•˜λŠ” 방법
    • 이진 탐색은 μ‹œμž‘μ , 끝점, 쀑간점을 μ΄μš©ν•˜μ—¬ 탐색 λ²”μœ„λ₯Ό 섀정함

 

이진 탐색 λ™μž‘ μ˜ˆμ‹œ

 

이진 νƒμƒ‰μ˜ μ‹œκ°„ λ³΅μž‘λ„

λ‹¨κ³„λ§ˆλ‹€ 탐색 λ²”μœ„λ₯Ό 2둜 λ‚˜λˆ„λŠ” 것과 λ™μΌν•˜λ―€λ‘œ μ—°μ‚° νšŸμˆ˜λŠ” $log_2N$ 에 비둀함

  • 예λ₯Ό λ“€μ–΄ 초기 데이터 κ°œμˆ˜κ°€ 32개일 λ•Œ, μ΄μƒμ μœΌλ‘œ 1단계λ₯Ό 거치면 16κ°œκ°€λŸ‰μ˜ λ°μ΄ν„°λ§Œ λ‚¨μŒ
    • 2단계λ₯Ό 거치면 8κ°œκ°€λŸ‰μ˜ λ°μ΄ν„°λ§Œ λ‚¨μŒ
    • 3단계λ₯Ό 거치면 4κ°œκ°€λŸ‰μ˜ λ°μ΄ν„°λ§Œ λ‚¨μŒ

λ‹€μ‹œ 말해 이진 탐색은 탐색 λ²”μœ„λ₯Ό μ ˆλ°˜μ”© 쀄이며, μ‹œκ°„ λ³΅μž‘λ„λŠ” $O(logN)$을 보μž₯함

 

파이썬 이진 탐색 라이브러리 

bisect_left(a, x) : μ •λ ¬λœ μˆœμ„œλ₯Ό μœ μ§€ν•˜λ©΄μ„œ λ°°μ—΄ a에 xλ₯Ό μ‚½μž…ν•  κ°€μž₯ μ™Όμͺ½ 인덱슀λ₯Ό λ°˜ν™˜ 

bisect_right(a, x) : μ •λ ¬λœ μˆœμ„œλ₯Ό μœ μ§€ν•˜λ©΄μ„œ λ°°μ—΄ a에 xλ₯Ό μ‚½μž…ν•  κ°€μž₯ 였λ₯Έμͺ½ 인덱슀λ₯Ό λ°˜ν™˜

from bisect import bisect_left, bisect_right

a = [1,2,4,4,8]
x=4

print(bisect_left(a,x)) # 2
print(bisect_right(a,x)) # 4

 

νŒŒλΌλ©”νŠΈλ¦­ μ„œμΉ˜(parametric search)

νŒŒλΌλ©”νŠΈλ¦­ μ„œμΉ˜λž€ μ΅œμ ν™” 문제λ₯Ό κ²°μ • 문제(’예’ ν˜Ήμ€ ‘μ•„λ‹ˆμ˜€’)둜 λ°”κΎΈμ–΄ ν•΄κ²°ν•˜λŠ” 기법

μ˜ˆμ‹œ: νŠΉμ •ν•œ 쑰건을 λ§Œμ‘±ν•˜λŠ” κ°€μž₯ μ•Œλ§žλŠ” 값을 λΉ λ₯΄κ²Œ μ°ΎλŠ” μ΅œμ ν™” 문제

일반적으둜 μ½”λ”© ν…ŒμŠ€νŠΈμ—μ„œ νŒŒλΌλ©”νŠΈλ¦­ μ„œμΉ˜ λ¬Έμ œλŠ” 이진 탐색을 μ΄μš©ν•˜μ—¬ ν•΄κ²°ν•  수 있음

728x90

'Algorithms' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ°±μ€€] 25501번: μž¬κ·€μ˜ κ·€μž¬ python  (0) 2022.11.16
Algorithm) Dynamic Programming  (1) 2022.10.25
Algorithm) DFS/BFS  (0) 2022.10.25
Algorithm) Greedy  (0) 2022.10.25
Algorithm) μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯  (0) 2022.10.25