Entwurf eines Python-Algorithmus – binäre Additionsmaschine mit endlichen Zuständen

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!

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:
Fügen Sie hier eine Bildbeschreibung ein
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:

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!

Ich denke du magst

Origin blog.csdn.net/qq_44000141/article/details/123167771
Empfohlen
Rangfolge