Quellcode des Python-Algorithmus-Designs: https://github.com/MakerChen66/Python3Algorithm
Copyright-Erklärung: Originalität ist nicht einfach, dieser Artikel verbietet Plagiate, Nachdruck, Verstöße müssen untersucht werden!
Inhaltsverzeichnis
1. Binäre Addition | endliche Zustandsmaschine
Das Addieren von Binärzahlen kann so erfolgen, wie es in der Schule gelehrt wird. Merken Sie sich einfach 1 + 1 = 10 und befolgen Sie bestimmte Regeln. Zu dieser scheinbar einfachen Arithmetik gibt es viel zu sagen, man kann sich zum Beispiel die Implementierung eines Paralleladdierers ansehen, da sind viele interessante Dinge darin enthalten.
Ich habe mich für eine serielle Implementierung über eine Finite-State-Maschine entschieden, mit 4 Zuständen basierend auf Kombinationen von Ausgang 0/1 und Übertrag 0/1 und Gruppen von Übergängen basierend auf Eingangsbits.
Die Frage ist, braucht man wirklich vier Staaten? Tatsächlich können nur drei Zustände verwendet werden. Was können Sie finden?
Implementierung des Python-Algorithmus:
import itertools
p0c0 = 0, {
}
p1c0 = 1, {
}
p0c1 = 0, {
}
p1c1 = 1, {
}
# 各进程状态之间的转换
p0c0[1].update({
(0, 0): p0c0, (1, 0): p1c0,
(0, 1): p1c0, (1, 1): p0c1})
p1c0[1].update({
(0, 0): p0c0, (1, 0): p1c0,
(0, 1): p1c0, (1, 1): p0c1})
p0c1[1].update({
(0, 0): p1c0, (1, 0): p0c1,
(0, 1): p0c1, (1, 1): p1c1})
p1c1[1].update({
(0, 0): p1c0, (1, 0): p0c1,
(0, 1): p0c1, (1, 1): p1c1})
def add(x, y):
x = map(int, reversed(x))
y = map(int, reversed(y))
z = []
# 模拟自动机
value, transition = p0c0
for r, s in itertools.zip_longest(x, y, fillvalue=0):
value, transition = transition[r, s]
z.append(value)
z.append(transition[0, 0][0])
return ''.join(map(str, reversed(z)))
print(add('1100100100100', '100100011000'))
Notiz:
- itertools
ist das Iteratormodul von Python, das sehr nützliche Funktionen zum Bearbeiten iterativer Objekte bereitstellt, wie beispielsweise die Funktion zip_longest(). Die von itertools bereitgestellten Tools sind sehr effizient und sparen Speicher. Mit diesen Tools können Sie Ihre eigenen benutzerdefinierten Iteratoren für effizientes Schleifen erstellen. - zip_longest(it_obj1, …, it_objN,
fillvalue=None), die von seiner Funktion implementierten Funktionen sind ungefähr die gleichen wie die integrierte Zip-Funktion (realisieren eine Eins-zu-eins-Korrespondenz), basieren jedoch auf der integrierten Zip-Funktion Das Objekt mit den wenigsten Elementen, während die Funktion zip_longest auf dem Element basiert. Die meisten Objekte werden als Benchmark verwendet und die leeren Stellen werden mit dem Wert von fillvalue gefüllt - map(function,iterable,…) ordnet die angegebene Sequenz entsprechend der bereitgestellten Funktion zu. Die erste Parameterfunktion
ruft die Funktionsfunktion mit jedem Element in der Parametersequenz auf und gibt eine neue Liste zurück, die den Rückgabewert jeder Funktionsfunktion enthält. - Die binäre Addition beginnt ganz rechts, daher sollte die eingegebene Binärzahl mit der Funktion reversed() umgekehrt und nach der Operation umgekehrt werden
Ausgabeergebnis:
Wie in der Abbildung gezeigt, ist das Ergebnis der binären Additionsoperation 10001000111100, das Ergebnis ist korrekt
2. Herunterladen des Quellcodes
Download des Quellcodes für das Python-Algorithmus-Design:
- GitHub-Download-Link: Portal
- Link zum Originaltext: Lesen Sie den Originaltext
3. Informationen zum Autor
Autor: Xiaohong's Fishing Daily, Ziel: Programmieren interessanter machen!
Ursprüngliches öffentliches WeChat-Konto: „ Xiaohong Xingkong Technology “, mit Schwerpunkt auf Schulrekrutierung (Einführung/Bijing/Face-to-Face), Algorithmus, Crawler, Website, Spieleentwicklung, Datenanalyse, Verarbeitung natürlicher Sprache, KI usw., mit Blick auf die Zukunft Zu Ihrer Aufmerksamkeit, lassen Sie uns gemeinsam wachsen und programmieren!
Urheberrechtshinweis: Dieser Artikel verbietet Plagiate und Nachdrucke und Verstöße müssen untersucht werden!