AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein FreePascal Schnellere Alternative zu PosEx ?
Thema durchsuchen
Ansicht
Themen-Optionen

Schnellere Alternative zu PosEx ?

Ein Thema von Solstice Projekt · begonnen am 17. Sep 2020 · letzter Beitrag vom 17. Sep 2020
Antwort Antwort
Solstice Projekt

Registriert seit: 30. Aug 2020
5 Beiträge
 
#1

Schnellere Alternative zu PosEx ?

  Alt 17. Sep 2020, 11:30
Grüsseuch!

Ich hab' eine allgemeine (also nicht nur TextZeichen wie PosEx) MusterSuche geschrieben, welche PosEx um Längen schlägt.

Ich hab' versucht, schnelle Implementationen für Alternativen zu finden,
aber irgendwie kommt dabei nichts Gutes heraus. Ich hab' Libraries gesucht,
welche es mir ermöglichen, anständige Benchmarks zu erstellen, damit ich Vergleiche hab' ... aber ohne Erfolg.

In FPC gibt es eine, oder mehrere?, Implementation eines Such-Algorithmus,
wie zB. FindMatchesBoyerMooreCaseSensitive, aber die ist noch viel langsamer als PosEx.

Ich weiß leider nicht, wie ich mir diesbezüglich selbst helfen kann.
Die letzte Möglichkeit, scheint zu sein, dass ich C installieren muss, damit ich Such-Algorithmen von GitHub zum Vergleich benutzen kann,
aber da ich kein C kann und mich nicht mit den potentiellen Problemen konfrontieren möchte, ist das nur eine letzte Option.

Kann mich da jemand in die richtige Richtung lenken?

Danke!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Schnellere Alternative zu PosEx ?

  Alt 17. Sep 2020, 12:02
Reguläre Ausdrücke

https://wiki.freepascal.org/Regexpr
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Schnellere Alternative zu PosEx ?

  Alt 17. Sep 2020, 12:18
Zitat:
FindMatchesBoyerMooreCaseSensitive, aber die ist noch viel langsamer als PosEx
Wer Äpfel mit Birnen vergleicht und sich dann beschwert, dass die Birne zwar besser ist, aber leider nicht apfelig schmeckt, und sich fragt ob die Pflaume das besser machen könnte ......

In Delphi gibt es auch noch Delphi-Referenz durchsuchenSystem.Masks, wobei es dieses Delphi-Referenz durchsuchenMatchesMask auch im FreePascal/Lazarus geben sollte. (kann sein dass es anders heißt ... einfach mal beim TMaskEdit suchen)
$2B or not $2B
  Mit Zitat antworten Zitat
Solstice Projekt

Registriert seit: 30. Aug 2020
5 Beiträge
 
#4

AW: Schnellere Alternative zu PosEx ?

  Alt 17. Sep 2020, 12:39
Ah, vielen Dank. Ich seh' mir das an.


Zitat:
FindMatchesBoyerMooreCaseSensitive, aber die ist noch viel langsamer als PosEx
Wer Äpfel mit Birnen vergleicht und sich dann beschwert, dass die Birne zwar besser ist, aber leider nicht apfelig schmeckt, und sich fragt ob die Pflaume das besser machen könnte ......

In Delphi gibt es auch noch Delphi-Referenz durchsuchenSystem.Masks, wobei es dieses Delphi-Referenz durchsuchenMatchesMask auch im FreePascal/Lazarus geben sollte. (kann sein dass es anders heißt ... einfach mal beim TMaskEdit suchen)
Danke, ich schau mal.

Inwiefern vergleiche ich Äpfel mit Birnen?

Es ist nicht *viel* langsamer als PosEx, aber so weit ich die Messungen in Erinnerung hab', kam's doch vor.
Ich sitz' schon zu lange an dem Ganzen.
  Mit Zitat antworten Zitat
Solstice Projekt

Registriert seit: 30. Aug 2020
5 Beiträge
 
#5

AW: Schnellere Alternative zu PosEx ?

  Alt 17. Sep 2020, 12:53
Hab' in meinem Leben noch nie regex benutzt, um ehrlich zu sein.
Das Beispiel Programm zum Suchen eines Strings hab' ich jetzt ausprobiert.
Viel zu langsam, was aber scheinbar eh zu erwarten war, da das Teil ja hochkomplex zu sein scheint.

Oder ich mach was falsch. Mal sehen. Nein, ist korrekt.

Trotzdem danke!

Geändert von Solstice Projekt (17. Sep 2020 um 13:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Schnellere Alternative zu PosEx ?

  Alt 17. Sep 2020, 16:08
Ups, mir war so, dass dieses Boyer-Moore eine "Ähnlichkeitssuche" war,
ähnlich zu Soundex, Levenshtein, Jaccard oder Metaphone.

RegEx ist eine (noch aufwändigere aber hoch optimierte) Mustersuche.

Und Pos sowie PosEx ist eine Binärsuche.



OK, rein vom Ergebnis sind Boyer-Moore und Pos/PosEx (wobei ich glaube Delphi hat seit über 10 Jahren die PosEx vom FastStrings-Projekt übernommen) "gleich".

Aber bei kurzen Texten wird der "Aufwand" für die Such-Optimierung im Boyer-Moore wesentlich mehr Rechenleistung/Zeit verbraten, als die eigentliche Suche,
womit es dann dem "dummen" PosEx unterlegen ist. (außer bei sehr langen/großen Texten)
$2B or not $2B

Geändert von himitsu (17. Sep 2020 um 16:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#7

AW: Schnellere Alternative zu PosEx ?

  Alt 17. Sep 2020, 16:23
Um evtl. auch brauchbare Antworten geben zu können:

1. Suchst Du für Delphi oder FPC?
2. Welche Art von Muster magst Du unterstützen (einfach wir * und ?, oder eine LIKE-Implementation, oder komplexe Dinge wie RegEx)?

Inwiefern vergleiche ich Äpfel mit Birnen?
Du vergleichst eine Mustersuche mit mit PosEx - was keine Mustersuche unterstützt. Daher Äpfel und Birnen.

Im Allgemeinen werden Mustersuchen immer langsamer sein, als eine einfache Pos(Ex) Suche. Für längere Suchstrings ließe sich PosEx sicherlich optimieren. Siehe auch FastStrings.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  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 17:31 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