001
05.06.2003, 16:17 Uhr
Bruder Leif
dances with systems (Operator)
|
Moin!
Kommt drauf an, was Du machen willst. Faustregel:
Array: Wenn Du 1. Weißt, wie viele Elemente Du speichern willst, 2. Über ihre Nummer sehr schnell darauf zugreifen willst und 3. diese Nummer im Idealfall einfach hochgezählt wird. Und Du keine Lust hast, die STL zu verwenden oder eigene Algos zu programmieren ;-)
Hashtabelle: Wie Array, aber mit "beliebigem" Index statt Ganzzahl. Praktisch, wenn Du einen String als Indexer benutzen willst, oder wenn Du relativ wenige Werte speichern mußt und deren "gedachte Indexwerte" sich stark unterscheiden oder einen wesentlich größeren Speicherbereich abdecken würden.
Mal ein Beispiel aus meinem Studium: Ein Krankenhaus weist jedem Patienten eine "I-Zahl" als eindeutige Patientennummer zu. Die setzt sich nach dem Muster TTMMJJNNGM zusammen, wobei:
TTMMJJ = Geburtsdatum (das Prinzip stammt aus den 70ern, über Y2k hat damals noch niemand nachgedacht) NN = "Verschlüsselung" des Namens nach den Anfangsbuchstaben G = Geschlecht, 0/1 M = Mehrfachbelegung, falls mehrere Patienten des selben Geschlechts am selben Tag Geburtstag haben und den selben Namenscode bekommen. Ab 10 ist also Schicht
Das Problem dabei ist, wenn Du jetzt, sagen wir, 10'000 Patienten, also etwa so viel, wie ein durchschnittliches Krankenhaus in einem Monat aufnimmt, in einem Array speichern wolltest, wobei die I-Zahl (für den Begriff gehört der Prof geschlagen *grummel*) den Index im Array angibt, wären das 7,3 * 10^7 Einträge. In einer Hash-Tabelle mit der I-Zahl als Indexer sind es "nur" 1 * 10^4 Einträge. Nachteil: In der Regel (!) hast Du keine Chance, den Einträgen eine Reihenfolge zuzuweisen.
Verkettete Liste: Wenn Du beim Programmieren noch nicht weißt, wie viele Einträge Du speichern mußt. Oder die Einträge sortiert wieder ausgeben willst. Nachteil: Wenn Du NUR das 5073. Element in der Liste haben willst, mußt Du erst durch die 5072 davor iterieren. Und das Sortieren dauert ne Weile...
Binärbaum:: Im Prinzip eine spezielle verkettete Liste, besonders praktisch, wenn Du Deine Daten vorsortiert halten willst und sehr schnell auf einzelne Elemente zugreifen willst. Bessere Implementierung für eine Hash-Tabelle als die verkettete Liste. Wenn ein Baum über längere Zeit bestehen soll, besser einen rot/schwarz-Baum oder gleich einen B(*)-Baum verwenden, sonst degeneriert er allmählich zur verketteten Liste und der Geschwindigkeitsvorteil ist dahin... -- Mit 40 Fieber sitzt man nicht mehr vor dem PC. Man liegt im Bett. Mit dem Notebook. |