Kreuzung Komplexität
In Python können Sie den Schnittpunkt der zwei Sätze machen:
>>> s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> s2 = {0, 3, 5, 6, 10}
>>> s1 & s2
set([3, 5, 6])
>>> s1.intersection(s2)
set([3, 5, 6])
Jemand kennt die Komplexität dieser Kreuzung (&
) Algorithmus?
EDIT: außerdem, weiß jemand, was ist die Datenstruktur, die hinter einem Python gesetzt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort scheint zu sein eine Suchmaschinen-Abfrage entfernt. Sie können auch diese direkter link auf den Zeit-Komplexität-Seite an python.org. Kurze Zusammenfassung:
EDIT: Wie Raymond Punkte unten, die "worst case" - Szenario ist nicht wahrscheinlich. Ich umfasste es ursprünglich um gründlich zu sein, und ich bin, dass es den Kontext für die Diskussion unten, aber ich denke, Raymond Recht.
C
und Durchschnittliche (und keine Bestellung Anforderung). Der maximal erforderlichen Komplexität, AFAIK, ist überO(n log n) + O(n)
mit eine Art. Aber Big-O ist eine Obere-Schranken, und es gibt praktische Erwägungen so...Den Schnittpunkt-Algorithmus läuft immer auf O(min(len(s1), len(s2))).
In reinem Python, sieht es wie folgt aus:
[Antwort auf die Frage in das weitere Bearbeiten] Die Struktur der Daten hinter legt ist ein hash-Tabelle.
elem in big
im code ist O(n) (obwohl der Durchschnitt ist natürlich O(1)). Das ist die basis für die Kreuzung schlechtesten Fall von O(len(s)*len(t)). Irgendeine Idee warum?Set Schnittmenge zweier sets von Größen
m,n
erreicht werden kann, mitO(max{m,n} * log(min{m,n}))
in der folgenden Weise:Übernehmen
m << n
Die Schleife in Schritt 3 wird für die
n/m
Iterationen und in jeder iteration wird nehmenO(m*logm)
, so haben Sie Zeit, die Komplexität derO(nlogm)
für m << n.Ich denke, das ist die beste untere Schranke existiert