Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.10.2008, 19:08

schnelle suche bei großen Datenmengen

hallo,

angenommen man hat ein paar tausend Datenpackete, welche mit einem eindeutigen Namen gekennzeichnet sind. Wie kann man denn diese Datenpackete am besten abspeichern, damit man nach diesem Namen sehr schnell suchen kann ?
Wenn man eine doppelt verkettete Liste verwendet, kann man ja immer nur Eintrag für Eintrag durchsuchen und das dauert leider etwas zu lange :(

Ich habe leider keinen genauen Ansatz, wie man so ein Problem lösen kann.

Eine Idee wäre die Map der STL, weis aber nicht genau ob das schnell genug sein könnte.

Danke für Hilfe :)

2

21.10.2008, 19:28

Afaik reduziert der einsatz eines binären Suchbaums die Anzahl der Durchläufe von n auf lg(n) und sollte damit schnell genug sein. Viel schneller wirds nicht mehr.

3

21.10.2008, 19:31

Danke für die schnelle Antwort, werde mir gleich mal Informationen darüber beschaffen!

Könnte das Thema "Hashcode in Datenbanken" auch interessant sein, oder sind Suchbäume schneller ?

4

21.10.2008, 19:39

Zitat von »"theNoob"«

Danke für die schnelle Antwort, werde mir gleich mal Informationen darüber beschaffen!

Könnte das Thema "Hashcode in Datenbanken" auch interessant sein, oder sind Suchbäume schneller ?
Wäre sicher auch eine Möglichkeit (mit Hash hab ich mich noch nicht ausgiebig beschäftigt) aber afaik muss dafür immer der exakte Name bekannt sein. Wenn nur der Anfang des Namens bekannt ist sollten Suchbäume die bessere Lösung sein (korrigiert mich wenn ich falsch liege)

Wie groß ist dein Datenbestand denn?

5

21.10.2008, 19:41

Der Name ist exakt bekannt ;-)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

21.10.2008, 19:51

Wenn du nach einem Namen suchen willst, dann is eine Hashmap/table sicherlich eine gute Lösung. Natürlich haben auch Hashmaps/tables ihre Problemchen...

Suchen in einer C++ Map geht generell in logarithmischer Zeit ( O(log n) ) und ist (von der Komplexitätsklasse her) damit laufzeitoptimal. Vergleichsbasiertes Suchen geht nicht schneller als in log n ...

7

21.10.2008, 20:16

Zitat von »"dot"«

Vergleichsbasiertes Suchen geht nicht schneller als in log n ...
Gibt es denn nicht vergleichsbasiertes Suchen? ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

21.10.2008, 20:22

sry, vergiss was ich grad gesagt hab. das war natürlich kompletter käse. ich sollte nach 10h uni wohl besser nicht mehr über sowas schreiben...

(ersetzen wir "suchen" durch "sortieren" und "log n" durch "n log n" und dann is meine aussage richtig, aber hat mit der frage nix mehr zu tun^^)

9

21.10.2008, 20:31

Naja, std::map ist sicherlich shcon n ziemlich gutes Allroundwerkzeug.

Wenn es extrem wird, kannst du natürlich was eigenes, potentiell besseres schreiben. Ich würde erstmal mit z.B. Testdaten zu gucken, ob das schon reicht.
Es gibt auch eine hashmap in der STL, das wäre wohl auch ein Blick wert.

Dann könnte man natürlich noch sowas machen wie, wenn du z.b. weißt, die ersten 2 Zeichen sind auf jeden Fall Buchstaben ein Array mit 26^2 Elementen machen, oder sogar noch mehr, wo dann jeweils z.B. eine Map zu allen Namen die genau diese 2 Anfangsbuchstaben haben. Verbraucht natürlich bissle speicher, aber du hast in Konstanter Zeit Zugriff auf eine Map mit schonmal x Buchstaben weniger, das ist könnte sich durchaus lohnen.
Lieber dumm fragen, als dumm bleiben!

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

10

21.10.2008, 20:40

Wikipedia ist da sehr hilfreich. Eine recht schöne Übersicht über mögliche Techniken und das wichtigste: Links auf verschiedene Algorithmen:
http://de.wikipedia.org/wiki/Suchverfahren

Werbeanzeige