Навигация по отсортированным массивам: глубокое погружение в двоичный поиск в Ruby, JavaScript и Python

Двоичный поиск — это алгоритм поиска, который находит положение целевого значения в отсортированном массиве или списке. Он значительно более эффективен, чем линейный поиск, особенно для больших наборов данных, поскольку его временная сложность равна O(log n). Ниже мы рассмотрим, как реализовать двоичный поиск в Ruby, Python и JavaScript.

Алгоритм двоичного поиска

Алгоритм двоичного поиска работает следующим образом:

  1. Найдите средний элемент массива.
  2. Если средний элемент равен целевому значению, верните индекс.
  3. Если целевое значение меньше среднего элемента, повторите поиск с левой половиной массива.
  4. Если целевое значение больше среднего элемента, повторите поиск с правой половиной массива.
  5. Если целевое значение отсутствует в массиве, верните -1 или какой-либо индикатор неудачи.

Рубиновая реализация

В Ruby вы можете реализовать двоичный поиск следующим образом:

def binary_search(array, target)
  low = 0
  high = array.length - 1
  
  while low <= high
    mid = (low + high) / 2
    
    if array[mid] == target
      return mid
    elsif array[mid] < target
      low = mid + 1
    else
      high = mid - 1
    end
  end
  
  return -1 # Return -1 if target not found
end

Реализация Python

В Python двоичный поиск можно реализовать следующим образом:

def binary_search(array, target):
    low = 0
    high = len(array) - 1
    
    while low <= high:
        mid = (low + high) // 2
        
        if array[mid] == target:
            return mid
        elif array[mid] < target:
            low = mid + 1
        else:
            high = mid - 1
            
    return -1  # Return -1 if target not found

Реализация JavaScript

В JavaScript вы можете реализовать двоичный поиск следующим образом:

function binarySearch(array, target) {
    let low = 0;
    let high = array.length - 1;
    
    while (low <= high) {
        let mid = Math.floor((low + high) / 2);
        
        if (array[mid] === target) {
            return mid;
        } else if (array[mid] < target) {
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }
    
    return -1; // Return -1 if target not found
}

Примеры использования

Вот как вы можете использовать функцию двоичного поиска на каждом языке:

Рубин

array = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
target = 15
puts binary_search(array, target) # Output: 7

Питон

array = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
target = 15
print(binary_search(array, target)) # Output: 7

JavaScript

let array = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
let target = 15;
console.log(binarySearch(array, target)); // Output: 7

Заключение

Двоичный поиск — это высокоэффективный алгоритм поиска в отсортированных массивах или списках с временной сложностью O(log n). Реализация двоичного поиска в разных языках программирования, таких как Ruby, Python и JavaScript, предполагает схожую логическую структуру с небольшими синтаксическими различиями. Понимая основную логику поиска среднего элемента и сужая диапазон поиска, вы можете легко адаптировать реализацию к различным языкам программирования и вариантам использования.