Carambola Python Advanced Lecture 2 - Die Vor- und Nachteile von Algorithmen

Meine CSDN-Blogspalte: https://blog.csdn.net/yty_7

 

Anfänger stellen in der Regel eine Frage: Wie wird vorgegangen?

Es gibt eine sehr bekannte Formel: Programm = Datenstruktur + Algorithmus

Ich gebe eine strenge Aussage: Programm = Algorithmus + Implementierungssprache

Warum die Datenstruktur weglassen? Da für Anfänger Algorithmen und Implementierungssprachen leichter zu verstehen sind als Datenstrukturen, beginnen wir mit Algorithmen.

 

Der Algorithmus bezieht sich auf eine genaue und vollständige Beschreibung der Lösung des Problems und besteht aus einer Reihe klarer Anweisungen zur Lösung des Problems. Der Algorithmus stellt eine systematische Methode zur Beschreibung des Strategiemechanismus zur Lösung des Problems dar.

Wir lernen tatsächlich ständig Algorithmen. Die Addition, Subtraktion, Multiplikation und Division, die wir in der Grundschule gelernt haben, ist der einfachste Algorithmus. Wurde der Algorithmus in der Mittelschule etwas schwieriger? Es gab negative Zahlen, Exponenten, Logarithmen und sogar imaginäre Zahlen. An der Universität ist es ein qualitativer Sprung. Derivate, Differentiale, Integrale, partielle Differentiale und Reintegrationen treten auf ... Der Grund, warum es immer schwieriger wird, liegt darin, dass die aufgetretenen Probleme immer komplexer werden und mit den vorherigen nicht gelöst werden können. Schlug eine neue Lösung für das Problem vor.

Zurück zur Definition des Algorithmus selbst, eine genaue und vollständige Beschreibung der Lösung des Problems. Für ein Problem gibt es oft mehrere Problemlösungslösungen, dh es gibt mehrere Algorithmen, dann hat der Algorithmus Vor- und Nachteile. Um ein berühmtes Beispiel in der Geschichte zu geben:

Der deutsche Mathematiker Gauß trat im Alter von sieben Jahren in die St. Catherine Grundschule ein. Mit ungefähr zehn Jahren hatte der Lehrer ein Problem in der Matheklasse: „Schreibe die ganzen Zahlen von 1 bis 100 auf und addiere sie dann!“ Gauß drehte die Zeitung früh um. Als Gauß sah, wie andere Schüler die Zahlen einzeln addierten und auf der Stirn schwitzten, saß er ruhig da. Schließlich überprüfte der Lehrer die Antworten der Klassenkameraden: Die meisten von ihnen machten Fehler und überprüften schließlich das Gaußsche Testpapier, es war nur eine Nummer darauf: 5050 (um nicht zu sagen, dies ist die richtige Antwort.) Der Lehrer war überrascht und Gauß erklärte Wie hat er die Antwort gefunden: 1 + 100 = 101, 2 + 99 = 101, 3 + 98 = 101, ..., 49 + 52 = 101, 50 + 51 = 101, es gibt 50 Paare und die Zahl ist 101, also ist die Antwort 50 × 101 = 5050.

Die Vor- und Nachteile des Algorithmus werden so intuitiv reflektiert. Schreiben wir diese beiden Algorithmen in Python-Sprache und hängen die Programmlaufzeit zum Vergleich an:

Code 1: Addieren von 1 zu 100 durch direkte Summierung

import time

start_time = time.time()

sum = 0
for i in range(101):
    sum += i
print(sum)

end_time = time.time()

print("elapsed: %f" % (end_time - start_time))
print("complete!")

运行结果:
5050
elapsed: 0.000000
complete!

Code 2: Addieren von 1 zu 100 unter Verwendung der arithmetischen Formel der arithmetischen Folge

import time

start_time = time.time()

s=list(range(101))
sum = (s[0]+s[-1])*len(s)/2
print(sum)

end_time = time.time()

print("elapsed: %f" % (end_time - start_time))
print("complete!")

运行结果:
5050.0
elapsed: 0.000000
complete!

Da die CPU und der Speicher des Computers sehr leistungsfähig sind, müssen nicht direkt 1 bis 100 hinzugefügt werden, und die Laufzeit des Programms beträgt 0! Aber was ist, wenn wir von 1 auf 100.000 steigen?

Code 3: Addieren von 1 zu 100.000 durch direkte Summierung

import time

start_time = time.time()

sum = 0
for i in range(100000+1):
    sum += i
print(sum)

end_time = time.time()

print("elapsed: %f" % (end_time - start_time))
print("complete!")

运行结果:
5000050000
elapsed: 0.050983
complete!

Code 4: Addieren von 1 zu 100.000 unter Verwendung der arithmetischen Formel der arithmetischen Folge

import time

start_time = time.time()

s=list(range(100000+1))
sum = (s[0]+s[-1])*len(s)/2
print(sum)

end_time = time.time()

print("elapsed: %f" % (end_time - start_time))
print("complete!")

运行结果:
5000050000.0
elapsed: 0.005998
complete!

Vergleicht man die Laufzeit der beiden, so sind 0,050983 Sekunden von Code 3 8,5-mal 0,005998 Sekunden von Code 4!

Anfänger können sich einfach vorstellen, dass ein Algorithmus, der weniger Zeit benötigt, um das gleiche Ergebnis zu erzielen, ein besserer Algorithmus ist.

 

Daraus können wir die folgenden zwei einfachen Schlussfolgerungen ziehen:

1. Schleifenanweisungen sind sehr zeitaufwändig. Vermeiden Sie Schleifenanweisungen, wenn möglich

2. Um die eigenen Funktionen und Datenstrukturen der Programmiersprache (wie Listen, Wörterbücher usw.) voll auszunutzen.

 

Wenn Sie denken, addieren Sie die Summe von 1 bis 100 direkt. Ist es falsch, den Bereich (101) zu schreiben? Bitte lesen Sie Kapitel 6 des grundlegenden Tutorials: Durchlaufen der Python-Steuerungsstruktur (vier) Schleifenstruktur und -bereich.

 

Tatsächlich gibt es in dieser Frage einfachere Algorithmen wie folgt:

import time

start_time = time.time()

m=1
n=100000

sum = (m+n)*(n-m+1)/2
print(sum)

end_time = time.time()

print("elapsed: %f" % (end_time - start_time))
print("complete!")

运行结果:
5000050000.0
elapsed: 0.000000
complete!

Das Merkmal von Code 4 ist die Verwendung der Datenstruktur von Listen. Ich hoffe, dass jeder beim Programmieren bewusst die drei Strukturen von Listen, Wörterbüchern und Mengen verwendet, was das Programm erheblich vereinfacht.

 

Meine CSDN-Blogspalte: https://blog.csdn.net/yty_7

Veröffentlicht 55 Originalarbeiten · erntete Lob 16 · Ansichten 6111

Ich denke du magst

Origin blog.csdn.net/yty_7/article/details/104249198
Empfohlen
Rangfolge