Sei und y zwei Binärzahlen mit n Bits und z = x ⋅ y die Binärzahl (Länge 2 n ) des Produkts von x und y . Wir wollen das signifikanteste Bit z 2 n - 1 des Produkts berechnen .
Um die Komplexität dieser Funktion im Modell von binären Entscheidungsdiagrammen (insbesondere von Einmal-Lese-Verzweigungsprogrammen) zu analysieren, versuche ich, nach äquivalenten Ausdrücken für den Fall zu suchen . Das erste offensichtliche Ding ist (hier sind und die entsprechenden ganzen Zahlen zu den Binärzahlen). Ich möchte eine Vorstellung davon bekommen, was passiert, wenn ich einige Eingabebits konstant halte. Wenn ich z. B. das höchstwertige Eingangsbit von und auf 0 setze, erhalte ich die konstante 0-Funktion. Bits mit geringerer Bedeutung haben jedoch keinen solchen Einfluss auf das Ergebnis.z 2 n - 1 = 1 ≤ x ≤ y ≥ 2 2 n - 1 x y x y
Gibt es andere äquivalente Ausdrücke für den Fall die mehr dazu beitragen, zu sehen, was passiert, wenn ich einige Eingabebits korrigiere? Gibt es verfeinerte Methoden, um das Produkt zweier Binärzahlen zu berechnen, die helfen können? Oder haben Sie eine andere Herangehensweise an dieses Problem?
Antworten:
Eine interessante Quelle ist DE Knuth: Die Kunst der Computerprogrammierung, Band 4, Fascicle 1, Bitwise Tricks & Techniques; Binäre Entscheidungsdiagramme , Addison-Wesley, Pearson Education 2009
Auf Seite 96 gibt es eine BDD für alle Bits von z = x⋅y, wobei x und y 3 Bits haben. Es zeigt sich, dass im Fall von 3 Bits BDD, das das höchstwertige Bit darstellt, 7 nicht-terminale Knoten aufweist. Siehe das Bild unten, ich habe es mit Ihren Indizes x = (x2, x1, x0) und y = (y2, y1, y0) neu gezeichnet.
Auf Seite 140 in Knuths Buch steht die Frage (Nr. 183), ob BDD das höchstwertige Bit für die Multiplikation zweier Zahlen mit unendlich vielen Bits darstellt (es wird "Begrenzung der führenden Bitfunktion" genannt) suchen nach! Die Antwort auf Seite 223 gibt die ersten Ebenen der resultierenden BDD an und erläutert die Anzahl der Knoten auf allen Ebenen. Leider gibt es keinen Algorithmus zum Erstellen einer solchen BDD.
Abb. 1: Das höchstwertige Bit zur Multiplikation von (x2, x1, x0) * (y2, y1, y0)
quelle