Алгоритм двоичного поиска можно использовать для поиска элемента с заданным свойством только в массивах, упорядоченных по этому свой - gozda.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Алгоритм двоичного поиска можно использовать для поиска элемента с заданным свойством - страница №1/1


  1. Теоретический материал

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

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

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


В процессе работы алгоритма двоичного поиска размер фрагмента, где этот поиск должен продолжаться, каждый раз уменьшается примерно в два раза. Это обеспечивает вычислительную сложность алгоритма порядка логарифма N по основанию 2, где N-количество элементов массива.


ПРИМЕР: Поиск в упорядоченном по возрастанию массиве первого вхождения числа X.

program Poisk4;
Греческая алхимия >>
           Рис. 1 Гора адептов. Процесс психологического развития подобен алхимическому преобразованию исходного вещества в золото, философский камень, который представлен здесь в виде сокрытого в земле «храма мудрецов». На солнце и луне (олицетворяющих мужское и женское), широко расставив ноги, стоит феникс, символизирующий обновленную личность. На заднем плане помещается зодиакальный круг, символизирующий продолжительность процесса; четыре элемента указывают на целостность. Человек с завязанными глазами олицетворяет тернистый путь поиска истины; правильный путь указывет исследователь, который следует своим природным инстинктам. Лекция 1

Петрозаводский государственный университет >>
Введение Создание коллекций графических документов в сети Интернет в последнее время становится все более популярным. Самые распространенные коллекции – это фотоальбомы обычных пользователей. Кроме того, сейчас активно создаются электронные графические базы данных сотрудниками музеев, научных лабораторий, университетов и т.д. Поиск в таких коллекциях является затрудненным, так как до последнего времени традиционным являлся поиск визуальной информации, опирающийся на индексирование текстовых описаний, ассоциированных с изображением. При очевидной необходимости организации и простоте доступа к визуальной коллекции посредством поиска по текстовой информации, ассоциированной с изображениями, такой подход представляется недостаточным, в первую очередь потому что, такой поиск не всегда является однозначным. Неоднозначность соответствия между визуальным содержанием и текстовым описанием снижает показатели точности и полноты поиска. Информация, которую человек получает, глядя на картинку, “стоит” тысячи слов. А некоторые изображения вообще трудно описать словами (очевидный пример - абстрактные картины). В связи с этим возникает проблема организации доступа к современным электронным коллекциям изображений с использованием комплекса средств - как текстовых описаний, так и характеристик визуального содержания, простейших типа цветовой гаммы, и более сложных, связанных с распознаванием образов. Текстовое описание и визуальная поисковая информация дополняют друг друга, обеспечивая возможность разностороннего поиска. Целью данной работы является разработка методов классификации и поиска графической информации и создание информационной системы, позволяющей создавать, управлять и анализировать коллекции графических документов. Особенностью такой информационной системы является воз­можность хранения и использования иерархии документов и значе­ний наборов признаков, зависящих от типа документа. Создаваемое в коллекции дерево для хранения иерархии графических объектов может иметь неогра­ниченное число уровней и неограниченное число узлов на каждом уровне. Не смотря на то что, создаваемая система предназначена в первую очередь для научных исследований, подобный способ описания графических объектов позволяет применять систему для создания каталога запчастей/товаров с иллюстра­циями, произведений художников и т.д. Исследования поддержаны грантом РГНФ № 08-01-12116в (руководитель Н.В. Лобанова). Типы признаков изображений

Имплицитая вера >>
Д-р Томас Веспетал Универсализм Плюрализм Инклюсивизм Имплицитая вера Универсальная возможность Эксклюсивизм Что будет с теми, кто никогда не слышали об Иисусе? Другими словами, «Возможно ли для человека быть спасенным без знаний об Иисусе Христе или личной веры в Него?». Обратимся к этому вопросу. Можно перечислить некоторые теории по этому поводу: универсализм, плюрализм, инклюсивизм, имплицитая вера, универсальная возможность и эксклюсивизм. Среди этих теорий поищем наилучший ответ на вопрос, что будет с теми, кто никогда не слышали об Иисусе? Универсализм Универсализм -- это то учение, что все люди в конце концов будут спасены, не зависимо от их веры или ее отсутствия в этой жизни. Можно упомянуть о местах Писания, которые употреблены в поддержку теории универсализма. 1Тим. 4:10 – «Мы уповаем на Бога живаго, Который есть Спаситель всех человеков, а наипаче верных». Рим 5:18: -- «Как преступлением одного всем человекам осуждение, так правдою одного всем человекам оправдание к жизни». Кол. 1:19-20 – «Благоугодно было Отцу, чтобы в Христе обитала всякая полнота, и чтобы посредством Его примирить с Собою все, умиротворив через Него, кровию креста Его, и земное и небесное». Но, бесспорно, в Библии имеется много упоминаний о погибающих людях. Читаем, например, о дне Страшного Суда, что «кто не был записан в книге жизни, тот был брошен в озеро огненное» (Откр. 20:15). Да, Библия учит, что Бог спас всех и примирил всех с Собой через Христа. Но это не означает, что спасение даётся автоматическим образом. Человек должен принять спасение и примирение через покаяние и веру. Павел сказал: «Примиритесь с Богом» (2Кор. 5:20). Заметьте, что в Рим. 5 гл. Павел учит, что унаследование последствий греха Адама относится ко всем автоматически, а принятие преимуществ смерти Иисуса зависит от веры. Он пишет: «Ибо если преступлением одного смерть царствовала посредством одного, то тем более приемлющие обилие благодати и дар праведности будут царствовать в жизни посредством единого Иисуса Христа» (Рим. 5:17). Заметьте, что лишь приемлющие благодати получают спасение. Поэтому, можно сделать вывод, что в конце не все будут спасены. Плюрализм

Описание методической разработки >>
Урок: аналитическая беседа с комментированным чтением В данном материале представлен личностный подход к анализу повести В.Г.Распутина «Последний срок». Произведение рассматривается как эстетическая и нравственная ценность, которая не замыкается только в рамках времени его создания, но также актуально и для сегодняшнего читателя. В то же время работа является результатом поиска конкретных путей обновления урока, методических приемов, обогащение и развитие существующих форм и методов с учётом своих возможностей, подготовки и интересов современных школьников. Альтернативный подход в изучении повести В.Распутина «Последний срок» позволяет учащимся проникнуть в художественный мир произведения, понять замысел автора, его концепцию времени и человека, «высветить» главную проблему через один интересный эпизод, подвести старшеклассников к желанию самостоятельно поработать над поставленными вопросами, читать и перечитывать текст, формировать читательскую самостоятельность. учебный предмет – литература Обучаясь в классе углубленного изучения литературы, одиннадцатиклассники владеют не только навыками устной и письменной речи, у них сформировано представление о литературе как виде искусства. Понимая его внутренние законы, они применяют полученные знания в процессе творческого чтения, умеют отличать подлинно художественные произведения от явлений «массовой культуры». Владеют следующими навыками и умениями: - воспринимают и анализируют художественный текст в его жанрово – родовой специфике; - выделяют смысловые части текста; - выделяют и формулируют тему, идею, проблематику произведения, творчески характеризуют героев; - умеют выделять особенности сюжета и композиции, находить изобразительно – выразительные средства, выражать своё отношение к прочитанному. 5. Форма учебной работы - классно – урочная 6. Возможно использование демонстрации слайдов программы PowerPoint. Слайды с иллюстрациями на тему «Природа Байкала», фотоэпизоды из жизни писателя В.Распутина. Палагина Евгения Алексеевна -учитель средней школы №3 г. Ноябрьска «Звенья одной цепи» в повести В.Г.Распутина «Последний срок» XI класс Цель урока: познакомиться с биографией В.Г.Распутина; раскрыть и обсудить ряд проблем, поставленных автором. Оборудование: портрет В.Г.Распутина.


var A:array[1..100] of integer;

N,X,left,right:integer;



begin

read(N); {N<=100}

write('введите упорядоченный по возрастанию массив');

for i:=1 to N do read(A[i]);

read(X);

left:=1; right:=N;

{левая и правая граница фрагмента для поиска}

while leftdo

begin

c:=(left + right) div 2; {середина с округлением в меньшую сторону}



if X>A[c] then left:=c+1 {выбираем правую половину без середины, меняя left }

else right:=c; {выбираем левую половину с серединой, меняя right}

end;

if X=A[left] then {здесь left = right, но не всегда = c}

write('первое вхождение числа ',X,' в массив A на ',left,' месте')

else write('не нашли');

end.
Сортировка Хоара (быстрая сортировка)
Эту сортировку также называют быстрой сортировкой. Метод был разработан в 1962 году профессором Оксфордского университета К. Хоаром. Это прекрасный пример использования рекурсии. Рассмотрим принцип работы алгоритма при упорядочении массива A из N элементов по возрастанию.

Значение какого-нибудь элемента, обычно центрального, записывается в переменную X. Просматриваются элементы массива. При движении слева-направо ищем элемент больше или равный X. А при движении справа-налево ищем элемент меньше или равный X. Найденные элементы меняются местами и продолжается встречный поиск.

После этого массив окажется разделенным на две части. В первой находятся элементы меньше либо равные X, а справа - больше либо равные X. Можно заменить исходную задачу о сортировке массива A на две подзадачи о сортировке полученных частей массива.

Вычислительная сложность одного вызова данного рекурсивного алгоритма пропорциональна количеству элементов сортируемого фрагмента массива. В лучшем случае деление на части производится пополам, поэтому вычислительная сложность всего алгоритма быстрой сортировки составляет величину порядка N*LogN (логарифм по основанию 2). Вычислительная сложность в среднем того же порядка.


ПРИМЕР: Быстрая сортировка по возрастанию массива A из N целых чисел.

program Quick_Sort;

var A:array[1..100] of integer;

N,i : integer;

{В процедуру передаются левая и правая границы сортируемого фрагмента}

procedure QSort(L,R:integer);

var X,y,i,j:integer;

begin

X:=A[(L+R) div 2];

i:=L; j:=R;

while i<=j do

begin

while A[i]do i:=i+1;

while A[j]>X do j:=j-1;

if i<=j then

begin

y:=A[i]; A[i]:=A[j]; A[j]:=y;

I:=i+1; j:=j-1;

end;

end;

if Lthen QSort(L,j);

if ithen QSort(i,R);

end; {Qsort}

begin

write('количество элементов массива '); read(N);

for i:=1 to n do read(A[i]);

QSort(1,n); {упорядочить элементы с первого до n-го}



for i:=1 to n do write(A[i],' '); {упорядоченный массив}

end.


  1. Краткий алгоритм работы программы

В нашей программе имеется элемент TEdit и TButton (Добавить элемент) для добавления элементов в наш массив. Сам массив отображается в компоненте TListBox. Предусмотрен обработчик исключений на случай если пользователь вводит ошибочные данные. Например, букву вместо цифры и т.д. Также предусмотрено ограничение, если пользователь хочет ввести больше элементов, чем предусмотрено в условии задачи (в нашем случае это 20). Для удобного ввода мы пользуемся методами компонента TEdit – SelectAll, SetFocus. Это сделано для того чтобы после добаления очередного элемента на курсор находился в поле TEdit.

После того как наш массив заполнен у нас есть TButton (Отсортировать массив). В элемент TListBox выводится отсортированный методом Хоара (быстрая сортировка) массив.

Также в нашей программе реализован бинарный поиск. Мы вводим в компонент TEdit значение которое мы хотим найти в массиве. По нажатию кнопки TButton (Поиск) вызывается обработчик события, который выполняет двоичный поиск. Если элемент найден, то в компонент TLabel выводится порядковый номер искомого элемента. Если не найден, то выводится соответствующее сообщение.


  1. Листинг программы

unit Unit1;
interface
uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, XpMan, StdCtrls;
const size = 20;
type

mas = array[1..size+1] of integer;

TForm1 = class(TForm)

ListBox1: TListBox;

Edit1: TEdit;

Button1: TButton;

ListBox2: TListBox;

Label1: TLabel;

Label2: TLabel;

Button2: TButton;

Label3: TLabel;

Edit2: TEdit;

Button3: TButton;

Label4: TLabel;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }



public

{ Public declarations }

end;

var


Form1: TForm1;

n: integer;

a: mas;

implementation


procedure sort(var m: mas);

procedure recurs_sort(l, r: word);

var i, j: word;

x, t: integer;

Begin

i:=l; j:=r; x:=m[(l+r) div 2];



repeat

while m[i]

while m[j]>x do dec(j);

if i<=j then begin

t:=m[i]; m[i]:=m[j]; m[j]:=t;

inc(i); dec(j);

end;

until i>j;



if l

if i

End;

Begin


recurs_sort(1, size);

End;


{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);

Var number: integer;

begin

Try


if n <> size then

begin


number:=StrToInt(Edit1.text);

n:=n+1;


a[n]:=number;

listbox1.Items.add(IntToStr(a[n]));

Edit1.SelectAll;

Edit1.SetFocus;

if n = size then

ShowMessage('В массиве всего 20 элементов, это лишний');

end;

Except on EConvertError do



ShowMessage('Некорректные данные');

End;


end;
procedure TForm1.FormCreate(Sender: TObject);

begin


n:=0;

end;
procedure TForm1.Button2Click(Sender: TObject);

var k: integer;

i: integer;

begin

sort(a);


for i:=1 to size do

listbox2.Items.Add(IntToStr(a[i]));

end;
procedure TForm1.Button3Click(Sender: TObject);

var


x, i, first, last : integer;

c : integer;

found : boolean ;

begin


try

x:=StrToInt(Edit2.Text);

except on Econverterror do

ShowMessage('Некорректные данные');

end;

c:=0;


first:= 1;

last:= size;

found:=false;

repeat


i:= (First + Last) div 2;

if a[i] = x then found:=true

else

begin


if a[i] > n then

first:=i+1

else

last:=i-1;



end;

c:=c+1;


until (found) or (first>Last);

if found then

label4.Caption:='Элемент ' + IntToStr(x) + ' занимает ' + intToStr(i) + '-ю позицию'

else


label4.caption:='Искомый элемент не найден';

end;


end.


  1. Результаты работы программы