Какие знаешь алгоритмы поиска

Ответ

Линейный поиск — простейший алгоритм, проверяющий элементы последовательно. Сложность O(n).
Пример:

function linearSearch(arr, target) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === target) return i;
  }
  return -1;
}

Бинарный поиск — работает на отсортированных массивах, делит диапазон пополам. Сложность O(log n).
Пример:

function binarySearch(arr, target) {
  let left = 0, right = arr.length - 1;
  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (arr[mid] === target) return mid;
    if (arr[mid] < target) left = mid + 1;
    else right = mid - 1;
  }
  return -1;
}

Также существуют:

  • Поиск в глубину (DFS) и в ширину (BFS) для графов
  • Интерполяционный поиск — улучшенный бинарный для равномерно распределенных данных
  • Поиск Фибоначчи — вариант бинарного с делением по числам Фибоначчи

Ответ 18+ 🔞

Да ты посмотри, какие алгоритмы поиска придумали, блядь! Сидят, понимаешь, умники, и думают, как бы нам этот процесс ускорить, а то народ тупит, как Герасим из "Муму", нихуя не соображает.

Вот, например, линейный поиск — это как ты в тёмной комнате, блядь, ищешь зажигалку. Ползаешь на коленях, щупаешь каждый хуй, каждый окурок, пока не наткнёшься на то, что надо. Сложность у него, сука, O(n). То есть чем больше в комнате хлама, тем дольше ищешь, логично же, ёпта!

function linearSearch(arr, target) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === target) return i;
  }
  return -1;
}

А вот бинарный поиск — это уже для продвинутых, для тех, у кого в комнате хоть какой-то порядок, всё по полочкам разложено. Ты не ползаешь, а сразу смотришь на середину полки: "Ага, мне нужна книга про то, как не быть мудаком. Она должна быть где-то тут". И так половинку за половинкой отбрасываешь, пока не найдёшь. Скорость — просто овердохуищная, O(log n)!

function binarySearch(arr, target) {
  let left = 0, right = arr.length - 1;
  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (arr[mid] === target) return mid;
    if (arr[mid] < target) left = mid + 1;
    else right = mid - 1;
  }
  return -1;
}

Ну а дальше, блядь, понеслась: DFS и BFS для графов — это когда тебе надо не просто книгу найти, а выяснить, кто из твоих друзей знаком с тем чуваком, у которого есть эта книга. Одни вглубь копают, другие вширь шастают.

Интерполяционный поиск — это типа умный бинарный. Он не просто тупо середину берёт, а прикидывает: "Раз данные распределены равномерно, то нужный элемент, наверное, где-то вот тут, ближе к концу". Хитрая жопа, короче.

А поиск Фибоначчи — это вообще ёперный театр! Делит массив не пополам, а по каким-то своим, блядь, золотым сечениям, числам Фибоначчи. Ну, для эстетов, которым простой бинарный кажется слишком примитивным, как линейный поиск в отсортированном массиве.

Вот так вот, блядь. Выбирай алгоритм под задачу, а не тычь во всё подряд, как слепой крот. Иначе проебёшь кучу времени, а результата — ноль, ебать.