019
03.05.2009, 11:58 Uhr
Manfred-BW
|
Hallo Oxdeadbeef,
Deine Antworten haben mir etwas weitergeholfen. Leider wurden nicht alle Fragen bezüglich C++ beantwortet:
was bedeutet im Beispielprogramm nr[y1]=1 und wofür wird das benötigt?
Zitat: |
...das ganze ist mit der 3D-Tabelle ohne weiteres in O(n) implementierbar...
|
Wie macht man das?
Das Beispielprogramm kann übrigens nicht funktionieren wegen der Zeile
Zitat: |
if(m2[m[i][z1]][m[i][z2]][m[i][z3]]!=0) cont1=100;
|
Sobald eines der 20 Tripel bereits markiert ist wird cont1=100 und damit wird die folgende Routine zum markieren vorhandener Tripel übersprungen.
Zum Beispiel ist die erste Zeile 2-3-4-5-6-7. Alle 20 Tripel werden markiert.
Wenn nun die Zeile 2-3-4-8-9-10 ist, dann ist das Tripel 2-3-4 bereits markiert und das Tripel 8-9-10 wird nicht als vorhanden markiert, weil die Routine zum markieren durch cont1=100 übersprungen wird.
Es gibt nicht nur 2960 verschiedene Tripel im C++ Beispiel, sondern 17296 verschiedene, wie mein Basic Programm zählte.
Gruß, Manfred-BW
An alle Leser:
Gibt es hier im Forum eventuell noch andere Leute, die bereit sind mir weiterzuhelfen, oder ist das Wissenspotential bzw. Hilfepotential hier bereits erschöpft?
Inzwischen bin ich so weit, daß ich verstanden habe, daß der Geschwindigkeitsgewinn beim Tripel zählen darauf beruht, daß vorhandene Tripel aus einer zweidimensionalen Tabelle mit Kombinationen von jeweils 6 Zahlen in einem dreidimensionalen Feld als vorhanden markiert werden. Jede Position in diesem dreidimensionalen Feld kann man sich als einen kleinen Würfel vorstellen. Die Würfel selber stellen ein Tripel dar. Der Inhalt der Würfel ist beim initialisieren null. Für jedes vorhandene Tripel aus 6 Zahlen wird dessen Inhalt im dreidimensionalen Feld um 1 erhöht.
Die Würfelanordnung im dreidimensionalen Tripelfeld m2 kann man sich so vorstellen:
Achse senkrecht nach unten: Skala für m[i][z1]
Achse waagrecht nach rechts: Skala für m[i][z2]
Achse nach hinten in die Tiefe: Skala für m[i][z3]
Ich bin gerade dabei, das dreidimensionale Feld in GFA-Basic 32 aufzubauen und ich versuche dann die Tripel zu markieren. (Der Geschwindigkeitsvorteil liegt meiner Meinung nach nicht nur am C++ Programm, sondern hauptsächlich am dreidimensionalen Feld welches verwendet wird. Ich denke da werden automatisch Zeiger verwendet, ohne daß man diese deklarieren muß)
Anschließend brauche ich eine Routine um die Tripel mit ihrer Häufigkeit auszulesen und in eine zweidimensionale Tabelle einzutragen.
Die Frage ist für mich noch, ob ich erst alle verschiedenen Tripel mit 1 kennzeichnen muß und in einem zweiten Programm anschließend alle mit dem Inhalt 1 in ihrer Häufigkeit zähle, oder ob ich bei jedem neuen erscheinen eines Tripel dieses hochzählen kann, oder ob jedes Tripel - auch identische -(durch verschiedene i-Indexe) einen eigenen Namen hat, so daß nicht sofort hochgezählt werden kann (was ich vermute).
Wenn ich eine funktionierende C++ Vorlage hätte, könnte ich das schneller fertig kriegen.
Es nützt mir nichts wenn jemand sagt, daß er es in C++ hinbekommen hat und sich dann nicht mehr meldet. Oder geht es in diesem Forum nur darum, Geld mit Programmierung verdienen zu wollen? Nach dem Motto "Ich weiß etwas was Du nicht weißt, und wenn ich es dir sagen soll, dann mußt Du zahlen"? Die erste Antwort von Hans auf meine Frage war ja bereits in diesem Stil verfaßt.
Gruß, Manfred-BW |