Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология программирования / ИТ / Лекции_Технология_прогр.doc
Скачиваний:
112
Добавлен:
17.05.2015
Размер:
848.38 Кб
Скачать

Алгоритмы поиска наименьшего и наибольшего элемента

Одна из часто встречающихся на практике задач – поиск наибольшего или наименьшего элемента в строке или столбце таблицы, а также позиции (номера) этого элемента в строке (столбце).

Рассмотрим программу для решения этой задачи. Пусть таблица находится в объекте StringGrid1 и содержит целые числовые данные. Тогда программа нахождения наибольшего элемента строки j может выглядеть примерно так:

max:= StrToInt(StringGrid1.Cells[0,j]);

{сначала считаем, что первый элемент и есть наибольший}

n_max:=0;

{а это его номер}

for i:=1 to StringGrid1.ColCount-1 do

if StrToInt(StringGrid1.Cells[i,j])>max

{если очередной элемент оказался больше max}

then begin

max:= StrToInt(StringGrid1.Cells[i,j]);

{max изменился}

n_max:=i;

{его номер запомнился}

end;

Аналогично будет выглядеть программа поиска наименьшего элемента, а также программы поиска наибольшего и наименьшего элемента столбца.

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

max:= StrToInt(StringGrid1.Cells[0,0]);

{сначала считаем, что первый элемент и есть наибольший}

col_max:=0;

{это номер его столбца}

row_max:=0;

{а это номер его строки}

for i:=1 to StringGrid1.ColCount-1 do

for i:=1 to StringGrid1.ColCount-1 do

if StrToInt(StringGrid1.Cells[i,j])>max

{если очередной элемент оказался больше max}

then begin

max:= StrToInt(StringGrid1.Cells[i,j]);

{max изменился}

col_max:=i; row_max:=j;

{ номера его столбца и строки запомнились}

end;

Аналогично будет выглядеть программа поиска наименьшего элемента таблицы.

§11. Алгоритмы поиска и сортировки. Понятие вычислительной сложности алгоритма

При решении многих задач возникает необходимость определить, содержит ли массив определенную информацию или нет. Например, проверить, есть ли в списке студентов фамилия Петров. Задачи такого типа называются поиском в массиве.

Для организации поиска в массиве могут быть использованы различные алгоритмы. Наиболее простой - это алгоритм простого перебора.

Алгоритм простого перебора

Поиск осуществляется последовательным сравнением элементов массива с образцом до тех пор, пока не будет найден элемент, равный образцу, или не будут проверены все элементы.

Фрагмент программы, реализующий этот алгоритм, может выглядеть примерно так:

found := false; {образец пока не найден}

i:=1; {начинаем просмотр с первого элемента списка}

repeat

{просматриваем список студентов от начала до конца}

if stud[i] = ‘Петров’

then found:=true {нашли образец – завершаем поиск}

else i:=i+1; {пока не нашли, переходим к следующему}

until found or (i > n);

{выходим из цикла - либо нашли, либо список кончился}

if found

then Label1.Caption := ‘Номер по списку ’+IntToStr(i)

else Label1.Caption := ‘Образец не найден’;

Алгоритм простого перебора применяется, если элементы массива не упорядочены.

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

Очевидно, что чем больше элементов в массиве, тем дольше в среднем программа будет искать необходимый элемент.

Более точно, во сколько раз увеличивается число элементов массива, во столько раз увеличивается среднее время поиска, т. е. зависимость времени от длины массива линейная.

Соседние файлы в папке ИТ