Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЭ_У_Студентам / ТРПС_2010.doc
Скачиваний:
56
Добавлен:
05.06.2015
Размер:
4 Mб
Скачать
  1. Алгоритм линейного поиска в одномерном массиве. Зависимость затрат на линейный поиск в среднем и в худшем случае от числа элементов массива. Улучшение линейного поиска: поиск с барьером.

Массив - ограниченная упорядоченная совокупность однотипных данных, которая характеризуется именем, размером (количеством элементов) и размерностью.

Если за каждым элементом массива закреплен только один его порядковый номер, такой массив называется линейным (одномерным).

Поиск - просмотр множества элементов массива с целью …???

Пусть множество из N элементов задано в виде массива: A: ARRAY[0..N-1] of item

0

..

N-1

Цель алгоритма линейного поиска в одномерном массиве - обнаружение заданного значения.

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

  • Условия окончания поиска:

  1. Элемент найден.

  2. Просмотрен весь массив и совпадений не обнаружено.

Фрагмент кода поиска элемента x в массиве из N элементов:

i:=0;

WHILE (I<N) AND (a[I]<>x) DO

INC(I);

По алгоритму: если элемент найден, то он найден с минимально возможным индексом. Если не найден, цикл завершится, когда i достигнет значения N.

В худшем случае (искомый элемент – последний /не найден) - просмотрено N ключей. Если элементы поступают на вход с равной вероятностью, среднее число просмотренных ключей = (N+1)/2 (при больших N учитываем порядок ~ N/2).

  • Для выполнения программы требуется (см. сноски в коде )

  1. при удачном варианте - 3i единиц времени (i - число просмотренных ключей)

  2. при неудачном поиске - 3N+2 единиц / 3N+3 при вычислении по полной схеме).

Улучшение линейного поиска: поиск с барьером

В конец массива помещается дополнительный элемент с искомым значением x (барьер), что гарантирует нахождение результата.

...

...

...

X

0

..

N-1

N

Теперь массив задается как

a:ARRAY[0..N] of item

Фрагмент кода поиска элемента x в массиве:

a[N]:=x; { искомое значение }

i:= 0;

WHILE (a[I]<>x) DO

INC(I);

Поиск всегда удачен, для выполнения программы потребуется 2i+1 единиц времени.

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

Массив - ограниченная упорядоченная совокупность однотипных данных, которая характеризуется именем, размером (количеством элементов) и размерностью.

Если за каждым элементом массива закреплен только один его порядковый номер, такой массив называется линейным (одномерным).

Поиск - просмотр множества элементов массива с целью …???

Наша задача– минимизация количества просмотров.

A : Array [0..N-1] of item

item – любой тип

Отсортированный массив – упорядоченный по возрастанию или убыванию элементов.

Двоичный (бинарный) поиск (или метод деления пополам) — алгоритм нахождения заданного значения в отсортированном массиве.

Например, дан массив: 1 2 3 4 5 9 11. Ищем 8.

Для этого делим массив на 2 части: 5 – середина массива, меньше 8, поэтому ищем в правой части и там производим те же действия.

Таким образом, задаются границы массива: левая и правая.

Можно более подробно расписать пример

var

A: array [0..N-1] of integer;

L,R,m: integer;

Found: boolean;

Begin

L:= 0;

R:=N-1;

Found:=false;

While (L<R) and (not Found) do

Begin

m:=(L+R) div 2;

if a[m] =x then

Found:=true

Else if a[m] < x then

L:= m+1

Else R:= m-1;

End;

  • ОЦЕНКА (число просмотренных элементов):

Для максимального и среднего случая – логарифмическая зависимость.

- минимальная = 1

- максимальная = log2N можно вывести формулу

- среднее = log2N-1 выводить формулу НЕ НУЖНО: займет много времени