Рубрики
Без рубрики

Линейный поиск в JavaScript

В этой статье мы посмотрим на один из простейших алгоритмов поиска – линейный поиск в JavaScript. Мы реализуем регулярный, а также линейный поиск всех вхождений элемента.

Автор оригинала: Abhilash Kakumanu.

Вступление

Поиск, в контексте информатики, является процессом поиска определенного элемента в данном списке/массиве. Если мы уделяем пристальное внимание, мы можем найти алгоритмы поиска повсюду.

Рассмотрим процесс входа в веб-сайт. Введенные электронные письма и пароль ищут на основе существующих пар клавишных элементов в базе данных, чтобы подтвердить пользователь.

В этой статье давайте посмотрим на самый базовый алгоритм для поиска по данному списку элементов – Линейный поиск Отказ

Понимание линейного поиска

Алгоритм поиска линейного поиска – это набор инструкций для прохождения данного списка и проверяет каждый элемент в списке, пока мы не найдем никого элемента. Технический термин для элемента, который мы ищем – ключ Отказ

Алгоритм идет с самого левого левого (или стартового) элемента и продолжает поиск, пока он либо не найдет желаемый элемент или не проходит через все элементы в списке.

Если элемент найден, мы вернем позицию (или индекс ) элемента. Если элемент, который мы ищем, не существует в списке, мы вообще возвращаем -1 Отказ

Реализация линейного поиска в JavaScript

Мы можем пройти через данный список, используя для петля. Давайте посмотрим на реализацию линейного поиска:

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

Здесь мы проходим все элементы в массиве и сравниваем каждый элемент с ключом. Если мы найдем матч, мы возвращаем индекс элемента. В нашем случае переменная Я Отслеживает отслеживание того, где мы находимся в массиве, и если мы найдем матч, мы возвращаем текущее значение для Я Отказ

В случае, если элемент не существует в нашем списке, LinearSearch Функция не будет возвращать никаких Я Значение из цикла. Мы просто return -1 После петли, чтобы показать, что функция не нашел нужный элемент.

Глобальный линейный поиск

В предыдущей реализации мы возвращаем значение после того, как мы столкнулись с первым возникновением элемента, который мы ищем ( Key ). Но что, если мы хотим по индексам всех вхождений данного элемента?

Вот где находится глобальный линейный поиск. Это вариант линейного поиска, где мы ищем несколько вхождений данного элемента.

Давайте посмотрим на реализацию мирового линейного поиска:

function globalLinearSearch(arr, key){
    let results = []
    for(let i = 0; i < arr.length; i++){
        if(arr[i] === key){
            results.push(i)
        }
    }
    // If results array is empty, return -1
    if(!results){
        return -1
    }

    return results
}

В этом случае вместо немедленно возвращая индекс подходящего элемента, мы храним его в массиве. В конце концов, мы возвращаем массив индексов.

Эффективность линейного поиска

Линейный поиск – это классический пример Brute-Force алгоритм. Это означает, что алгоритм не использует какую-либо логику, чтобы попытаться сделать то, что он должен быстро, или как-то уменьшить диапазон элементов, в которых он ищет ключ Отказ Другие алгоритмы поиска стремятся сделать это более эффективно каким-либо предварительной обработкой списка/массива, например, сортируя его.

Сложность времени линейного поиска – O (n) , где N Количество элементов в списке мы ищем. Это потому, что мы всегда рассматриваем худший случай при расчете сложности времени. В случае линейного поиска (как с большинством алгоритмов поиска) наихудший случай возникает, когда элемент не существует в списке. В этой ситуации нам нужно пройти все N Элементы, чтобы определить, что элемент не там.

Заключение

В этой статье мы видели логику линейного поиска, а затем, используя эти знания, мы реализовали алгоритм в JavaScript. Мы также посмотрели на момент сложности для алгоритма линейного поиска.

Это, безусловно, алгоритм поиска Shrips, который не использует какую-либо логику, чтобы попробовать и отменить определенный диапазон для поиска или сосредоточиться на скорости.