AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schnellstmöglich Wert im Array finden ?

Ein Thema von myicq · begonnen am 7. Dez 2017 · letzter Beitrag vom 8. Dez 2017
Antwort Antwort
Seite 1 von 2  1 2      
myicq

Registriert seit: 5. Jan 2016
70 Beiträge
 
Delphi 6 Professional
 
#1

Schnellstmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 16:22
Hallo,

ich habe das Bedarf schnellstmöglich eine Wert in eine Statische Array zu finden.

Mein Array ist eine Datenbank, ändert sich nicht wenn einmal eingelesen, aber mein Programm muss eine Indexwert schnellstmöglich finden können. Die Daten sind zufällig, können Adressen sein, aber genau so gut PINs etc.

Heute mache ich das sequentiell mit Vergleich, geht aber ich brauche etwa 900 mSec für 5 Mio records.

Ich habe Zeit beim Einlesen der Datenbank eine art "index" zu bauen (ich durchsuche meistens 1. Spalte).

Aber wie mache ich das - brauche kleiner Beispiel.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.447 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 16:27
Hier ist ein Beispiel:
http://docwiki.embarcadero.com/CodeE...onary_(Delphi)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 16:29
Eine Lösung mit Delphi 6 Professional funktionieren?
900 Millisekunden für 5 Millionen Datensätze sind zu hoch -> welche Zeit wird angestrebt?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 16:38
Binäre Suche in einem sortierten Array.
Aber der Satz "Mein Array ist eine Datenbank" macht mir etwas sorgen
Ich denke dein Problem liegt tiefer und wahrscheinlich solltest du dein grundlegendes Vorgehen überdenken.
Das ist aber von außen ohne mehr Infos schwer zu sagen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#5

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 16:41
Delphi-Referenz durchsuchenTArray.BinarySearch, für ältere Delphi auch leicht selbst implementierbar (Bei Google suchenBinäre Suche).

Das Array muß natürlich sortiert sein.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#6

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 18:08
Für einen schnellen Zugriff würde ich eine Hashlist statt eines Arrays nehmen.
Damit spart man sich das "sortieren" beim auslesen.
Und das "suchen" beim Anzeigen eines Records fällt auch weg.
Capazität der Hashlist sollte in etwa doppelt so groß sein wie die zu erwartende menge an Records,
da das Einfügen in eine volle Hashlist länger dauert und diese Datensätze danach auch langsamer gefunden werden.(Je nach implementierung)
Bei 5 Millionen Records sind ein Hashwerte von 24 Bit aufwärts zu ermitteln.
Die Hashfunction sollte vor allem schnell sein.

Ich denke THashedStringlist stellt so etwas bereit.


Mittlere Suchzeit:
Hashlist O(1)
Sortiertes Array und Binärbaum O(Log N)
Sequentielle Suche O(N)

Wobei man sagen muss du gewinnst mit nem Sortierten Array schon ungemein, sparst dir halt ein paar millionen vergleiche
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 7. Dez 2017 um 18:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 22:17
Binäre Suche in einem sortierten Array.
Aber der Satz "Mein Array ist eine Datenbank" macht mir etwas sorgen
Ich denke dein Problem liegt tiefer und wahrscheinlich solltest du dein grundlegendes Vorgehen überdenken.
Das ist aber von außen ohne mehr Infos schwer zu sagen.


Wenn wirklich eine DB im Spiel ist, dann sollte dort gesucht werden, denn dafür ist eine Datenbank gemacht.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Schnellsmöglich Wert im Array finden ?

  Alt 8. Dez 2017, 07:45
Ein statisches Array mit 5 Mio Records?
Warum glaube ich das jetzt nicht?

Selbst bei maximaler Ausreizung des Stacks in einer 64Bit-Anwendung müsste das doch einen Stack-Overflow geben, oder?

Sorry, vergesst es.
Mit der Compiler-Direktive geht es. Nur die Einstellung in de Projekt-Optionen ist begrenzt.

Sinnvoll erscheint mir dieses Konzept aber trotzdem nicht.
Peter

Geändert von Jasocul ( 8. Dez 2017 um 08:29 Uhr)
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Schnellsmöglich Wert im Array finden ?

  Alt 8. Dez 2017, 08:47
Ich denke, mit statisch ist hier gemeint "unveränderlich".
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#10

AW: Schnellsmöglich Wert im Array finden ?

  Alt 8. Dez 2017, 08:51
Binäre Suche in einem sortierten Array.
Aber der Satz "Mein Array ist eine Datenbank" macht mir etwas sorgen
Ich denke dein Problem liegt tiefer und wahrscheinlich solltest du dein grundlegendes Vorgehen überdenken.
Das ist aber von außen ohne mehr Infos schwer zu sagen.


Wenn wirklich eine DB im Spiel ist, dann sollte dort gesucht werden, denn dafür ist eine Datenbank gemacht.

Gruß
K-H
Wenn er das nicht will...
Oder wenn es keinen Schlüssel in der DB auf der gesuchten Spalte gibt?
Man hat ja nicht immer Vollzugriff auf fremdadministrierte Datenbanken.
Wobei es dann irgendwann wohl sinnvoll ist die ganze Datenbank in eine eigene zu spiegeln...hm..stimmt.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz