русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Поиск в массиве


Дата добавления: 2013-12-23; просмотров: 5151; Нарушение авторских прав


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

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

Ниже приведен текст программы поиска в массиве целых чисел. Перебор элементов массива осуществляет инструкция REPEAT, в теле которой инструкция IF сравнивает текущий элемент массива с образцом и присваивает переменной naiden значение TRUE, если текущий элемент равен образцу. Цикл завершается, если в массиве обнаружен элемент, равный образцу (naiden=TRUE), или если проверены все элементы массива. По завершении цикла, по значению переменной found можно определить, успешен поиск или нет.

VAR

massiv : array[1..10] of integer ; { массив целых }

obrazec : integer ; { образец для поиска }

naiden : boolean ; { признак совпадения с образцом }

i : integer ;

BEGIN

writeln(‘Введите 10 целых чисел в одной строке через пробел’) ;

for i := 1 to 10 do read(massiv[i]) ;

writeln(‘Введите образец для поиска (целое число)’) ;

readln(obrazec) ;

{ поиск простым перебором }

naiden := FALSE ; { совпадений нет }

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

repeat

if massiv[i] = obrazec

then naiden := TRUE { совпадение с образцом }

else i := i + 1 ; { переход к следующему элементу }

until ( i > 10 ) or (naiden) ; { завершим, если совпадение с образцом или }

{ проверен последний элемент массива }

if naiden

then writeln(‘Совпадение с элементом номер’, i:3,‘.’, ‘ Поиск успешен.’}



else writeln (‘Совпадений с образцом нет.’) ;

END.

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

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

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

Для поиска в упорядоченных массивах применяют другие, более эффективные по сравнению с методом простого перебора, алгоритмы, один из которых- метод бинарного поиска.

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

Рис.18. Выбор среднего элемента массива при бинарном поиске.

 

Если средний элемент равен образцу, то задача решена.

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

Если средний элемент больше образца, то искомый элемент расположен ниже среднего (между элементами с номерами sred и niz).

После того, как определена часть массива, в которой может располагаться искомый элемент, поиск проводят в этой части, выделяя новый средний элемент. Номер среднего элемента вычисляется по формуле (niz-verh)/2+verh. Блок-схема алгоритма бинарного поиска в массиве представлена на рис. 19.

Ниже представлен текст программы бинарного поиска в массиве. В программу добавлены операторы вывода значений переменных verh, niz и sred. Выводимая информация полезна для понимания сути алгоритма. Кроме того, переменная n позволяет оценить эффективность этого алгоритма по сравнению с поиском методом простого перебора (для массивов, упорядоченных по возрастанию).

Рис.19. Блок-схема алгоритма бинарного поиска в упорядоченном

по возрастанию массиве.

 

VAR

A : Array[1..9] of Integer ; { массив целых }

obrazec : Integer ; { образец для поиска }

sred,verh,niz : Integer ;{номера среднего, верхнего и нижнего эл-тов массива}

naiden : Boolean ; { признак совпадения с образцом }

n : Integer ; { счетчик сравнений с образцом }

i : Integer ;

BEGIN

writeln(‘ Введите 9 целых чисел в одной строке через пробел }

for i := 1 to 9 do readln(A[i]) ;

writeln(‘Введите образец для поиска (целое число) ‘) ;

readln(obrazec) ;

verh := 1 ;

niz := 9 ;

naiden := FALSE ;

n := 0 ;

writeln(‘ verh niz sred’) ;

repeat

sred := (niz - verx) div 2 + verh ;

writeln(verh:6,niz:6,sred:6) ;

n := n + 1 ;

if A[sred]=obrazec then naiden := TRUE

else begin

if obrazec<A[sred]

then niz := sred-1

else verh := sred+1 ;

end ;

until (verh>niz) or naiden ;

if naiden

then write(‘Совпадение с элементом номер ‘,sred,’.

Выполнено ‘,n,’ сравнений.’)

else writeln(‘Образец в массиве не найден.’) ;

readln

END.



<== предыдущая лекция | следующая лекция ==>
Сортировка методом прямого обмена | Транспонирование матрицы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.007 сек.