2017-11-06 3 views
2

Ich frage mich, was ist die große O Zeit des unter einfaches Programm ausgeführt wird:Big O Zeit in oprator in Python läuft

dates = [0,2,3,4] 
sample_list = [1,2,3,4] 
for i in range(0, 4): 
    sub_list = sample_list[i+1:] 
    if dates[i] in sub_list: 
     count += 1 

Ist die Laufzeit O(n) oder O(n**2)? Ich weiß, die Laufzeit ist mindestens O(n), weil ich eine for-Schleife habe, aber wie wäre es mit der if dates[i] in sub_list-Anweisung? Was ist die Laufzeit dafür?

+1

'O (n)' oder 'O (n ** 2)' ist bedeutungslos ohne eine Definition für 'n' ... Was ist' n'? die Anzahl der Elemente in 'dates', in' sample_list', in beiden? Die Anzahl der Listen? ... – Julien

Antwort

3

Ihre Schleife scheint nicht von der Länge Ihrer Liste (n) zu abhängen, obwohl es wahrscheinlich sollte. Der Aufruf an sample_list[i+1:] hängt jedoch von der Größe sample_list sowie dates[i] in sub_list ab.

Aus diesem Grund ist Ihr Code O(n), wobei n die Länge sample_list ist.

+0

Also was passiert, wenn ich es in 'für i im Bereich (0, len (dates))' ändere? Gibt mir das O (n)? – vivi11130704

+0

Wie Stefan schon sagte, ist es schon "O (n)", aber es wäre besser, die Indizes nicht fest zu codieren. –

+0

Ich verstehe. Also, wenn ich es richtig verstehe, "wenn Daten [i] in Unterliste" nicht die Laufzeit zu O (n^2) erhöhen. Allerdings habe ich diesen Beitrag gelesen: https://stackoverflow.com/questions/13884177/complexity-of-in-operator-in-python und es scheint wie ein "in" -Operator in einer Liste hat O (n) Laufzeit. Da wickle ich eine for-Schleife außerhalb dieses Operators ein. Sollte es nicht O (n^2) für meinen Fall sein? – vivi11130704