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 4 von 4   « Erste     234   
AlexII

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

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

  Alt 12. Mai 2015, 08:11
Ok... also es ist folgendes, es geht um einen Wecker. Dieser soll nach mehreren (Hunderte, oder Tausende) Terminen "Ausschau" halten, und bei angegebener Zeit Alarm schlagen. Das heißt, dass ich jede Sekunde die aktuelle Uhrzeit mit der in der DB vergleichen muss. Nun suche ich wie ich das am besten mache. Eine binäre Suche wäre schon sinnvoll, oder?
In meiner Terminverwaltung mache ich das so, daß ich im Datenmodul eine Public-Methode bereitstelle. Beim Programmstart wird der nächste Termin in einer Variablen gespeichert:
Delphi-Quellcode:
Function DatMod.GetNextAlarmDate : TDateTime;
Begin
  Query.Active := False;
  Query.SQL.Clear;
  Query.SQL.Append('select TERMINDATUM, ALARM from TERMINE');
  Query.SQL.Append('where ALARM = 1'); // Boolsche Variablen werden z.B. in Firebird als 0 und 1 gespeichert
  Query.SQL.Append('order by TERMINDATUM'); // das "kleiste" Datum steht am Anfang
  Query.Open;
  Query.Last; // an das "größte" Datum springen
  Result := Query.FieldByName('TERMINDATUM').AsDateTime;
  Query.Active := False;
  Query.SQL.Clear;
End;
Dieses Resultat speichere ich nun in einer Variablen, die in der Ereignisbehandlung vom Timer mit der aktuellen Uhrzeit verglichen wird. Ist das Datum erreicht, klingelts und in der Alarm-Methode wird dann wieder der nächste Termin in diese Variable gesetzt. Empfehlenswert ist auch eine Spalte, die angibt, wieviele Sekunden oder Minuten vor dem eigentlichen Termin der Alarm losgehen soll oder auch eine Variable, die diese Zeit für alle Termine gleich behandelt.
Cool, danke für das Beispiel... ich schaue es mir an.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#32

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

  Alt 12. Mai 2015, 12:41
Das sollte auch so gehen
Code:
select min (TERMINDATUM) from Termine where Alarm=1
oder
Code:
select first 1 TERMINDATUM from Termine where Alarm=1 order by TERMINDATUM
Vorteil: Beide liefern nur einen Datensatz zurück, anstatt alle.
Die erste Variante ist eigentlich so, "wie man es macht".

Aber wenn Du alle Termine eh benötigst, ist natürlich Perlsau's Variante vorzuziehen (bis auf die letzten Zeilen natürlich),
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#33

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

  Alt 12. Mai 2015, 16:02
Code:
Select ID FROM Termine order by ID,DESC LIMIT 1;
if ID > LastID then
Code:
Select ID,AlarmTime FROM Termine Where (ALARM=1) and (AlarmTime > "+FormatDateTime('yyyy-mm-dd hh:nn:ss',[NOW]+'")' order by AlarmTime,ASC LIMIT 10;
hmm
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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