Кампутары, Праграмаванне
Бінарны пошук - адзін з самых простых спосабаў знаходжання элемента ў масіве
Даволі часта праграмісты, нават пачаткоўцы, сутыкаюцца з тым, што ёсць набор лікаў, у якім неабходна знайсці пэўную колькасць. Вось гэтую калекцыю называюць масівам. А каб знайсці патрэбны элемент у ім, ёсць велізарнае мноства спосабаў. Але самым простым сярод іх па праве можна лічыць бінарны пошук. У чым жа заключаецца дадзены метад? І як рэалізаваць бінарны пошук? Паскаль з'яўляецца самай простай асяроддзем для арганізацыі такой праграмы, таму будзем выкарыстоўваць менавіта яго для вывучэння.
Спачатку разбяром, у чым перавагі гэтага метаду, бо так мы зможам зразумець,
Такім чынам, у чым жа заключаецца прынцып працы дадзенага метаду? Адразу варта сказаць, што працуе бінарны пошук не ў любым масіве, а толькі ў адсартаваным наборы лікаў. На кожным наступным кроку бярэцца сярэдні элемент масіва (маецца на ўвазе па нумары элемента). Калі шуканае лік больш сярэдняга, значыць усё тое, што знаходзіцца злева, гэта значыць менш сярэдняга элемента, можна адкінуць і не шукаць там. І наадварот, калі менш за сярэдні - сярод тых лікаў, што справа, можна не шукаць. Далей абярэм новую вобласць пошуку, дзе першым элементам стане сярэдні элемент ўсяго масіва, а апошні так і застанецца апошнім. Сярэднім жа лікам новай вобласці стане ¼ ўсяго адрэзка, то ёсць (апошні элемент + сярэдні элемент ўсяго масіва) / 2. Зноў вырабляецца тая ж аперацыя - параўнанне з сярэднім лікам масіва. Калі шуканая велічыня менш за сярэдні, адкідаем правую частку, і гэтак жа робім далей, пакуль вось гэты сярэдні элемент не апынецца шуканым.
Вядома, лепш за ўсё паглядзець на прыкладзе, як пішацца бінарны пошук. Pascal тут падыдзе любы - версія не важная. Напішам простую праграму.
У ёй будзе масіў ад 1 да h пад назвай "massiv", пераменная, якая пазначае ніжнюю мяжу пошуку, названая "niz", верхняя мяжа, названая "verh", сярэдні элемент пошуку - "sredn"; і шуканае лік - "isk".
Такім чынам, спачатку прызначаем верхнюю і ніжнюю мяжы інтэрвалу пошуку:
niz: = 1;
verh: = h + 1;
Затым арганізоўваем цыкл "пакуль ніжняя менш верхняй мяжы":
While niz
На кожным кроку дзелім адрэзак на 2:
sredn: = (niz + verh) div 2; {Выкарыстоўваем функцыю div, таму што дзелім без астатку}
Кожны раз праводзім праверку. Калі сярэдні роўны шуканага, перарываем цыкл, так як патрэбны элемент ўжо знойдзены:
іf sredn = isk then break;
Калі сярэдні элемент масіва больш шуканага, адкідаем левую частку, гэта значыць верхняй мяжой прызначаем сярэдні элемент:
if massiv [sredn]> isk then verh: = sredn;
А калі наадварот, то яго робім ніжняй мяжой:
else niz: = sredn;
end;
Вось і ўсё, што будзе ў праграме.
Разбяром, як будзе выглядаць бінарны метад на практыцы. Возьмем такі масіў: 1, 3, 5, 7, 10, 12, 18 і будзем шукаць у ім лік 12.
Усяго ў нас 7 элементаў, таму сярэднім будзем чацвёрты, яго значэнне 7.
1 | 3 | 5 | 7 | 10 | 12 | 18 |
Так як 12 больш 7, элементы 1,3 і 5 мы можам адкінуць. Далей у нас засталося 4-га, 4/2 без астатку роўна 2. Значыць, новым сярэднім элементам будзе 10.
7 | 10 | 12 | 18 |
Тут сярэдні элемент ўжо 12, гэта і ёсць шуканае лік. Задача выкананая - лік 12 знойдзена.
Similar articles
Trending Now