Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Поиск.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
127.88 Кб
Скачать

Содержание

  1. Понятие поиска

  2. Исчерпывающий поиск

  3. Бинарный поиск

  4. Бинарное дерево поиска

  5. Метод ветвей и границ

  6. Список использованной информации

1. Понятие поиска.

Поиск — обработка некоторого множества данных с целью выявления подмножества данных, соответствующего критериям поиска. Все алгоритмы поиска делятся на:

  • поиск в неупорядоченном множестве данных;

  • поиск в упорядоченном множестве данных.

Упорядоченность – наличие отсортированного ключевого поля.

2. Исчерпывающий поиск.

Исчерпывающий поиск (линейный, последовательный) – простейший алгоритм поиска. Массив просматривается последовательно от первого до последнего элемента.  Наихудший случай - слова нет в массиве (не найдено) – вывод можно сделать после просмотра всего массива.  Достоинство – простота реализации. Недостаток – большое время. Сложность алгоритма О(n).

Алгоритм последовательного поиска:

Шаг1. Полагаем, что значение переменной цикла i=0.

Шаг2. Если значение элемента массива x[i] равно значению ключа key, то возвращаем значение, равное номеру искомого элемента, и алгоритм завершает работу. В противном случае значение переменной цикла увеличивается на единицу i=i+1.

Шаг3. Если i<k, где k-число элементов массива х, то выполняется шаг2, в противном случае – работа алгоритма завершена и возвращается значение равное -1. При наличии в массиве нескольких элементов со значением key алгоритм находит только первый из них (с наименьшим индексом).

#include <iostream>

using namespace std;

typedef int DType;

int SeqSearch(DType *, int, DType);

int main() {

int size, point;

DType key;

cout << "Введите размер массива" << endl;

cin >> size;

DType *k = new DType[size];

cout << "Введите искомый элемент" << endl;

cin >> key;

//заполнение массива через цикл for//

point = SeqSearch(k, size, key);

if (point == -1) // если функция вернула -1, такого элемента в массиве нет

cout << "Элементов равных " << key << " в массиве нет";

else // иначе выводим полученный индекс элемента

cout << "Элемент равный " << key << " имеет индекс " << point;

return 0;

}

int SeqSearch(DType *k, int n, DType key)

{

for (int i = 0; i < n; i++) // просматриваем все элементы в цикле

{

if (k[i] == key) // если находим элемент со значением key,

return i; // возвращаем его индекс

}

return -1; // возвращаем -1 - элемент не найден

}

3. Бинарный поиск.

Алгоритм двоичного поиска используется только в упорядоченных массивах по требуемому свойству.

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

Количество шагов поиска определится как log2n, где n-количество элементов.На каждом шаге осуществляется поиск середины отрезка по формуле mid = (left - right)/2

Если искомый элемент равен элементу с индексом mid, поиск завершается. В случае если искомый элемент меньше элемента с индексом mid, на место mid перемещается правая граница рассматриваемого отрезка, в противном случае - левая граница.

  • Перед началом поиска устанавливаем левую и правую границы массива: left и right

  • Ищем индекс середины массива (округляем в меньшую сторону): mid = (left+right)/2

  • Если искомый элемент выше середины то сдвигаем нижнюю границу left = mid +1

  • Если искомый элемент ниже середины то сдвигаем верхнюю границу right = mid -1

  • Если искомый элемент равен элементу посередине то возвращаем значение.

  • Повторяем пока не найдем нужный элемент в массиве, либо не выведем сообщение что такого элемента нет.

#include <iostream>

using namespace std;

typedef int DType;

int BinSearch(DType *, int, int, DType);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]