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
TiGü

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

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 15: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
 
#2

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 15: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 p80286
p80286

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

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 21: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.371 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Schnellsmöglich Wert im Array finden ?

  Alt 8. Dez 2017, 06: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 07:29 Uhr)
  Mit Zitat antworten Zitat
OlafSt

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

AW: Schnellsmöglich Wert im Array finden ?

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

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

AW: Schnellsmöglich Wert im Array finden ?

  Alt 8. Dez 2017, 07: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
Benutzerbild von Neutral General
Neutral General

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

AW: Schnellsmöglich Wert im Array finden ?

  Alt 8. Dez 2017, 08:35
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.
Wenn er das nicht will, dann ist er falls es keine weiteren guten Gründe dafür gibt selbst Schuld wenn das Ergebnis Müll ist.
Selbst wenn auf der Spalte nach der er Suchen will kein Schlüssel/Index drauf ist, ist eine Abfrage über eine Datenbank garantiert immer noch schneller.
Und er hat ja zumindest so viel Zugriff dass er die Daten die er braucht aus der Datenbank ausgelesen hat (vorausgesetz es existiert überhaupt irgendwo eine richtige Datenbank mit den Daten aus seiner Array-"Datenbank")..
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

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

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 15: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
QuickAndDirty

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

AW: Schnellsmöglich Wert im Array finden ?

  Alt 7. Dez 2017, 17: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 17:31 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 14:22 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