Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   suche - such Algo (https://www.delphipraxis.net/5454-suche-such-algo.html)

Snoop007 6. Jun 2003 19:39


suche - such Algo
 
Hi,
ich habe mehrere einträge wechle ich durchsuchen müchte
das "problem" ich möchte nach stringwerten suchen und nicht nach dem index

welcher such algo suche würde sich dazu am besten eignen;
sequentielle suche ausgeschlossen ;)

DANKE !

Stanlay Hanks 6. Jun 2003 19:49

Was willst du durchsuchen? Eine Ini Datei, eine Datenbank?

Christian S. 6. Jun 2003 20:01

Außerdem interessant, ob die Einträge in irgendeiner Weise geordnet sind! Wenn Du schreibst, dass Du nach einem String suchst, wäre es z.B. interessant zu wissen, ob die Einträge anhand dieses Attributs vielleicht alphabetisch sortiert wurden.

Snoop007 6. Jun 2003 20:02

ein dynamisches string - array

Snoop007 6. Jun 2003 20:22

ah, hab die 2 frage leider zu spät gesehen
die einzelnen datensäze besitzen einen index, nachdem sind sie sortiert

Stanlay Hanks 6. Jun 2003 20:29

Dann geh mit einer For schleife die ganzen indexes durch.

Christian S. 6. Jun 2003 20:32

Was anderes fällt mir auch nicht ein. Wenn Du immer ausschliesslich nach Stringwerten in einem Attribut suchen willst, dann solltest Du Dir überlegen, ob Du die Datensätze nicht nach diesem Attribut sortierst und neue Datensätze direkt an der richtigen Stelle einsortierst!

Snoop007 6. Jun 2003 20:37

wie machen das denn die "grossen" datenbanken ?
die durchlaufen doch auch nicht alle einträge oder doch ?

MrSpock 6. Jun 2003 21:22

Hallo Snoop007,

die großen Datenbanken legen Indizes an, die eine schnelle Suche unterstützen. Der Index zeigt direkt die Stelle an, an der der Datensatz steht, so dass die Anwendung (das DBMS) direkt darauf zugreifen kann.

JoelH 6. Jun 2003 23:05

hmm,
 
genau so isses, dadurch werden die Indices oft grösser als die DB an sich gross ist ! Aber Time rulez.

Snoop007 6. Jun 2003 23:25

das mit dem index setzen ok, aber wie setzen die datenbaken dann aus den indezes die daten wieder zusammen ?

JoelH 7. Jun 2003 00:07

hmm,
 
ist eigentlich relativ einfach, der Index wird ja herbeigeführt,sagen wir mal alle begriffe mit mehr als 4 Buchstaben, dann wird dann die DB durchsucht und die entsprechenden Werte eingebaut. Das kostet eben nur einmal Zeit und viel Speicher, aber wennn man eine DB aht die sich nur unwesendlich ändert dafür aber oft durchsucht wird ist es genial !

Sharky 7. Jun 2003 06:14

Hai Snoop007,

sind die Daten in deinem Array denn sortiert? Wenn nicht wäre es sicher eine Überlegung wert das Array vor dem suchen zu sortieren.

Snoop007 8. Jun 2003 15:01

die daten sind nach dem index sortiert aber sonst nicht

die strucktur ähnelt einer adress DB

index, vorname, nachname ...

@JoelH, danke für deine erklärung, aber den sinn versteh ich dennoch nicht

sagen wir mal ich habe folgende datensätze
1 hans dieter
2 peter meiner
3 ullrich wiegandt
4 harald stein

wie könnte man die indezes setzen, damit ich recht leicht nach vornamen suchen kann ?

MrSpock 8. Jun 2003 19:40

Hallo snoop007,

da gibt es ganz ausgetüfftelte Strukturen und Suchalgorithmen. Es könnte z.B. so sein, dass sagen wir mal alle Namen die mit H beginnen in einem Binärbaum sortiert sind. Dann hangelt sich ein Algorithmus entlang der Zweige, bis er den Namen "hans dieter" gefunden hat. Dort findet er die Information, dass dieser Datensatz an der Stelle 176567 in der Tabelle steht, liest den Datensatz von dieser Stelle und das Ganze blitzschnell.

Wie gesagt die Theorie um Sortieralgorithmen ist sehr umfangreich und es ist auch eine gewisse Kunst eines DBMS die geschicktesten Sortieralgorithmen anzuwenden, um von einem Schlüssel den zugehörigen Datensatz schnell zu finden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 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