Ansatz für eine Klasse, die sehr große Gleitkommazahlen darstellen kann
-
Jester schrieb:
Wo wird hier was nicht gezählt? Die O(n^1.58) sind hier tatsächlich schon der gesamte Aufwand.
Wie soll das denn gehen? In dem man davor genau sagt, wie lange im Vergleich zu einer Multiplikation eine Subtraktion dauert? Oo Es ist nur der Aufwand an Multiplikationen... Richtig ist nat., dass:
O(Addition) < O(Subtraktion) < O(Multiplikation) < O(Division)
gilt - und die Subtraktionen deshalb lange nicht so schwer ins Gewicht fallen wie die Multiplikationen. Aber wenn du sie bei der Berechnung gleich weglassen willst... Das kannst du immer nur, wennHä?? schrieb:
Addition fällt da nicht ins Gewicht, so lang die Anzahl sich maximal um ein konstantes Vielfaches von der Anzahl der Multiplikationen unterscheidet.
Gilt nat. auch für Subtraktionen - nur eben, dass dieses Vielfache dann kleiner ist...
Jester schrieb:
Die Schulmethode benötigt n Additionen -> O(n^2).
Nein, n Multiplikationen
Jester schrieb:
Eine Subtraktion ist genauso aufwendig wie eine Addition.
Nein?
Jester schrieb:
Karazuba benötigt von Additionen und Subtraktionen insgesamt deutlich weniger als die Schulmethode.
Wie oft subtrahierst
duin der Schulmethode denn? OoJester schrieb:
ahja, 2^n geht und 2^n-1 geht nicht... für welches n? Richtig ist: Die Zahl braucht eine 2er-Potenz an Stellen. Das erreicht man aber einfach, indem man die fehlenden Stellen (implizit) mit Nullen auffüllt.
Ja - und damit einen Mehraufwand gegenüber der Schulmethode hat...
Jester schrieb:
Ja, würde ich an Deiner Stelle mal machen, oder hier zumindest keinen Quatsch erzählen. Ist ja nicht schlimm, wenn man das nicht versteht, aber dann sollte man hier nicht so tun als sei das ein ganz großer Mist.
lol... Wenn ich mir hier noch mal all das durchlese, was du geschrieben hast, dann frag ich mich, wer hier weniger Ahnung hat... Der, der Addition nicht von Multiplikation unterscheiden kann und sagt, dass eine Addition genau die selbe Rechenzeit braucht wie eine Subtraktion? Sry, aber das is mir zu doof...
Außerdem habe ich extra am Ende noch mal ausdrücklich geschrieben, dass ich damit nicht sagen will, dass die Methode von K. doof ist oder gar langsamer als die Schulmethode
unskilled schrieb:
aber langsamer sollte er nicht sein, es sei denn, bei der Subtraktion läuft iwas grundsätzlich falsch ^^
Ich wollte damit nur sagen, dass ich den Performance-Gewinn "im Hobby-Bereich" nicht als sooo unendlich viel ansehe... Das ist nat. was komplett anderes, wenn du gerade versuchst, eine neue größte Primzahl zu suchen oder so... Und wenn ich das machen wöllte würde ich davor trotzdem noch eine effektivere Methode suchen (http://de.wikipedia.org/wiki/Sch%C3%B6nhage-Strassen-Algorithmus) - womit ich jz nicht sagen wollte, dass ich ihn angeguckt hätte, aber wenn ich etwas total schnelles brauche und nichts fertiges nehmen will, dann muss ich halt au ma in den sauren Apfel beißen und mir so was so lang angucken, bis ichs verstehe...
bb
-
Addition und Subtraktion haben eine kostante Laufzeit, sprich O(1). Beide!
-
@unskilled, wenn man keine Ahnung hat...du kennst den Spruch sicher.
O(Addition)=O(Subtraktion), oder anders gesagt Subtraktionen brauchen nicht getrennt beachtet zu werden, denn a-b=a+(-b). Unäres Minus bedeutet, dass das Vorzeichen gedreht wird, also sicher in konstanter Zeit möglich und somit ist der Aufwand von beiden gleich.
Übrigens gibt es kein < oder > für Mengen, zumindest müsstest du vorher definieren was du damit meinst. Ich schätze mal das Enthaltensein, dafür gibts bereits Symbole, aber da Latex ja derzeit nicht geht kann ich sie dir nicht zeigen. Kannst aber selber Suchen nach "Teilmenge" und "Obermenge".Jester als ahnungslos zu beschimpfen ist an für sich ja schon eine Frecheit, aber darum gehts jetzt erstmal nicht.
Das Problem ist, dass du nicht einmal erkennst, dass bei der Schulmethode O(n²) Multiplikationen vorkommen und O(n) Additionen (genaugenommen n Additionen).
Aber das spielt alles keine Rolle, da die Anzahl der Additionen in O(n) liegt und für die Anzahl der Multiplikationen gilt ω(n), das heißt die Anzahl der Multiplikationen wächst bei beiden Methoden echt schneller als linear und damit zählt einzig und allein der Aufwand für die Multiplikationen in Abhängigkeit von der Anzahl der Stellen n (wobei n die Anzahl der Stellen der größeren der beiden Zahlen ist).
-
danke.

btw hat sogar wikipedia die Analyse, samt Additionen und Subtraktionen: http://de.wikipedia.org/wiki/Karatsuba-Algorithmus#Laufzeitanalyse
-
Joar - sry... Hatte ich dann auch gelesen - davor hatte ich immer nur von vergleichen á la laufzeit(add) < laufzeit(sub) gelesen... allerdings waren das nie algorithmen sondern immer eher relativ (sehr ^^) alten maschinen, für die das galt...
an die tatsache, dass die laufzeit bei beidem linear ist, hab ich im eifer des gefächts nicht gedacht...
sry

-
Wobei man sagen muß, dass der Schönhage-Strassen-Algorithmus, den Du verlinkt hast, schon nochmal deutlich effizienter ist. Der Nachteil gegenüber der Methode von Karazuba ist, dass er viel komplizierter ist. Die Korrektheit von Karazuba kann man mit Schulmathematik und ein bißchen nachdenken einsehen. Was aber die Fourier-Trafo im Schönhage-Strassen-Algorithmus zu suchen hat, ist ohne tieferes mathematisches Verständnis nicht so ohne weiteres einzusehen.
Wenn es also um pure Effizienz geht, dann den. Wenn es aber drum geht ein bißchen besser zu sein als die Schulmethode und gleichzeitig noch genau zu verstehen was da abgeht, dann scheint mir Karazuba die einfacher Wahl zu sein.
-
Btw. hier mal nen Bild dazu (geklaut von Zahlentheorie Prof):
http://math-www.uni-paderborn.de/~k-heinz/de/forschung/m.gif
-
Da ist ja einiges zusammengekommen, danke.
Auch für die Diskussion, die hat mir geholfen.
Dennoch denke ich, dass mein Geschwindigkeitsverlust nicht nur an diesem Algorithmus liegt, sondern an meinem Code generell, sprich Strings als Behälter der Ziffern oder andere Funktionen von mir.
Kann mir jmd nen Profiler nennen und vlt. nen tutorial im internet(ich find da nix passendes), da ich keine ahnung habe, wie ich solche anwende.
Danke schonmal
-
Kann mir jmd nen Profiler nennen und vlt. nen tutorial im internet(ich find da nix passendes), da ich keine ahnung habe, wie ich solche anwende.
ADM Code Analyst. Eine Einführung gibts irgendwo auf der Seite des Programmes.
EDIT:
Download:
http://developer.amd.com/cpu/CodeAnalyst/codeanalystwindows/Pages/default.aspxEinführung:
http://developer.amd.com/documentation/articles/pages/1212200690.aspx
-
Danke für die schnelle Antwort drakon

-
Don Quijote schrieb:
Danke für die schnelle Antwort drakon

Und weils Heute schönes Wetter war, gibts sogar noch editierte Links.

-
Ist der nur Für AMD Prozessoren oder kann man den auch bei Intel Prozessoren verwenden?
-
Don Quijote schrieb:
Ist der nur Für AMD Prozessoren oder kann man den auch bei Intel Prozessoren verwenden?
Geht auch für Intel.
-
Danke, falls ich probleme bekommen sollte, dann melde ich mich
.mfg
Don Quijote