Ich versuche, den effizientesten Weg zu finden, um zu überprüfen, ob die angegebene Zeichenfolge Palindrom ist oder nicht.
Zuerst versuchte ich Brute Force, die Laufzeit der Ordnung O (N) hat. Dann habe ich den Code ein wenig optimiert, indem ich nur n/2 Vergleiche anstelle von n gemacht habe. HierPython Low-Level-vs High-Level-Performance (Laufzeitanalyse von Palindrom-Funktionen)
ist der Code:
def palindrome(a):
length=len(a)
iterator=0
while iterator <= length/2:
if a[iterator]==a[length-iterator-1]:
iterator+=1
else:
return False
return True
Es dauert eine halbe Zeit, als auf rohe Gewalt verglichen, aber es ist immer noch bestellen O (N).
Inzwischen dachte ich auch an eine Lösung, die Slice-Operator verwendet.
Hier ist der Code:
def palindrome_py(a):
return a==a[::-1]
Dann habe ich Zeit Analyse der beiden läuft. Hier ist das Ergebnis: Running time
Length of string used is 50
Length multiplier indicates length of new string(50*multiplier)
Running time for 100000 iterations
For palindrome For palindrome_py Length Multiplier
0.6559998989 0.5309998989 1
1.2970001698 0.5939998627 2
3.5149998665 0.7820000648 3
13.4249999523 1.5310001373 4
65.5319998264 5.2660000324 5
Der Code, den ich hier zugegriffen verwendet werden kann: Running Time Table Generator
Nun, ich möchte wissen, warum es einen Unterschied zwischen der Zeit der Schicht Bediener läuft (palindrome_py) und dem Palindrom Funktion.Warum bekomme ich diese Art von Laufzeit?
Warum ist der Slice-Operator so effizient wie im Vergleich zur Palindrome-Funktion? Was passiert hinter den Kulissen?
Meine Beobachtungen-: Laufzeit ist proportional zum Multiplikator dh. Laufzeit, wenn der Multiplikator 2 ist, kann durch Multiplizieren der Laufzeit des Falls (n-1) erhalten werden, dh. 1. in diesem Fall durch den Multiplizierer (n) ie.2
Verallgemeinern uns Zeit zum Laufen bringen (n) = Laufzeit (n-1) * Multiplikator
Großartige Erklärung! +1 –
@EliKorvigo Könnten Sie mir bitte einige Links geben, von denen ich mehr über Disassembler und Bytecode erfahren kann. – Divyanshu
@Divyanshu sicher, hier sind die Dokumente für [dis] (https://docs.python.org/2/library/dis.html) –