В информатике поиск – это “процесс поиска элемента с заданными свойствами из коллекции элементов”. Элементом может быть что угодно – от сохраненной записи или элемента массива до элементов других пространств поиска.
Но зачем нам нужен Поиск?
Ответ таков – найти данные, которые вы ищете, из большого набора данных. Например, поиск номера телефона вашего друга из длинного списка контактов можно упростить с помощью алгоритмов поиска. Здесь список контактов представляет собой набор элементов и номер вашего друга – это данные с указанным свойством.
Некоторыми примерами алгоритмов поиска являются Линейный поиск, Двоичный поиск, Интерполяционный поиск и т.д. Здесь мы обсудим Линейный поиск.
Линейный поиск – это простой алгоритм поиска, который последовательно проверяет каждый элемент в коллекции. Если совпадение найдено, товар возвращается, в противном случае поиск продолжается до конца коллекции. Предположим, что вам дан массив, в котором порядок элементов неизвестен. В этом случае вам придется просмотреть каждый элемент массива, чтобы найти элемент с указанным свойством.
Алгоритм может быть написан следующим образом:
Дан массив Arr и элемент , который нужно найти данные .
Проверьте первый элемент. Если оно равно данным, верните позицию первого элемента. В противном случае проверьте наличие следующего элемента.
Проверяйте до тех пор, пока не будет сравнен последний элемент.
Если данные не найдены в массиве, верните значение -1. Этот тип линейного поиска называется неупорядоченным линейным поиском
public int unorderedLinearSearch(int[] Arr, int data) { for(int i=0; i
Временная сложность: O(n), в худшем случае мы сканируем весь массив. Сложность пространства: O(1)
Теперь, если массив Arr отсортирован, т.е. мы знаем порядок элементов, мы можем выполнить поиск следующим образом:
Этот случай называется упорядоченным линейным поиском
public int orderedLinearSearch(int[] Arr, int data) { for(int i=0; idata) return -1; } return -1; }
Мы можем дополнительно оптимизировать временную сложность для случаев, когда данные являются:
- в последней позиции в массиве от O(n) до O(1) или,
- отсутствует в массиве, от O(n) до (n/2) путем проверки элементов слева и справа.
public int optimiseLinearSearch(int[] Arr, int data) { int left = 0; int length = Arr.length; int right = length - 1; int position = -1; for (left = 0; left <= right;){ if (Arr[left] == search_Element) { position = left; System.out.println(position); break; } if (Arr[right] == search_Element) { position = right; System.out.println(position); break; } left++; right--; } if (position == -1) System.out.println("data not found"); } }
Поздравляю! Теперь вы знаете, что такое алгоритмы поиска и как реализован алгоритм линейного поиска.
В следующем блоге мы рассмотрим еще несколько концепций структур данных и алгоритмов!
Соединитесь со мной Твиттер LinkedIn
Спасибо Вам за чтение! 😃
Оригинал: “https://dev.to/priya730/data-structure-and-algorithms-linear-search-48g3”