Bináris kereséssel gugliztam pythonban, és ezt találtam: http://openbookproject.net/thinkcs/python/english3e/list_algorithms.html
Azt mondta, hogy az általános kapcsolat a max. az iterációk számát (ugyanaz, mint a Probe?) és az N-t (a lista mérete) N = 2^k -1
adja meg, ahol k az iterációk maximális száma .
Értelmem szerint azonban az általános összefüggés nem lehet N = 2^k
Mint minden keresés után, a listát 2-vel osztjuk, amíg el nem jutunk 1-hez.
Ezért az iterációk maximális száma log2 (N+1)
helyett log2 N
Kerestem a Google-on, és találtam egy webhelyet, amely alátámasztja a válaszomat, de sok magyarázat nélkül. (link itt: http://codingexplained.com/coding/theory/binary-search-algorithm)
Valaki el tudná magyarázni a mögöttes matematikát? Kösz.
P(n) = 1 + P(n // 2)
legyen: vegyük például an = 6
esetet - egy 'középső' elemet választunk, 2 elemet hagyva az egyik oldalon, 3-at a másikon; a legrosszabb esetben végül erre a 3 elemre redukálunk, tehát azt akarjuk, hogy az egyenletP(6) = 1 + P(3)
legyen. (Az első eset, amikor ez különbséget jelent, an = 2
; nekünkP(2) = 2
-nek kellene lennie.) 31.01.20161 + P((n-1)/2)
használatával olyasmit kap, ami nem ért egyet a cikkben foglaltakkal, amint azt már aP(2)
esetében is jeleztem. (AP(2)
eseténceil(log2(3))
-t kell kapnia, ami2
, de a definíciójávalP(2) = 1
.) Ha a(n-1)/2
-etn//2
-ra módosítja, akkor a definíciója megegyezik a cikkel. A cikk melyik része szerinted hibás? 31.01.2016P(n) = 1 + P(n/2)
rekurzív egyenletet, de valahogy más megoldást kapok. Az n-t behelyettesítem 2^n-nel, és végülP(n) = log2(n) + 1
-t kaptam. Bár a különbség nem sok, de megköszönném, ha valaki megmondaná, hogyan oldjam meg. Kösz. 01.02.2016