Seite 2 von 2

Verfasst: 25.11.2007 17:24
von #NULL
die sache ist die, dass du dir für pointer-arrays eben funktionen wie Add, Delete ect. selber schreiben mußt (oder sonstige operationen die du brauchst, welche für LLs ja schon vorhanden sind). das ist kein problem aber wie diese implementiereung im einzelnen aussehen hängt auch von deinen daten(strukturen) ab. wenn du solche funktionen varaiabel für mehrere arrays verwenden willst, dann musst du z.b. das array als parameter übergeben. (leider steh ich grad aufm schlauch und weiß selber nicht wie man ein pointer array übergibt :roll: )
(und ja, mein code geht so nicht. weiß nicht was ich da letzte nacht gebacken hab <) )

Verfasst: 25.11.2007 19:07
von nexus72
Hallo #Null,

trotzdem vielen Dank, dass Du Dir die Zeit genommen hast mir zu helfen.
Ich hab ja auch die Tutorials durchgelesen und naja, wenn man anfängt,
sieht man den Wald vor lauter Bäumen nicht. Das Problem ist das
Umsetzen des theoretischen Wissens.

Vielen Dank nochmal und viele Grüße

Verfasst: 25.11.2007 21:03
von NicTheQuick
@nexus72:
Du kannst die Ausführungszeit deines Codes schonmal durch eine Zeile
erheblich verringen:

Code: Alles auswählen

  ForEach DB1Zeile()
    If DB2Zeile()\qStringHash=DB1Zeile()\qStringHash
      lx.l = 1
      Break     ;<--- Hier ist was neues!
    EndIf
  Next
Somit wird beim Finden einer Übereinstimmung direkt abgebrochen und nicht
noch der Rest von 'DB1Zeile()' durchsucht, auf den es jetzt ja nicht mehr
ankommt.

///Edit:
Hab DB2Zeile() durch DB1Zeile() ersetzt.

Verfasst: 25.11.2007 23:06
von nexus72
Hallo NicTheQuick,

da spart man sich ja evtl. das Vergleichen von einigen 10.000 Datensätzen.
Wahnsinn. Vielen Dank für den Tip.

Viele Grüße

Verfasst: 25.11.2007 23:44
von NicTheQuick
Ehrlich gesagt, hat es mich gewundert, dass das vorher noch niemand
gesagt hatte.

Es kommt übrigens nicht darauf an, ob man Pointer verwendet oder nicht.
Es muss mit Pointern nicht schneller gehen als so wie es jetzt ist.
Bei deinem Problem sollte man sich eher eine andere Strategie überlegen.
Wenn es zum Beispiel nicht auf die Reihenfolge ankommt, könnte man die
Datenbank von Anfang an sortieren, also alle Stringhashes der Größe
nach in die Liste tun. Das kannst du schon beim Erstellen der Liste mit
einem abgewandelten Quicksort tun, der allerdings nur auf Arrays
funktioniert.
Wenn du jetzt eine geordnete Datenbank hast, kannst du viel leichter nach
einem Hash suchen. Das funktioniert wiederum mit einem abgewandelten
QuickSort.
Zum Beispiel gehst du zum Suchen eines Elements wie folgt vor.
Pseudocode:

Code: Alles auswählen

Funktion Suche(zusuchen, erstes, letztes, liste)
  mitte = (erstes + letztes) / 2
  wenn zusuchen < liste(mitte)
    gibzurück Suche(zusuchen, erstes, mitte - 1, liste)
  sonst wenn zusuchen > liste(mitte)
    gibzurück Suche(zusuchen, mitte + 1, letztes, liste)
  sonst
    gibzurück liste(mitte)
EndeFunktion

GibAus Suche(?, 0, elementanzahl, liste)

Verfasst: 27.11.2007 09:10
von nexus72
Hallo NicTheQuick,

ahso, ich dachte man könnte mit Pointer eine schnellere
Verarbeitung herbeiführen. Jedoch, wenn sich dies nicht
zwingend daraus ergibt. Hm.

Also es kommt nicht unbedingt auf die Reihenfolge an.

"mk-soft" hatte mir ja freundlicherweise ein Code-Beisp.
hier gepostet. Von der Theorie, da ich mir alle zur
Verfügung stehenden Tutorials durchgelesen habe,
denke ich das ich es verstehe.
Nur wie schon geschrieben, ist es manchmal schwierig,
die Theorie in die Praxis (in den Code) umzusetzen.

Ich muss ja, anhand des Bsp. von "mk-soft" noch
ein zweites Array für die DB2 erstellen, auf der Basis
des Bsp.
Also bin ich mir noch nicht sicher, ob ich an den
Prozeduren (Code) noch Anpassungen vornehmen muss,
damit ich nicht nur ein Array sonder zwei Array verarbeiten
kann.

Tja, und anschließend werde ich mich noch mit Deinem
Vorschlag über Quicksort bzw. über das Suchen eines
Elementes zur Gemüte führen müssen.

Wenn man so anfängt, sieht alles aus wie ein Berg über
den man nicht drüber weg kommt. Aber für Euch als
alte Hasen ist das wahrscheinlich nur ziemlich einfach.

Also werde ich mich weiter daran versuchen.

Nochmals vielen Dank für die Tipps und die Mühe.

Viele Grüße