КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Линейный поиск
Алгоритмы поиска информации Пусть имеется некоторый набор данных и требуется определить, где в этом наборе находится заданный элемент (и есть ли он в наборе). Такая задача называется задачей поиска. Большинство задач поиска сводится к поиску в таблице (массиве) элемента с заданным значением.
Пример
Написать программу поиска элемента x в массиве из n элементов. Значение элемента x вводится с клавиатуры.
Решение
Пусть имеются следующие описания: Const n = 10; { размерность массива } Var a: array (1...n) Of Integer; { массив из n элементов целого типа } x: Integer; { искомый элемент целого типа } В данном случае известно только значение разыскиваемого элемента, никакой дополнительной информации о нем или о массиве, в котором его надо искать, нет. Проверка одного элемента не дает никакой информации об остальных. Поэтому для решения задачи разумно применить очевидный метод - последовательный просмотр массива и сравнение значения очередного рассматриваемого элемента с данным. Если значение очередного элемента совпадает с x, то запомним его номер в переменной к. For i: =1 To n Do If a[i] = x Then k: = i; Этот способ решения поставленной задачи, безусловно, приводит к цели, но обладает рядом существенных недостатков: · если значение x встречается в массиве несколько раз, то найдено будет последнее из них; · после того, как нужное значение уже найдено, массив просматривается до конца, то есть всегда выполняется n сравнений. Разумно прекратить просмотр сразу после обнаружения заданного элемента. Так как в этом случае число повторений не известно, необходимо использовать цикл с предусловием. В результате: - либо будет найден искомый элемент, то есть найдется такой индекс i, что а [ i ] = x; - либо будет просмотрен весь массив, и искомый элемент не обнаружится. Таким образом, поскольку нужно продолжать поиск до обнаружения искомого элемента или до конца массива, условие окончания цикла может выглядеть так: While (i <= n) And (a[ i ]<> x) Do Inc (i);
Примечание: Необходимо обратить внимание на порядок простых условий в составном условии цикла. Здесь предполагается, что второе условие не проверяется, если результат логического выражения ясен после проверки первого условия. В противном случае возникнет отказ из-за выхода индекса за границы массива.
Программа линейного поиска:
program n6; const n=5; var a:array[1..n] of integer; { массив из n элементов целого типа } x:integer; { искомый элемент целого типа } i,k:integer; begin writeln('Введите исходный массив:'); for i:=1 to n do read(a[i]); writeln('Введите x'); readln(x); for i:=1 to n do if a[i]=x then k:=i; while (i<=n) and (a[i]<>x) do inc(i); writeln('a[',k,']=',x,'=x'); end.
Дата добавления: 2014-11-09; Просмотров: 386; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |