![]() |
Karatsuba-Verfahren implementieren?!
Hi!
Ich brauch mal etwas Hilfe. Undzwar bei dem Karatsuba-Verfahren. Ich muss eine TBigInteger.mult-Prozedur durch eine Methode ersetzen, die die Multiplikation gemäß dem Karatsuba-Verfahren implementiert. Kann mir hierbei jmd. weiterhelfen? Mit freundlichen Grüßen |
Re: Karatsuba-Verfahren implementieren?!
Hallo,
was ist denn konkret dein Problem? Wie sieht die TBigNumber-Klasse aus? Grüße vom marabu |
Re: Karatsuba-Verfahren implementieren?!
Wo genau hängst du?
Wenn ich mir den Algorithmus so anschaue, sieht der auf den ersten Blick nicht sonderlich kompliziert aus... Du teilst die Zifferfolgen in 2 gleich große Teile (mit führender 0 bei ungerader Zifferanzahl) und hast dann am Schluss eine Formel zur Berechnung des Produktes durch diese "Teilzahlen". Diese Berechnung geht eben rekursiv immer eine Ebene tiefer, bis du nur noch 1 Ziffer multiplizieren musst. |
Re: Karatsuba-Verfahren implementieren?!
Hallo Leute,
ich muss dieses Verfahren auch implementieren und habe mir dazu mal folgenden Pseudocode besorgt:
Delphi-Quellcode:
PROCEDURE Karatsuba(n: INTEGER; x, y: BigNumber): BigNumber;
VAR a, b, c, d, x1, x2, x3: BigNumber; BEGIN IF n = 1 THEN RETURN (x * y) ELSE "Berechne a, b, c, d"; x1 := Karatsuba(n DIV 2, a, c); x2 := Karatsuba(n DIV 2, b, d); x3 := Karatsuba(n DIV 2, a+b, c+d) - (x1 + x2); RETURN(ShiftLeft(x1, n) + ShiftLeft(x3, n DIV 2) + x2); END; (* IF *) END Karatsuba; Die Frage ist, da ich aus einer anderen Sprache komme, wie ich das am besten in Delphi implementiere ? Kann mir da jemand zu helfen ? gruß Dutch_OnE [edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit] |
Re: Karatsuba-Verfahren implementieren?!
Das ist do schon Delphi(Pascal)-Code
|
Re: Karatsuba-Verfahren implementieren?!
Was ich an der Sache nicht verstehe, ist die Gewährleistung der Rekursivität. Wie wird denn n verändert ?
|
Re: Karatsuba-Verfahren implementieren?!
n ist ein Eingangsparameter. Und die Rekursion ist durch den Aufruf der Prozedur durch sich selbst gewährleistet (x1 := ...)
|
Re: Karatsuba-Verfahren implementieren?!
ist n nicht die Länge des Multiplikators ?
Das mit der Rekursivität habe ich jetzt verstanden. n wird ja immer durch 2 geteilt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz