2017-05-26 6 views
0

Wie prognostizieren Sie die Anzahl der Iterationen, die erforderlich sind, um eine Zahl zu finden, die der Benutzer in die binäre Suche eingeben würde?Wie prognostizieren Sie die Anzahl der Iterationen, die für eine binäre Suche erforderlich sind?

def find(list, x): 
    numIter=0 
    a = 0 
    b = len(list) - 1 
    while a < b: 
     numIter+=1 
     c = (a + b) // 2 
     if list[c] <x: 
      a = c + 1 
     else: 
      b = c 
    return numIter 
    if list[b] == x 
     return b + 1 
    else: 
     return -1 


print(find([1,2,4,5,8,9,11,12,13,14,15,16,17], 10)) 
+0

Der gleiche Weg, den Sie irgendeine andere Zahl anzeigen würden? Nicht wirklich! Was fragst du wirklich? Fragen Sie, wie Sie 'numIter' von Ihrer' find() 'Funktion zurückgeben? Fragen Sie, wie die Anzahl der erforderlichen Iterationen _predict_ wird? –

+0

Vorhersage der Anzahl der Iterationen, die benötigt werden und zeigen nur die Anzahl der Iterationen – piteer

+0

Ich glaube nicht, dass Sie tatsächlich eine Eingabe und _predict_ nehmen können, wie viele Iterationen es für eine binäre Suche dauern würde, ohne tatsächlich die binäre Suche durchzuführen ... dies klingt ein wenig wie [das Halteproblem] (https://en.wikipedia.org/wiki/Halting_problem) – AetherUnbound

Antwort

0

Es ist einfach, eine Obergrenze für die Anzahl der Iterationen festzulegen. Jede Iteration teilt den Suchraum in zwei Hälften. Im schlimmsten Fall erfordert die Suche log_base_2 (n) Iterationen, wobei n die Größe des Arrays ist.

Es ist nicht einfach, eine genaue Antwort zu erhalten, ohne die Suche tatsächlich durchzuführen. Sie können Glück haben und finden, wonach Sie suchen, beim ersten Versuch, beim zweiten Versuch oder beim dritten ... Wenn Sie feststellen, dass es von den Daten abhängt, ist es schwierig, etwas über die Daten zu wissen es tatsächlich zu betrachten (dh, indem Sie tatsächlich die Suche machen.)

Verwandte Themen