S
Ich glaub ich seh den Wald vor lauter Bäumen nicht mehr. Ich versuche mich grade daran, Bestimmte Mengen logisch zusammenzufassen und das ganze speicherplatzsparend zu optimieren.
Ich habe eine quasi unendliche Menge von Aussagen der folgenden Form:
+keyword:[min,max]
oder
-keyword:[min,max]
Zu verstehen ist das ganze dabei so, daß im ersten Fall ein Wert mit dem Bezeichner keyword ausschließlich zwischen Min und Max liegen darf, und er im zweiten Fall ausschließlich außerhalb besagter beiden Werte vorkommen darf.
Gut, parsen kann ich das ganze ja, aber nun hab ich eine Liste von Datensätzen, die ich so in einer ablegen muss, daß es möglich ist, alle diese Einschränkungen in vereinfachter Form in obigem Format wieder auszulesen.
Und als ob das noch nicht alles wäre, kann es natürlich auch noch passieren, daß Fehlerhafte Werte übergeben werden. Solche Fälle müssen dann mit einem Fehler abgefangen werden. Beispiel gefällig?
+wert:[0,50]
-wert:[3,4]
-wert:[10,20]
=> Alles okay
-wert:[0,50]
-wert:[3,4]
+wert:[10,20]
=> Fehler! 10 bis 20 sind ja schließlich verboten
Kurz gesagt: Ein Verbot zählt mehr, als eine freigegebener Wert.
Im wesentlichen kan man sich das wie jeden boolschen Ausdruck vorstellen, nur eben das schon beim optimieren erkannt werden soll, wenn das ganze eh nur ne leere Menge ergibt.
Um beim ersten Beispiel zu bleiben ist das ganze also gleichbedeutend, wie
(wert>=0 && wert<=50) && !(wert>=3 && wert<=4) && !(wert>=10 && wert<=20)
Jetzt sagte ich ja aber was von minimieren, und genau da fängt mein Problem an. Nehmen wir an, wir haben folgenden Fall:
+wert:[0,50]
-wert:[3,9]
-wert:[10,20]
Dann sollte da in minimierter Form
+wert:[0,50]
-wert:[3,20]
rauskommen.
Das ganze soll dann natürlich auch noch für alle Mengen funktionieren, die Element |R sind.
Ach so, noch ein Wort zum Sinn der ganzen Geschichte:
Bei dem Zahlenchaos handelt es sich um abgespeicherte Suchabfragen eines abzulösenden Produktdatenbanksystems.Problematisch dabei ist, daß das Frontend der ganzen Geschichte bestehen bleiben soll (ihr werdet es erraten haben: dieses generiert u.a. die Abfragen und will diese auch in optimierter Form wieder haben), und nur das Backend soll ersetzt werden. Das neue Backend (und das neu dazukommende Intranet-Frontend für den Außendienst) setzt dabei auf eine Anbindung an ein RDBMS (Fall jetzt einer fragt: Nein, ich hab mir das Chaos nicht ausgedacht ), so daß die Queries letztendlich auch noch in optimierte SQL-Abfragen übersetzt werden müssen.
Irgendwelche Tipps zum Algorithmus oder Litheratur-Hinweise wie ich die Optimierung am besten angehe?
Gruß Jens