Moin moin,
geschwindigkeitstechnisch auch keine Verbesserung: Gist
Dennoch eine kurze Erklärung zum relativ langen code:
Manche “Suchworte” tauchen doppelt auf, die verbleibenden sind größtenteils Teilmengen eines anderen Suchworts. Es lassen sich also (916) Suchgruppen bilden, beispielsweise:
” Duis autem” <- $wortEins
” Duis autem v”
” Duis autem vel”
” Duis autem vel e”
” Duis autem vel eum i” <- $wortZwei
etc.
Dadurch kann man also nach dem offset von $wortEins suchen, von dort weg prüfen ob $wortZwei am selben offset gefunden werden kann und weiß, dass alle worte zwischendrin ebenfalls an diesem offset beginnen müssen. Man reduziert also die Menge der zu suchenden Wörter einer Gruppe im besten Fall auf zwei, statt potentiell 20.
Die Idee war hier, die 10’000 Suchoperationen auf (im Idealfall) 1’832 (916 Gruppen * 2 Worte) zu reduzieren.
Das klappt soweit ja auch ganz gut, bringt aber durch den ganzen overhead mit sortieren, mehrfachem durchlaufen, und positions-cache-bildung keinen Geschwindigkeitsvorteil. Selbst wenn man den den Konformitätsfirlefanz (strpos, andere Ausgabereihenfolge, …) rauswirft, braucht mein Algo noch doppelt so lange wie das Beispiel der Aufgabenstellung.