www.wikidata.uk-ua.nina.az
Dvijkovij poshuk algoritm znahodzhennya zadanogo znachennya u vporyadkovanomu masivi yakij polyagaye u porivnyanni seredinnogo elementa masivu z shukanim znachennyam i povtorennyam algoritmu dlya tiyeyi abo inshoyi polovini div dvijkove derevo poshuku zalezhno vid rezultatu porivnyannya Vizualizaciya dvijkovogo poshukuTrudomistkist algoritmu 1 log 2 n displaystyle 1 log 2 n de n kilkist elementiv u masivi Zmist 1 Algoritm 1 1 Rekursivna versiya 1 2 Iterativna versiya 1 3 Versiya bez perevirki na rivnist 2 Cikavi dani 2 1 Masove vikoristannya linijnogo poshuku 2 2 Pomilki v realizaciyi 2 2 1 Neskinchennij cikl 2 2 2 Perepovnennya 3 Posilannya 4 Literatura 5 Div takozhAlgoritm RedaguvatiRekursivna versiya Redaguvati Odnim iz variantiv realizaciyi algoritmu ye rekursivna funkciya sho otrimuye masiv shukane znachennya ta pochatkovij i kincevij indeksi elementiv v masivi BinarySearch A 0 N 1 value low high if high lt low return 1 ne znajdeno mid low high 2 if A mid gt value return BinarySearch A value low mid 1 else if A mid lt value return BinarySearch A value mid 1 high else return mid znajdeno Iterativna versiya Redaguvati Navedenij vishe algoritm mozhna peretvoriti na iterativnij BinarySearch A 0 N 1 value low 0 high N 1 while low lt high mid low high 2 if A mid gt value high mid 1 else if A mid lt value low mid 1 else return mid znajdeno return 1 ne znajdeno Versiya bez perevirki na rivnist Redaguvati Poperedni versiyi na kozhnomu kroku pereviryayut potochnij element na rivnist shukanomu Ce mozhe buti dosit povilnim yaksho porivnyannya ne ye shvidkimi Takozh koli v masivi dekilka rivnih elementiv to poperedni algoritmi znahodyat bud yakij z nih Mozhna zminiti algoritm shob ne vikoristovuvati porivnyannya BinarySearchFistPosition A 0 N 1 value low 1 high N while high low gt 1 mid high low 2 if A mid gt value high mid else low mid Teper v high znahoditsya indeks pershogo elementa takogo sho A high gt value Yaksho ce neobhidno mozhna pereviriti chi vin rivnij value if A high gt value ne znajdeno high 0 chi A high 1 lt value A high gt value else Znajdeno return high BinarySearchLastPosition A 0 N 1 value low 1 high N while high low gt 1 mid high low 2 if A mid lt value low mid else high mid Zaraz u high znahoditsya indeks pershogo elementa takogo sho A high gt value a v A low ostannogo elementa takogo sho A low lt value return low V sumi ci dvi versiyi mozhna vikoristovuvati napriklad shob znajti skilki elementiv masivu rivni danomu Cikavi dani RedaguvatiMasove vikoristannya linijnogo poshuku Redaguvati Dvijkovij poshuk suttyevo shvidshij za linijnij vidnosno prostij v realizaciyi i zagalnovzhivanij Prote v realnih programah traplyayutsya vipadki vikoristannya linijnogo poshuku sho mayut naslidkom suttyevi problemi zi shvidkodiyeyu Tak v serjoznij naukovij publikaciyi 1 ye takij shmatok Mi mali programu yaka robila linijnij poshuk u duzhe velikomu masivi majzhe 100 raziv na sekundu Mi vidstezhili problemu do linijnogo poshuku zaminili jogo na dvijkovij i problema znikla yakij Dzhon Bentli angl Jon Bentley u knizi Perlini programuvannya 2 nazvav anekdotom i povidomiv sho bachiv cyu samu istoriyu u bagatoh sistemah Opublikovana na sajti Borland stattya opisuye problemi shvidkodiyi viklikani realizaciyeyu pevnih procedur roboti z bazami danih u VCL yaki po suti zvodyatsya do vikoristannya linijnogo poshuku zamist dvijkovogo nevikoristannya indeksu tablici Pomilki v realizaciyi Redaguvati Neskinchennij cikl Redaguvati V tij zhe knizi Dzhon Bentli vikoristovuye dvijkovij poshuk yak priklad uprodovzh rozdilu prisvyachenogo testuvannyu ta znevadzhennyu Vin navodit tipovu nevirnu realizaciyu dvijkovogo poshuku poshirenu za jogo slovami sered profesijnih programistiv Nevirnij kod vidriznyayetsya vid navedenogo prikladu ryadkami right mid ta else left mid Takij kod prizvodit do neskinchennogo ciklu dlya bagatoh znachen shukanogo elementa napriklad pri sprobi znajti najbilshij element masivu Za spogadami Arhivovano 1 kvitnya 2016 u Wayback Machine Dzhoshua Bloha angl Joshua Bloch jomu zapala v pam yat lekciya z kursu algoritmiv v Universiteti Karnegi Melon na yakij Dzhon Bentli poprosiv majbutnih kandidativ nauk napisati dvijkovij poshuk i rozibrav nevirnij variant yakih bulo bilshist Perepovnennya Redaguvati Sam Dzhoshua ye avtorom realizaciyi bibliotechnoyi funkciyi dvijkovogo poshuku u Java vid Sun U 2006 roci vin buv shokovanij she raz koli dovidavsya sho retelno rozibrana u Bentli realizaciya ta jogo vlasna yaka 9 rokiv znahodilas u biblioteci Java mistit she odnu pomilku 3 Odna programa sho obroblyala velikij nabir danih padala cherez nastupnij ryadok u realizaciyi int mid low high 2 Prichinoyu bulo te sho low i high buli velikimi i yih suma viklikala programne perepovnennya tipu int privodyachi do vid yemnogo znachennya mid Takim chinom dlya obrobki velikih masiviv neobhidno pisati v realizaciyi na Java int mid low high low 2 chi int mid low high gt gt gt 1 Dopis Bloha takozh vraziv tvorcya Mono Migelya de Ikazu 4 ale menshe vraziv rozrobnika Gnome Mortena Velindera yakij takozh vidmitiv inshi problemi z arifmetikoyu cogo algoritmu 5 Pislya dopisu Bloha cya pomilka bula vipravlena u Mono 6 pomilka dosi prisutnya u funkciyi bsearch realizaciyi GNU C Library glibc biblioteki movi Si 7 Posilannya Redaguvati Communications of the ACM TWA Reservation system Bentley Jon 2000 1986 Programming Pearls vid 2nd edition Addison Wesley s p34 ISBN 0201657880 Arhivovana kopiya Arhiv originalu za 14 veresnya 2007 Procitovano 3 kvitnya 2009 http tirania org blog archive 2006 Jun 03 1 html Arhiv originalu za 28 listopada 2010 Procitovano 8 zhovtnya 2010 Morten Welinder Binary Search Arhiv originalu za 17 grudnya 2009 Procitovano 8 zhovtnya 2010 Mono dev Patch for fixing binary search idx l u 2 nedostupne posilannya z lipnya 2019 Literatura RedaguvatiVirt N 1985 Algoritmi ta strukturi danih rozdil 1 9 2 Div takozh RedaguvatiSpisok algoritmiv Linijnij poshuk Metod zolotogo peretinu nbsp Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Otrimano z https uk wikipedia org w index php title Dvijkovij poshuk amp oldid 39790006