AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign FreePascal Wo binäre Suche schneller, mit Array oder StringList?
Thema durchsuchen
Ansicht
Themen-Optionen

Wo binäre Suche schneller, mit Array oder StringList?

Ein Thema von AlexII · begonnen am 11. Mai 2015 · letzter Beitrag vom 12. Mai 2015
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#11

AW: Wo binäre Suche schneller, mit Array oder StringList?

  Alt 11. Mai 2015, 15:12
Nach gefilterter SQL Abfrage noch 100-1000?

Naja, solange es nicht über 100.000 werden, würde ich einfach alles in ein Array packen und danach immer sequenziell suchen. Wenn du deine SQL Abfrage nämlich so formulierst, dass die Termine nach Zeit sortiert zurückgegeben werden, dürfte die Suche schon nach sehr wenigen Elementen entweder die gesuchte Zeit gefunden haben, oder aber an einem Element angelangt sein, dessen Zeit größer der aktuellen Zeit ist (an dieser Stelle kannst du die Iteration dann abbrechen).

Immer wenn du einen Termin erfolgreich gefunden und abgearbeitet hast, erhöhst du einen internen Zähler um 1. Diesen Zähler nimmst du jeweils als Start-Index der Array Suche.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Wo binäre Suche schneller, mit Array oder StringList?

  Alt 11. Mai 2015, 15:13
Müsstest du nicht auch berücksichtigen, daß neue Termine in die Datenbanke eingetragen werden? Kann das passieren? Wenn ja, dann müsstest du sowiso die Datenbank sekündlich abfragen.

Wenn du nicht damit rechnen musst, daß jemand anderes einen Termin einträget, dann könntest du ja die Termine der nächsten 60 Sekunden abfragen und dann nach 60 Sek. wieder. Wieviel Termine könnten in 60 Sek vorkommen?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#13

AW: Wo binäre Suche schneller, mit Array oder StringList?

  Alt 11. Mai 2015, 15:14
Es ist doch trotzdem am einfachsten sich von der DB eine sortierte Liste aller (bzw. der ersten N) Termine ausgeben zu lassen.
Die kannst du dann ggf. einfach in dieser Reihenfolge in eine Liste schreiben und bei jedem Tick durchläufst
du die Liste von 0 bis zum ersten Termin der noch nicht eingetreten ist, tust was du tun musst für diese Termine
und löschst die abgearbeiteten Termine aus der Liste (und der DB).

Wie schon oben angedeutet: Du musst nicht jede Sekunde die DB abfragen. Wenn du dir alle (oder zumindest nen guten Vorrat) der
nächsten Termine zurückgeben lässt brauchst du nur am Anfang 1x oder ggf. nach ein paar Minuten/Stunden wenn die Liste leer ist/wird
deine Liste mit neuen Terminen auffüllen.
Meine Idee war so ähnlich... wollte nur wissen in welche Liste ich die sortierte Abfrage packen soll? TList vielleicht? Welche passt dazu am besten?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#14

AW: Wo binäre Suche schneller, mit Array oder StringList?

  Alt 11. Mai 2015, 15:16
Wieviel Termine könnten in 60 Sek vorkommen?
Unendlich viele, wenn man mehrere Termine zur selben Zeit anlegen kann

wollte nur wissen in welche Liste ich die sortierte Abfrage packen soll? TList vielleicht? Welche passt dazu am besten?
Ich würde ein Array of TMyRecord nehmen. TList geht natürlich auch, aber dann musst du alle deine Records/Objekte zur Laufzeit noch Heap-allocen, während du beim Array direkt den kompletten Speicherbereich in einem Rutsch reservierst.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#15

AW: Wo binäre Suche schneller, mit Array oder StringList?

  Alt 11. Mai 2015, 15:16
Müsstest du nicht auch berücksichtigen, daß neue Termine in die Datenbanke eingetragen werden? Kann das passieren. Wenn ja, dann müsstest du sowiso die Datenbank sekündlich abfragen.
Das muss ich natürlich auch beachten. Neue Termine können jede Zeit neu angelegt werden. Heißt also doch die DB jede Sekundlich abfragen! Oder nach Schreibvorgängen schauen, falls ein Schreibvorgang stattfindet die Termine neu laden.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#16

AW: Wo binäre Suche schneller, mit Array oder StringList?

  Alt 11. Mai 2015, 15:20
Müsstest du nicht auch berücksichtigen, daß neue Termine in die Datenbanke eingetragen werden? Kann das passieren. Wenn ja, dann müsstest du sowiso die Datenbank sekündlich abfragen.
Das muss ich natürlich auch beachten. Neue Termine können jede Zeit neu angelegt werden. Heißt also doch die DB jede Sekundlich abfragen! Oder nach Schreibvorgängen schauen, falls ein Schreibvorgang stattfindet die Termine neu laden.
Wenn du eh sekündlich ne Query raushauen musst, dann kannst du die Ergebnisse ja sogar ganz konkret bis auf die Sekunde genau filtern lassen. In dem Falle brauchst du gar nichts in ein Array oder eine Liste zuwischenspeichern.
Du weißt ja in diesem Falle genau, dass alle zurückgelieferten Einträge genau jetzt in diesem Moment ein Ereignis auslösen müssen. Dazu iterierst du dann einfach über das SQLResult.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#17

AW: Wo binäre Suche schneller, mit Array oder StringList?

  Alt 11. Mai 2015, 15:22
Müsstest du nicht auch berücksichtigen, daß neue Termine in die Datenbanke eingetragen werden? Kann das passieren. Wenn ja, dann müsstest du sowiso die Datenbank sekündlich abfragen.
Das muss ich natürlich auch beachten. Neue Termine können jede Zeit neu angelegt werden. Heißt also doch die DB jede Sekundlich abfragen! Oder nach Schreibvorgängen schauen, falls ein Schreibvorgang stattfindet die Termine neu laden.
Wenn du eh sekündlich ne Query raushauen musst, dann kannst du die Ergebnisse ja sogar ganz konkret bis auf die Sekunde genau filtern lassen. In dem Falle brauchst du gar nichts in ein Array oder eine Liste zuwischenspeichern.
Du weißt ja in diesem Falle genau, dass alle zurückgelieferten Einträge genau jetzt in diesem Moment ein Ereignis auslösen müssen. Dazu iterierst du dann einfach über das SQLResult.
Aber macht da die SQlite DB mit? Schafft sie überhaupt in der einen Sekunde die ganze Abfrage und Ausgabe?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#18

AW: Wo binäre Suche schneller, mit Array oder StringList?

  Alt 11. Mai 2015, 15:26
Obwohl... es reicht ja auch ein Mal pro Minute die DB abzufragen, die Sekunden werden beim Termineintrag ignoriert. Also nur 1x pro Minute, und das muss kein Problem sein!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#19

AW: Wo binäre Suche schneller, mit Array oder StringList?

  Alt 11. Mai 2015, 15:28
Müsstest du nicht auch berücksichtigen, daß neue Termine in die Datenbanke eingetragen werden? Kann das passieren. Wenn ja, dann müsstest du sowiso die Datenbank sekündlich abfragen.
Das muss ich natürlich auch beachten. Neue Termine können jede Zeit neu angelegt werden. Heißt also doch die DB jede Sekundlich abfragen! Oder nach Schreibvorgängen schauen, falls ein Schreibvorgang stattfindet die Termine neu laden.
Wenn du eh sekündlich ne Query raushauen musst, dann kannst du die Ergebnisse ja sogar ganz konkret bis auf die Sekunde genau filtern lassen. In dem Falle brauchst du gar nichts in ein Array oder eine Liste zuwischenspeichern.
Du weißt ja in diesem Falle genau, dass alle zurückgelieferten Einträge genau jetzt in diesem Moment ein Ereignis auslösen müssen. Dazu iterierst du dann einfach über das SQLResult.
Aber macht da die SQlite DB mit? Schafft sie überhaupt in der einen Sekunde die ganze Abfrage und Ausgabe?
Das WHERE Statement gibt es auch bei SQLite und wenn du einen entsprechenden Index setzt, wird die Abfrage auch in ordentlicher Zeit durchlaufen. Kommt halt auf die Größe der Datenbank an.
Müsstest du dir auch überlegen, ob es sinnvoll ist die vergangenen Termine wieder aus der Datenbank zu löschen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#20

AW: Wo binäre Suche schneller, mit Array oder StringList?

  Alt 11. Mai 2015, 15:32
... und wenn du einen entsprechenden Index setzt, wird die Abfrage auch in ordentlicher Zeit durchlaufen.
Was meinst Du mit dem Index?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 03:13 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