Laufzeit von python ist, wenn substring in string
Was ist die große O der folgenden if statement
?
if "pl" in "apple":
...
Was ist das Allgemeine big O wie python bestimmt, ob die Zeichenfolge "pl" gefunden wird, in der Zeichenfolge "Apfel"
oder andere Teilzeichenfolge in der Zeichenfolge zu suchen.
Ist dies der effizienteste Weg, um zu testen, ob ein Teilstring in einem string? Hat es den gleichen Algorithmus verwenden wie .find()
?
- Was meinst du mit "wie lang ist die Laufzeit"? Wenn Sie sich Fragen, was ist schneller, man kann
timeit
. - Ich aktualisierte die Frage etwas. Sorry für unklar zu sein
- Verwandte: Python - Kosten der find () - Funktion
Du musst angemeldet sein, um einen Kommentar abzugeben.
In python 3.4.2 es sieht aus wie Sie sind auf die gleiche Funktion, aber es kann den Unterschied im timing trotzdem. Zum Beispiel
s.find
erste ist erforderlich, um die lookup -find
- Methode der string-und wie.Der verwendete Algorithmus ist eine Mischung zwischen Boyer-Mehr und Horspool.
Die Zeit-Komplexität ist O(N) - im Durchschnitt O(NM) schlimmsten Fall (N ist dabei die Länge des längeren Strings, M, die kürzere Zeichenfolge, die Sie suchen).
Den gleichen Algorithmus verwendet wird, für
str.index()
,str.find()
,str.__contains__()
(diein
Betreiber) undstr.replace()
; es ist eine Vereinfachung der Boyer-Moore mit Ideen, die aus der Boyer–Moore–Horspool und Sonntag algorithmen.Sehen die original stringlib Diskussion posten, sowie die
fastsearch.h
Quellcode; der Basis-Algorithmus hat sich nicht verändert, seit Einführung in Python 2.5 (abgesehen von einige low-level-Optimierungen und-Ecke-Fall behebt).Der post enthält ein Python-code-Gliederung des Algorithmus:
sowie Geschwindigkeit Vergleiche.
Können Sie
timeit
und testen Sie es selbst:Mit
in
ist tatsächlich schneller (0.0371 usec verglichen werden, auf 0,125 usec).Für die tatsächliche Umsetzung, Sie können sich an der code selbst.
Ich denke, der beste Weg, um herauszufinden, ist der Blick auf die Quelle. Diese sieht aus wie Sie es umsetzen würden
__contains__
:in Bezug auf
stringlib_find()
, die verwendetfastsearch()
.