В информатике поиск – это “процесс поиска элемента с заданными свойствами из коллекции элементов”. Элементом может быть что угодно – от сохраненной записи или элемента массива до элементов других пространств поиска.
Но зачем нам нужен Поиск?
Ответ таков – найти данные, которые вы ищете, из большого набора данных. Например, поиск номера телефона вашего друга из длинного списка контактов можно упростить с помощью алгоритмов поиска. Здесь список контактов представляет собой набор элементов и номер вашего друга – это данные с указанным свойством.
Некоторыми примерами алгоритмов поиска являются Линейный поиск, Двоичный поиск, Интерполяционный поиск и т.д. Здесь мы обсудим Линейный поиск.
Линейный поиск – это простой алгоритм поиска, который последовательно проверяет каждый элемент в коллекции. Если совпадение найдено, товар возвращается, в противном случае поиск продолжается до конца коллекции. Предположим, что вам дан массив, в котором порядок элементов неизвестен. В этом случае вам придется просмотреть каждый элемент массива, чтобы найти элемент с указанным свойством.
Алгоритм может быть написан следующим образом:
Дан массив 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; i data)
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”