|

Алгоритм поиска

В информатике , алгоритм поиска является любой алгоритм , который решает задачу поиска , а именно, для получения информации , хранящейся в некоторой структуре данных, или рассчитываются в пространстве поиска в виде проблемной области . Примеры таких структур включают, но не ограничиваются ими, Связанный список , структуру данных массива или дерево поиска . Соответствующий алгоритм поиска часто зависит от поиска данных, но также от любых априорных знаний о данных. Поиск также включает в себя алгоритмы, которые запрашивают структуру данных, например команду SQL SELECT. 

Алгоритмы поиска могут быть классифицированы на основе их механизма поиска. Линейные алгоритмы поискапроверяют каждую запись для одной, связанной с целевым ключом, линейным способом.  Двоичные или полупериодные поиски неоднократно нацеливают центр поисковой структуры и делят пространство поиска пополам. Алгоритмы поиска сравнения улучшаются при линейном поиске, последовательно удаляя записи на основе сравнения ключей до тех пор, пока не будет найдена целевая запись, и их можно применять к структурам данных с определенным порядком.  Алгоритмы цифрового поиска работают на основе свойств цифр в структурах данных, которые используют числовые ключи.  Наконец, хеширование напрямую отображает ключи к записям на основе хэш-функции.  поиск http вне линейного поиска требуют, чтобы данные были отсортированы каким-то образом.

Функции поиска также оцениваются на основе их сложности или максимального теоретического времени выполнения. Например, функции двоичного поиска имеют максимальную сложность O (log n ) или логарифмическое время. Это означает, что максимальное количество операций, необходимых для поиска цели поиска, является логарифмической функцией размера пространства поиска.

Для виртуальных поисковых пространств 

Важным подклассом являются локальные методы поиска , которые рассматривают элементы поискового пространства как вершины графа, с ребрами, определенными набором эвристик, применимыми к случаю; и отсканируйте пространство, перейдя от элемента к элементу по краям, например, согласно самому крутому спускам или лучшему первому критерию или в стохастическом поиске . Эта категория включает в себя большое разнообразие общихметаэвристических методов, таких как моделируемый отжиг , табу-поиск , А-команды и генетическое программирование , которые сочетают произвольные эвристики определенным образом.

Этот класс также включает в себя различные алгоритмы поиска дерева , которые рассматривают элементы как вершины дерева и пересекают это дерево в некотором специальном порядке. Примеры последних включают в себя исчерпывающие методы , такие как поиска в глубину и поиск в ширину , а также различных эвристических обрезке деревьев поиска методов , таких как возвратов и ветвей и границ . В отличие от общей метаэвристики, которая в лучшем случае работает только в вероятностном смысле, многие из этих методов поиска деревьев гарантированно найдут точное или оптимальное решение, если ему будет предоставлено достаточно времени. Это называется « полнотой ».

Другой важный подкласс состоит из алгоритмов для изучения игрового дерева многопользовательских игр, таких как шахматы или нарды , чьи узлы состоят из всех возможных игровых ситуаций, которые могут возникнуть в результате текущей ситуации. Цель в этих проблемах – найти ход, который дает наилучшие шансы на победу, принимая во внимание все возможные движения противника (ов). Подобные проблемы возникают, когда люди или машины должны принимать последовательные решения, результаты которых не полностью находятся под контролем, например, в руководстве роботом или вмаркетинге , финансовой или военной стратегии. Такая проблема – комбинаторный поиск – широко изучалась в контексте искусственного интеллекта .Примерами алгоритмов для этого класса являются алгоритм минимакса , альфа-бета-обрезка , * информационный поиск и алгоритм A * .

Для подструктур данной структуры 

Имя «комбинаторный поиск» обычно используется для алгоритмов, которые ищут конкретную подструктуру данной дискретной структуры , такую ​​как граф, строка , конечная группа и т. Д. Термин комбинаторная оптимизация обычно используется, когда целью является найти подструктуру с максимальным (или минимальным) значением некоторого параметра. (Так как субструктура обычно представлена ​​в компьютере набором целочисленных переменных с ограничениями, эти проблемы можно рассматривать как особые случаи удовлетворения ограничений или дискретной оптимизации, но их обычно формулируют и решают в более абстрактной настройке, где внутреннее представление явно не упоминается.)

Важным и широко изученным подклассом являются алгоритмы графа , в частности алгоритмы обхода графа , для поиска определенных подструктур в заданном графе, таких как подграфы , пути , схемы и т. Д. Примеры включают в себя алгоритм Дейкстры , алгоритм Крускала , в ближайший алгоритм соседа , и алгоритм Прима .

Другим важным подклассом этой категории являются алгоритмы поиска строк , которые ищут шаблоны в строках. Двумя известными примерами являются алгоритмы Бойера-Мура и Кнута-Морриса-Пратта и несколько алгоритмов, основанных на структуре данных дерева суффикса .

Поиск максимума функции 

В 1953 году американский статистик Джек Кифер разработал поиск Фибоначчи, который может быть использован для нахождения максимума унимодальной функции и имеет много других приложений в информатике.

Для квантовых компьютеров 

Существуют также методы поиска, предназначенные для квантовых компьютеров , такие как алгоритм Гровера , которые теоретически быстрее, чем линейный или грубый поиск даже без помощи структур данных или эвристики.

Leave a comment

Confirm that you are not a bot - select a man with raised hand: