관리 메뉴

πŸ–₯ dev-ruby

[μ•Œκ³ λ¦¬μ¦˜] 이진 탐색 (이뢄 탐색, Binary Search) λ³Έλ¬Έ

algorithm

[μ•Œκ³ λ¦¬μ¦˜] 이진 탐색 (이뢄 탐색, Binary Search)

ruby_s 2022. 1. 26. 13:41
728x90
λ°˜μ‘ν˜•
SMALL

이진 νƒμƒ‰ (이뢄 νƒμƒ‰, Binary Search)

  • 이진 탐색 μ•Œκ³ λ¦¬μ¦˜μ€ μ •λ ¬λ˜μ–΄ μžˆλŠ” λ¦¬μŠ€νŠΈμ—μ„œ 탐색 λ²”μœ„λ₯Ό μ ˆλ°˜μ”© μ’ν˜€κ°€λ©° 데이터λ₯Ό νƒμƒ‰ν•˜λŠ” 방법이닀.
  • 이진 탐색은 λ°°μ—΄μ˜ 데이터가 μ •λ ¬λ˜μ–΄ μžˆμ–΄μ•Όλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
  • λ³€μˆ˜ 3개(start, mid, end)λ₯Ό μ‚¬μš©ν•˜μ—¬ νƒμƒ‰ν•œλ‹€.
    μ°Ύκ³ μžν•˜λŠ” 데이터와 λ°°μ—΄μ˜ 쀑간(mid) μœ„μΉ˜μ— μžˆλŠ” 데이터λ₯Ό 반볡적으둜 λΉ„κ΅ν•΄μ„œ μ›ν•˜λŠ” 데이터λ₯Ό μ°ΎλŠ” 것이 μ΄μ§„ 탐색이닀.

 


 

이진 탐색(Binary Search)의 탐색 κ³Όμ •

μœ„μ˜ 데이터 μ§‘ν•©μ—μ„œ 8μ΄λž€ 데이터λ₯Ό νƒμƒ‰ν•˜λ„λ‘ ν•˜μž. μš°μ„  첫번째둜 λ°°μ—΄μ˜ 쀑간 μš”μ†Œλ₯Ό μ„ νƒν•œλ‹€.
mid = 7;

λ‘λ²ˆμ§Έλ‘œλŠ” 쀑간 κ°’κ³Ό μ°ΎμœΌλ €λŠ” 값을 μ„œλ‘œ λΉ„κ΅ν•œλ‹€.
λ§Œμ•½ μ°ΎμœΌλ €λŠ” 값이 쀑간 값보닀 μž‘λ‹€λ©΄ 쀑앙 μš”μ†Œμ˜ μ™Όμͺ½μ—μ„œ 쀑간 값을 λ‹€μ‹œ νƒν•˜κ³ , μ°ΎμœΌλ €λŠ” 값이 쀑간 값보닀 크닀면 였λ₯Έμͺ½μ—μ„œ 쀑간 값을 λ‹€μ‹œ νƒν•˜κ²Œ λœλ‹€.
그리곀 λ‹€μ‹œ 이진 탐색(Binary Search)과정을 κ±°μΉ˜λŠ” 것이닀.
μœ„μ˜ 경우, μ°ΎμœΌλ €λŠ” 값인 8이 쀑간값 7보닀 ν¬λ―€λ‘œ 쀑간 κ°’ μ™Όμͺ½μ— μžˆλŠ” λ°μ΄ν„°λŠ” 비ꡐ할 ν•„μš”κ°€ μ—†λŠ” 것이닀.
이제, 쀑간 κ°’ 7의 였λ₯ΈνŽΈμ—μ„œ 쀑간 값을 λ‹€μ‹œ νƒν•œλ‹€.

μ΄μ œλŠ” 쀑간 값이 9이고, λ‹€μ‹œ μ°ΎμœΌλ €λŠ” κ°’κ³Ό 쀑간 값을 λΉ„κ΅ν•˜κ²Œ λ©λ‹ˆλ‹€.
μ°ΎμœΌλ €λŠ” κ°’ 8, mid = 9;
8이 9보닀 μž‘μœΌλ―€λ‘œ 쀑간 κ°’ μ™ΌνŽΈμ—μ„œ 데이터λ₯Ό μ°Ύμ•„μ•Ό ν•œλ‹€.

그럼 λ‹€μ‹œ μ™Όμͺ½μ—μ„œ 쀑간 값을 μ„ νƒν•œλ‹€.
mid = 8;
남은 데이터 8이 쀑간 κ°’μœΌλ‘œ νƒν•΄μ§€κ²Œ λ˜λŠ”λ° μ°ΎμœΌλ €λŠ” 데이터와 μΌμΉ˜ν•˜λ―€λ‘œ 탐색을 λλ§ˆμΉœλ‹€.

 


이진 탐색 μ½”λ“œ (JavaScript)

: μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ κ΅¬ν˜„ν•œ 이진탐색 μ½”λ“œμ΄λ‹€.

function binarySearch(sortedArray, target) {
    let start = 0;
    let end = sortedArray.length - 1;
  
    while (start < end) {
      const mid = start + Math.floor((start + end) / 2);

      if (sortedArray[mid] === target)
        return mid;

      if (sortedArray[mid] < target)
        start = mid + 1;
      else
        end = mid - 1;
    }
  
    return -1;
}
  
const nums = [10, 40, 70, 50, 30, 90, 80, 20, 60];
const sortedNums = nums.sort();

console.log(binarySearch(sortedNums, 40));
> 3

console.log(binarySearch(sortedNums, 100));
> -1



 

 

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