😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[μ•Œκ³ λ¦¬μ¦˜ μœ„ν•œ ν•œλ°œμ§ λ‘λ°œμ§πŸΎ] 이진탐색 λ³Έλ¬Έ

πŸ‘©‍πŸ’» 컴퓨터 ꡬ쑰/Algorithm

[μ•Œκ³ λ¦¬μ¦˜ μœ„ν•œ ν•œλ°œμ§ λ‘λ°œμ§πŸΎ] 이진탐색

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 6. 26. 13:20
728x90
λ°˜μ‘ν˜•

<λ³Έ λΈ”λ‘œκ·ΈλŠ” μ½”λ”©λ¬Έ codingmoon λ‹˜μ˜ 유튜브λ₯Ό μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•˜λ©° μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ :-)>

=> 개발자 ν•„μˆ˜ μ•Œκ³ λ¦¬μ¦˜ #3. μ΄μ§„탐색 μ‰½κ³  κ°„λ‹¨ν•˜κ²Œ

 

🫧 이진탐색

: λΆ„ν•  정볡 νŒ¨ν„΄μ„ 지ν–₯ν•˜λŠ” 탐색 μ•Œκ³ λ¦¬μ¦˜

: 인풋 λ°°μ—΄/데이터가 μ •λ ¬λ˜μ–΄ μžˆλŠ” μ‘°κ±΄ν•˜μ— 적용됨

 

🫧 μ΄μ§„탐색 vs μ„ ν˜•νƒμƒ‰

이진탐색 μ„ ν˜•νƒμƒ‰
worst : O(log n)
맀회 자료λ₯Ό 반으둜 λ‚˜λˆ κ°€λ©° 탐색 (μ„ ν˜•λ³΄λ‹€ 빠름)
worst : O(n)
순차적인 탐색 νŒ¨ν„΄ 
인풋 데이터 μ •λ ¬
λΆ„ν•  정볡 μœ ν˜•
μž‘κ±°λ‚˜ 쀑간 μ‚¬μ΄μ¦ˆμ˜ 데이터셋에 적절 

 

🫧 이진탐색 원리

1) L, M,  (쀑간 지점), R 포인트 μ€€λΉ„

2) λ°°μ—΄μ˜ M μˆ˜κ°€ μ°ΎλŠ” μˆ«μžμ™€ κ°™λ‹€λ©΄ M 리턴

μΆ”μΈ‘ μˆ«μžκ°€ μ°ΎλŠ” μˆ«μžλ³΄λ‹€ μž‘λ‹€λ©΄ L을 M + 1 μœ„μΉ˜λ‘œ 이동 (쒌츑 μˆ«μžλ“€ νƒμƒ‰μ—μ„œ μ œμ™Έ)

μΆ”μΈ‘ μˆ«μžκ°€ μ°ΎλŠ” μˆ«μžλ³΄λ‹€ 크닀면 R을 M - 1 μœ„μΉ˜λ‘œ 이동 (우츑 μˆ«μžλ“€ νƒμƒ‰μ—μ„œ μ œμ™Έ)

3) 반볡

const num = [1, 5, 13, 17, 32, 39, 45, 50]

function binarySearch(arr: number[], target: number) {
	let left = 0;
    let right = arr.length - 1;
    
    while (left <= right) {
    	let middle = Math.floor((left - right) / 2)
        
        if (arr[middle] === target) {
        	// found!
            return middle
        } else if (arr[middle] < target) {
        	left = middle + 1
        } else if (arr[middle] > target) {
        	right = middle - 1
        }
    }
    return -1;
}

binarySearch(nums, 45)	// 6
binarySearch(nums, 55)	// -1

 

728x90
λ°˜μ‘ν˜•
Comments