[탐색] πŸ‘πŸ‘Žμ΄μ§„ 탐색(binary search) + πŸ”§λ³€ν˜•

μ΅œν˜„μ§„Β·2021λ…„ 6μ›” 21일
0

μ•Œκ³ λ¦¬μ¦˜

λͺ©λ‘ 보기
3/6

이진탐색(binary search) μ•Œκ³ λ¦¬μ¦˜ =λ³‘λšœκ»‘ κ²Œμž„πŸ‘πŸ‘Ž


탐색곡간을 반으둜 λ‚˜λˆ„κ³  두 λΆ€λΆ„ 쀑 ν•œ λΆ€λΆ„λ§Œ νƒμƒ‰ν•˜λŠ” 일을 λ°˜λ³΅ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜(=λ³‘λšœκ»‘ κ²Œμž„πŸ‘πŸ‘Ž)

∎ μ •λ ¬λœ λ°μ΄ν„°μ—λ§Œ μ‚¬μš©

∎ μ •λ ¬λœ λ°°μ—΄ AπŸ§±μ—μ„œ λͺ©ν‘―κ°’ V🚩λ₯Ό 효율적으둜 νƒμƒ‰πŸ§ν•˜λŠ” 데 μ‚¬μš©

∎ 배열이 'μ˜€λ¦„μ°¨μˆœπŸ§±'으둜 μ •λ ¬ πŸ‘‰ " i<j인 λͺ¨λ“  인덱슀 쌍 i, j에 λŒ€ν•΄ A[i]=<A[j] "

∎ 탐색 κ³΅κ°„μ˜ μ–‘μͺ½ 경계(상계, ν•˜κ³„)λ₯Ό 좔적해 쀑간값과 λͺ©ν‘κ°’ 비ꡐλ₯Ό λ°˜λ³΅ν•¨πŸ”. (Until🚩 쀑간값=λͺ©ν‘―κ°’)

∎ μ€‘κ°„κ°’λ§Œμ„ 확인 πŸ‘‰ 상계와 ν•˜κ³„ 인덱슀 값은 ν™•μΈβŒ

∎ [ A(ν•˜κ³„) ≦ v ≦ A(상계) ]

😈 상계 인덱슀: ν˜„μž¬ 탐색쀑인 곡간에 μžˆλŠ” μš”μ†Œ κ°€μš΄λ° μΈλ±μŠ€κ°€ κ°€μž₯ 큰 μš”μ†Œ

😈 μ€‘κ°„μΈλ±μŠ€: (상계 인덱슀 + ν•˜κ³„ 인덱슀) Γ· 2

😈 ν•˜κ³„ 인덱슀: ν˜„μž¬ 탐색쀑인 곡간에 μžˆλŠ” μš”μ†Œ κ°€μš΄λ° μΈλ±μŠ€κ°€ κ°€μž₯ μž‘μ€ μš”μ†Œ


Binary search (target value=12)

∎ 탐색 κ³Όμ •

πŸ€“πŸ”Ž. 쀑간값 < λͺ©ν‘―κ°’
A[μ€‘κ°„μΈλ±μŠ€]<v πŸ‘‰ λͺ©ν‘―값이 쀑간보닀 뒀⏩
ν•˜κ³„ = 쀑간 + 1 πŸ‘‰ 탐색곡간 반πŸͺ“μœΌλ‘œ λ‚˜.κ°€.리

πŸ€“πŸ”Ž. 쀑간값 > λͺ©ν‘―κ°’
A[μ€‘κ°„μΈλ±μŠ€]>v λͺ©ν‘―값이 쀑간보닀 μ•žβͺ
상계 = 쀑간 - 1 πŸ‘‰ 탐색곡간을 반πŸͺ“μœΌλ‘œ λ‚˜.κ°€.리

πŸ€“πŸ”Ž. 쀑간값 = λͺ©ν‘―κ°’
A[μ€‘κ°„μΈλ±μŠ€] = v πŸ‘‰ 탐색 끝 ❗

πŸ€“πŸ”Ž. 배열에 λͺ©ν‘―κ°’βŒ
탐색 반볡 πŸ‘‰ 상계와 ν•˜κ³„κ°€ 점점 κ°€κΉŒμ›Œμ Έμ„œ λ”λŠ” 확인할 값이 μ—†μ–΄μ§€λŠ” μˆœκ°„ λ°œμƒ.
상계 < ν•˜κ³„ πŸ‘‰ 탐색 STOP❗
탐색 쀑 상계 인덱슀 < ν•˜κ³„ 인덱슀 πŸ‘‰ λ°°μ—΄ λ‚΄ λͺ©ν‘―κ°’βŒ



∎ 이진 νƒμƒ‰μ˜ μž₯μ πŸ’—

πŸ˜‡ 쀑간값과 λͺ©ν‘κ°’ 비ꡐλ₯Ό λ°˜λ³΅ν•¨μœΌλ‘œμ„œ 유효 탐색 곡간 μ€„μž„.

πŸ˜‡ λ°μ΄ν„°μ˜ ꡬ쑰 정보λ₯Ό ν™œμš©ν•΄ νƒμƒ‰μ˜ νš¨μœ¨μ„±μ„ λ†’μž„.


*효율적 μ•Œκ³ λ¦¬μ¦˜ πŸ‘‰ μ •λ³΄πŸ€

🀍 λ°μ΄ν„°μ˜ μ •λ ¬ 기쀀을 μ•Œκ³  μžˆμ–΄μ•Ό 함. (for νƒμƒ‰μ˜ νš¨μœ¨μ„±)

🀍 But ν˜„μž¬ μ •λ ¬λœ 기쀀이 탐색 κΈ°μ€€κ³Ό λ‹€λ₯΄λ‹€λ©΄ 이진 νƒμƒ‰βŒ
 cf. μ§€μΆœκΈ°μž…μž₯
  μ–Έμ œ μ–΄λ””μ„œ μ–Όλ§ˆλ₯Ό μΌλŠ”μ§€ 번호 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ¦¬λœ μ§€μΆœκΈ°μž…μž₯ 있음. 
  μ§€μΆœμ˜ μˆœμ„œ 탐색 πŸ‘‰ 이진 탐색⭕ 
  μ§€μΆœκΈˆμ•‘μ΄λ‚˜ μ§€μΆœμΆœμ²˜μ˜ μˆœμ„œ 탐색 πŸ‘‰ 이진 νƒμƒ‰βŒ  πŸ‘‰ μ™„μ „ 탐색

이진 탐색 μ•Œκ³ λ¦¬μ¦˜ λ³€ν˜•

처음 λ³΄λŠ” 문제 or λ³€ν˜•λœ 문제 πŸ‘‰ μ•Œκ³ λ¦¬μ¦˜ 원리 μ΄ν•΄πŸŽ“ + μ‘°μ •πŸŽ°


∎ λ°μ΄ν„°μ˜ ꡬ쑰λ₯Ό ν™œμš©ν•΄ 탐색 곡간을 계속 절반으둜 μ€„μ—¬λ‚˜κ°€λŠ” 이진 νƒμƒ‰μ˜ κΈ°λ³Έ λ°œμƒμ„ 이해

∎ κΈ°λ³Έ λ°œμƒμ„ 톡해 μ§κ΄€μ μœΌλ‘œ 이진 탐색을 μ‘°μ •ν•˜μ—¬ νƒμƒ‰λ¬Έμ œ ν•΄κ²°
cf. μ›ν˜• λ°°μ—΄ νƒμƒ‰λ¬Έμ œπŸ‘πŸ‘Ž, μ’‹μ•„ν•˜λŠ” μ»€ν”Όμ˜ 적정 μ˜¨λ„ μ°ΎκΈ°πŸ‘πŸ‘Ž, λ³‘λšœκ»‘ κ²Œμž„πŸ‘πŸ‘Ž


λ‹€μŒ ν¬μŠ€νŒ…πŸ’Œ πŸ‘‰ 역좔적 탐색 + λ„ˆλΉ„ μš°μ„  탐색 + 깊이 μš°μ„  탐색

profile
μœ μ—°ν•˜κ³  μ˜μ—°ν•˜κ²Œ, κΎΈμ€€νžˆ

0개의 λŒ“κΈ€