2017-01-29 2 views
0

Ich war für meinen Test zu studieren und ist eher zufällig auf diesem:die Laufzeitdifferenz der Liste vs dict Verständnis

Die Frage ist: Welcher Algorithmus ist die schnellste , das ist die langsamste.

def f1(): 
    a = [] 
    for j in range(100000): 
     a.append(j*j) 

    for j in range(100000): 
     if 99999*j == a[j]: 
      print("yes") 
def f2(): 
    a = [] 
    for j in range(100000): 
     a.append(j*j) 

    for j in range(100000): 
     if 99999*j in a: 
      print("yes") 
def f3(): 
    d = {} 
    for j in range(100000): 
     d[j] = j*j 

    for j in range(100000): 
     if 99999*j in d: 
      print("yes") 

Ich verstand f2 die ist langsamste weil zu überprüfen, ob ein Element in einer Liste ist, dass Sie alle Mitglieder der Liste laufen.

Was würde schneller laufen? Boolescher Ausdruck: (99999 * j == a [j]) oder (99999 * j in d, wobei d ein Wörterbuch ist und Hash verwendet) und warum? Ich dachte, Hash macht alles O (1), also sollten sie gleich sein.

Vielen Dank.

+0

In 3 Sie nur Schlüssel überprüfen und Werte vergleichen nicht – sahama

Antwort

0

jetzt ohne Bearbeitung in Fall 3 Sie nur nach Schlüsseln nicht Werte suchen und vielleicht ist dies ein Fehler. bu, wenn Sie es wie bearbeiten

def f3(): 
    d = {} 
    for j in range(100000): 
     d[j] = j*j 
    for j in range(100000): 
     if d[j] == 99999*j: 
      print("yes") 

dann funktionieren auch 1 schneller

sein
+0

ich nicht ganz verstanden, was Sie meinten ‚Check für Schlüssel keine Werte, aber ich die Funktionen getaktet: f1 - ~ 0,10704922676086426 Sekunden f2 - ~ 674,6455340385437 Sekunden f3 - ~ 0,11258125305175781 Sekunden f1 und f3 unterscheiden ... in jeder Iteration, ich denke, sie wollte uns sag f1, weil es keine Zeit mit Hashing verschwendet. Vielen Dank Ihre Antwort – YonMan

Verwandte Themen