Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 7_ОАП.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
79.36 Кб
Скачать

Лекция 7. Поиск в массиве.

  1. Задача поиска элемента в последовательности

  2. Линейный поиск.

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

  4. Асинхронный поиск.

Методы обработки последовательности однотипных элементов зависят от формы представления последовательности в памяти компьютера. После­до­ва­тельность может быть реализована, например, в виде одномерного массива, списка, строки (если это последовательность символов), файла. Начнем изучение методов поиска и сортировки одномерных массивов.

1. Поиск элемента в массиве

Задача поиска элемента в последовательности - одна из важных задач программирования как с теоретической, так и практической точек зрения. Вот ее формулировка:

Пусть A = {a1, a2, ...} - последовательность однотипных элементов и b - некоторый элемент, обладающий свойством P. Требуется найти место элемента b в последовательности А. Поскольку пред­ставление последовательности в памяти может быть осуществлено в виде массива, задачи могут быть уточнены как задачи поиска элемента в массиве A. Как мы видим, и конкретная постановка задачи, и, следовательно, алгоритм ее решения зависит от рассматриваемого свойства Р. Например:

1. Найти максимальный элемент массива;

2. Найти данный элемент массива;

3. Найти k-тый по величине элемент массива;

Наиболее простые и часто оптимальные алгоритмы основаны на последовательном просмотре массива A с проверкой свойства P на каждом элементе. Этот метод называют линейным просмотром (поиском).

2. Линейный поиск в массиве

Пример 1. Поиск минимального элемента в массиве.

Рrogram MinItem;

Const n = 100;

Type Mas= Array [1..n] of Real;

Var A : Mas;

Min, Item : Real; i : Integer;

Begin

{Блок ввода массива}

Min := A[1];

For i := 2 to n do

If Min > A[i] then Min := A[i]

{Вывод значения Min}

End.

Переменная Item введена для того, чтобы избежать повторных вычислений индексного выражения в A[i].

Рrogram MinItem;

Const n = 100;

Var A : Array [1..n] of Real;

Min, Item : Real; Index, i : Integer;

Begin

{Блок ввода массива}

Index := 1; Min := A[1];

For i := 2 to n do

begin

Item := A[i];

If Min > Item then

begin

Index := i;

Min := Item

end

end;

{Вывод значения Index}

End.

Еще раз обращаем внимание на то, что основной задачей поиска является определение места элемента в последовательности, а не его значение.

Для наглядного представления массива часто полезно изображать его в системе координат Индекс – Величина элемента.

Рис 1. Поиск минимального элемента в массиве методом линейного просмотра.

Min – текущее значение искомого элемента. Index – его номер в массиве.

Перед первым шагом просмотра Min = A[1], а Index = 1. На i-том шаге A[i] срав­ни­ва­ется с min. Если A[i] > min, значение min не меняется. На рисунке изображена ситуация, в которой на j-том шаге про­смотра A[j] < min, поэтому min принимает значение A[j], а Index – значение j. Просмотр заканчивается через n-1 шаг.