Линейный поиск
function m1(arr,target){ for(let i in arr){ if(i==target){ return i; } } return -1; } let arr = [12,3,4,54,6,77,8]; let target = 6; console.log(m1(arr,target));
Временная сложность линейного поиска
Временная сложность линейного поиска в лучшем случае
Если наше целевое значение находится в начале массива, алгоритм всегда будет работать с постоянным временем, O(1).
Временная сложность линейного поиска в наихудшем случае
Если наша цель — последний элемент в массиве, то алгоритм должен будет сделать n сравнений (n — длина входного массива). Это означает, что нотация Big O линейного поиска — это Big O(n) — линейная временная сложность.
Временная сложность линейного поиска в среднем случае
Если наш целевой элемент находится где-то в середине массива, то временная сложность будет примерно O(n/2), что упрощается до O(n) — линейное время.
Пространственная сложность линейного поиска
Линейный поиск имеет пространственную сложность O(1) — постоянное пространство. Он не использует никаких вспомогательных структур данных для поиска целевого значения.
Когда использовать линейный поиск
Линейный поиск — лучшее, что мы можем сделать при поиске в несортированных массивах, таких как [2, 3, 1].
Двоичный поиск
Двоичный поиск — это поисковый алгоритм для нахождения позиции элемента в отсортированном массиве.
В этом подходе элемент всегда ищется в середине части массива.
Бинарный поиск можно реализовать только в отсортированном списке элементов. Если элементы еще не отсортированы, нам нужно сначала отсортировать их.
Алгоритм бинарного поиска может быть реализован двумя способами, которые обсуждаются ниже.
- Итерационный метод
- Рекурсивный метод
let arr = [12,13,14,15]; function m1(arr,target){ let min = 0; let max = arr.length; for(let i in arr){ let mid = Math.floor((max+min)/2); if(arr[mid]==target){ return mid; } if(arr[mid] < target){ min = mid + 1; }else if(arr[mid] > target){ max = mid - 1; } } return -1; } console.log(m1(arr,15));
Бинарный поиск — это алгоритм быстрого поиска со сложностью времени выполнения Ο(logn).
Алгоритм поиска работает по принципу разделяй и властвуй. Для правильной работы этого алгоритма сбор данных должен быть в отсортированном виде.
Двоичный поиск ищет конкретный элемент, сравнивая самый средний элемент коллекции. Если совпадение происходит, возвращается индекс элемента. Если средний элемент больше, чем элемент, то элемент ищется в подмассиве слева от среднего элемента. В противном случае элемент ищется в подмассиве справа от среднего элемента. Этот процесс продолжается и в подмассиве, пока размер подмассива не уменьшится до нуля.
Псевдокод бинарного поиска
Procedure binary_search A ← sorted array n ← size of array x ← value to be searched Set lowerBound = 1 Set upperBound = n while x not found if upperBound < lowerBound EXIT: x does not exists. set midPoint = lowerBound + ( upperBound - lowerBound ) / 2 if A[midPoint] < x set lowerBound = midPoint + 1 if A[midPoint] > x set upperBound = midPoint - 1 if A[midPoint] = x EXIT: x found at location midPoint end while end procedure
Сортировка массива в JavaScript
let data = [12,34,13,1,434,6,56]; data = data.sort(function(a,b){return a-b}); console.log(data);
Двоичный поиск по ответу
это концепция, в которой мы реализуем бинарный поиск в несортированном массиве