Die Internetseite von Martin Oppermann |
Herzlich willkommen auf meiner Internetseite!
Ich interessiere mich für Informatik und insbesondere für Sortierverfahren.
Deshalb werde ich hier in Zukunft ein wenig darüber schreiben und auch nach und nach die Quellcodes aller Sortierverfahren veröffentlichen, die seit dem Jahr 1985 von mir selbst entwickelt wurden.
Vorerst beschäftige ich mich voll und ganz mit der Verbesserung und anschließenden Veröffentlichung meines Sortierverfahrens "Babylonsort".
Danach werde ich mein Sortierverfahren "Structuresort" veröffentlichen, das ich ganz speziell für die Sortierung von Arrays entwickelt hatte, die über längere Abschnitte hinweg ansteigende, gleichbleibende oder absteigende Datenstrukturen aufweisen.
Ich beschäftige mich auch mit echten und simultanen Rekursionen (Rekursive Programmierung), HTML, KNN / ANN, PHP, Verschlüsselung und "Visual Basic" innerhalb von Excel.
Auch über diese Themen will ich in Zukunft ein wenig schreiben.
|
Bottom-Up-Heapsort - Ein Irrtum der Informatikwelt
|
Im Internet bin ich auf das Sortierverfahren Bottom-Up-Heapsort aufmerksam geworden, das als schnellere Variante von Heapsort bezeichnet wird.
Bottom-Up-Heapsort solle angeblich nur halb so viele Vergleiche bei der Sortierung benötigen wie Heapsort und deshalb doppelt so schnell sein.
Daraus solle sich dann auch ergeben, dass Bottom-Up-Heapsort im Durchschnitt immer schneller sortieren würde als Quicksort.
Weil ich sehr gut mit der Funktionsweise von Heapsort vertraut bin und auch schon selbst einen eigenen Quellcode davon entwickelt habe, der sehr schnell arbeitet, habe ich mich mal im Detail mit diesem Bottom-Up-Heapsort beschäftigt.
|
Mein Ergebnis:
Die Aussage dass Bottom-Up-Heapsort nur halb so viele Vergleiche wie Heapsort benötigen würde, ist nachweißlich falsch.
In Wirklichkeit ist die Anzahl nur um etwa 3% kleiner.
Zudem benötigt Bottom-Up-Heapsort etwa 10% mehr Vertauschungen beim Sortieren, weshalb es sogar langsamer als das normale Heapsort ist.
Dadurch hat sich auch der Mythos erledigt, dass Bottom-Up-Heapsort schneller als Quicksort wäre.
In Wirklichkeit ist Quicksort bis zu vier Mal schneller als Heapsort.
Soweit meine vorläufigen Untersuchungsergebnisse.
Ich werde die Angelegenheit zu einem späteren Zeitpunkt noch einmal ganz genau analysieren und auch Laufzeitmessungen durchführen.
Die neuen Ergebnisse werde ich dann mit Messkurven belegen, die die Anzahl der Vergleiche, Vertauschungen und Laufzeiten darstellen werden.
Für meine Messkurven werde ich die Situationen "Best-Case", "Worst-Case", "Identical-Case" und zufällig gemischte Arrays untersuchen.
Ich werde jeweils 1000 Arrays testen, wobei das erste 1000 Elemente und das letzte eine Million Elemente haben wird.
Die Anzahl der zu sortierenden Elemente, wird also bei jedem Array um 1000 Elemente ansteigen.
So werde ich dann wohl aussagekräftige Messkurven erhalten.
Dem Fehler auf der Spur:
Ich habe bereits Anhaltspunkte dafür gefunden, wie der falsche Mythos um Bottom-Up-Heapsort entstehen konnte.
Das Sortierverfahren wurde scheinbar immer nur theoretisch auf Grundlage von Pseudocodes bewertet, in denen beim Versickern der Elemente zwei Punkte angegeben sind:
1. Welcher der beiden Söhne ist größer? / 2. Vater mit größeren Sohn tauschen oder nicht?
Man war nun davon ausgegangen, dass man den zweiten Punkt weglassen könne, um die Elemente so immer bis zum Boden der Wurzel versickern zu lassen.
Anschließend müsse man sie dann nur wieder anheben, wenn der Heap einen kleineren Vater haben sollte.
Der falschen Theorie zufolge, solle man damit praktisch die Hälfte der Vergleiche eingespart haben.
Das Problem hierbei:
In der Realität funktioniert das nicht.
Selbstverständlich muss man zuerst immer überprüfen, ob sich die Position "Vater * 2" noch im Array befindet, oder nicht.
Dann muss man ebenfalls noch überprüfen, ob der linke Sohn noch einen rechten Bruder hat.
Würde sich der linke Sohn nämlich am Ende des Arrays befinden, dann wäre das nicht der Fall.
Erst als dritten Vergleich kann man nun die beiden Söhne miteinander vergleichen.
Daher spart man nicht die Hälfte der Vergleiche ein, sondern nur einen von vier.
Die Tatsächliche Anzahl der Vergleiche beim Sortieren mit Bottom-Up-Heapsort, ist also mindestens drei Mal größer als in der Theorie.
Und in der Realität ist sie sogar noch wesentlich größer, weil ich sehr oft beobachtet habe, dass sich das zuvor versickerte Element, vom Boden aus relativ häufig um die Hälfte seines vorherigen Weges wieder zurück nach oben bewegt, was bei jedem Schritt einen weiteren Vergleich und Vertauschung erforderlich macht.
Das ist der eigentliche Hauptgrund dafür, warum Bottom-Up-Heapsort nicht wie gedacht funktionieren kann und meistens sogar langsamer als das normale Heapsort ist.
Falls sich das zuvor versickerte Element in Sonderfällen sogar bis zu seiner Ausgangsposition an der Spitze der Wurzel zurückbewegen können sollte, dann wären sogar zwei Vergleiche pro Schritt erforderlich.
Ob es zu einer solchen Situation kommen kann, werde ich ebenfalls noch untersuchen.
Die fehlerhafte Annahme, dass man die Hälfte der Vergleiche einsparen könne, wurde auch dadurch begünstigt, weil alle Informatiker, die sich mit Bottom-Up-Heapsort beschäftigt haben, scheinbar komplett vergessen haben, dass sich Heapsort aus zwei Abschnitten zusammensetzt:
Im ersten werden alle Heaps in der Wurzel so geändert, dass der Vater immer größer als seine Söhne ist.
Hier kann man gar nichts einsparen, weil Heapsort ansonsten nicht richtig sortieren würde.
Erst im zweiten Abschnitt kommt dann die eigentliche Sortierung des Arrays.
Wenn man die ursprüngliche Theorie einmal in der Praxis getestet hätte, dann hätte der Irrtum sofort auffallen müssen.
Anstelle dessen hat man die Funktionsweise des neuen Sortierverfahrens einfach nur mit Formeln dargestellt, die aus den theoretischen Überlegungen hervorgingen.
So führte das Aufbauen auf diesen theoretischen Fehler, gleich zum nächsten:
Durch Vergleiche mit den Formeln von Quicksort, ging man nun davon aus, dass Bottom-Up-Heapsort sogar schneller als Quicksort sortieren würde.
Zweifel an der Funktionsweise hatte es zwar schon damals (etwa um 1966) gegeben, aber weil den frühen Kritikern keine neuen folgten, fand Bottom-Up-Heapsort mit seinen ganzen Fehlern sogar seinen Weg in Publikationen und Fachliteratur.
Auch in den modernen Internetdatenbanken ist Bottom-Up-Heapsort auch heute noch zu finden, ohne dass auf dessen Fehler hingewiesen wird.
Home
|
Veröffentlichung von Babylonsort
|
Im Sommer dieses Jahres wird hier an dieser Stelle ein komplett neuartiges Sortierverfahren mit dem Namen "Babylonsort" veröffentlicht werden.
Es arbeitet mit einer Sondervariante des "Teile-und-herrsche-Verfahrens", sortiert aber trotzdem stabil.
Bedeutet:
Alle identischen Elemente haben nach der Sortierung immer noch die gleiche Reihenfolge, wie vor der Sortierung.
Und das sowohl bei einer aufsteigenden und absteigenden Sortierung, denn Babylonsort kann wahlweise beides.
Aufruf:
|
Babylonsort L, R, UD, RX, RY, RS |
L: |
Beginn der Sortierung im Array |
R: |
Ende der Sortierung im Array |
UD: |
0 = aufsteigend / 1 = absteigend Sortieren |
RX: |
Erste zu sortierende Reihe der Datensätze |
RY: |
Letzte zu sortierende Reihe der Datensätze |
RS: |
Sortieren nach dieser Reihe der Datensätze |
|
Der Quellcode von Babylonsort:
Vorerst werde ich die rekursive Version veröffentlichen, weil diese viel einfacher zu verstehen ist.
Der Quellcode besteht aus sieben einzelnen Rekursionen, die sich situationsabhängig gegenseitig, aber auch selbst aufrufen können.
Die einteilige Variante von Babylonsort ist zwar deutlich schneller, weil sie ihre Arbeitsbereiche selbst verwaltet, macht jedoch zwingend Sprungadressen erforderlich, damit der Programmablauf direkt zu bestimmten Positionen im Quellcode springen kann.
Wie schnell sortiert Babylonsort?
Nun..., das möchte ich vor der Veröffentlichung lieber noch nicht verraten, denn dieses Sortierverfahren ist um ein vielfaches schneller wie alles, was man sich vorstellen kann.
Was wird Babylonsort kosten?
Der Quellcode wird - weil ich ihn als Hobby entwickelt habe - kostenlos sein und jeder darf ihn so verwenden wie er möchte.
Er darf auch auf andere Internetseiten hochgeladen oder in Fachzeitschriften abgedruckt werden, sofern ich als Autor genannt werde.
Home
|
Probleme bei der Verwendung von PHP 8.0 aufwärts
|
Mir ist bereits seit dem 28. August 2021 bekannt, dass es bei der Verwendung von PHP 8.0 zu massiven Problemen kommen kann.
Teilweise funktionieren Internetseiten gar nicht mehr und man sieht nur einen weißen Hintergrund.
Weil ich durch meinen Provider dazu gezwungen wurde auf Versionen von PHP ab der Version 8.0 umzustellen, habe ich am 6. Februar 2023 leider die Feststellung machen müssen, dass das Problem mit PHP 8.0 noch immer besteht und dass ebenfalls die Versionen 8.1 und 8.2 davon betroffen sind.
Was die anderen Nutzer genau für Probleme haben, kann ich natürlich nicht beurteilen, aber ich rate allen die PHP ab Version 8.0 verwenden wollen / müssen dringend dazu, die Funktionen aller verwendeten Befehle intensiv zu testen.
Die Lösung für mich:
Am Abend des 6. Februar 2023 habe ich dann endlich herausgefunden, was PHP ab der Version 8.0 bei mir für Probleme verursachte.
Es gibt zumindest bei meinem Provider den Befehl "fopen" nicht mehr, über den man früher Dateien speichern, erweitern und laden konnte.
Anstelle dessen muss man nun wie folgt programmieren:
Dateien laden:
|
$Datei = file_get_contents($Dateiname); |
Datei speichern:
|
file_put_contents($Dateiname, $Datei); |
Dateien erweitern: |
file_put_contents($Dateiname, $Text, FILE_APPEND); |
Home
|
Beim Softwarekauf auf Firma aus den USA reingefallen
|
Im Juni 2021 hatte ich auf meinem Computer leider versehentlich einige wichtige Dateien gelöscht.
Im Internet habe ich dann nach einer Software zur Datenrettung gesucht und war so - leider - auf die Software einer Firma aufmerksam geworden, die ich besser nie kennengelernt hätte.
Die Software wurde damit beworben, dass sie bei jeder Art von Datenverlust die Dateien mit einer Wiederherstellungsrate von 99,7% retten könne.
Man konnte die Software zudem gratis testen und im Falle eines Kaufs, wurde auf eine 30-tägige "Geld-Zurück-Garantie" hingewiesen.
Ich hatte dann die Testversion heruntergeladen und diese zeigte mir dann an, dass ich alle meine Dateien wiederherstellen könne.
Aber NUR mit der Vollversion.
Diese habe ich dann für 60 Euro gekauft und meine Testversion mit einem Freischaltcode zur Vollversion gemacht.
Leider war die Wiederherstellung meiner Dateien dann aber nicht möglich gewesen, obwohl mir die Software dies zuvor angezeigt hatte.
Deshalb habe ich die Software gleich wieder deinstalliert und wollte von meiner "Geld-Zurück-Garantie" Gebrauch machen.
Dies wurde mir aber verweigert.
Angeblich ginge dies bei meiner SSD-Festplatte generell nicht, weshalb ich von der Rückzahlung ausgeschlossen sei.
Meine Hinweise auf die Versprechungen der Internetseite, sowie meine Frage, warum dort dann nicht darauf hingewiesen werden würde, dass dies bei SSD-Festplatten nicht ginge, lies man unkommentiert.
Ebenso wie meinen Hinweis darauf, dass mir die Software einen falschen Sachverhalt vorgetäuscht hatte, durch den der Kauf ja erst zustande gekommen war.
Zu meinem Hinweis, dass die Software ja auch für die Verwendung auf Laptops beworben werden würde, die bereits zur damaligen Zeit fast ausschließlich nur noch mit SSD-Festplatten hergestellt worden waren, hatte der Hersteller ebenfalls nichts zu sagen.
Weil der Kauf über den Finanzdienstleister PayPal abgewickelt worden war, habe ich einen Klärungsfall eröffnet, um die Rückzahlung durch PayPal zu erzwingen.
Nach etwa fünf Tagen musste mir die Rechtsabteilung von PayPal aber leider mitteilen, dass man die Rückbuchung nicht durchführen könne, weil sich zwischen der Firma und PayPal noch ein weiterer Finanzdienstleister befinden würde, der dann selbst auf dem Schaden sitzenbleiben würde.
Das Vorgehen den Kauf über zwei Finanzdienstleister durchzuführen, würde aber auf jeden Fall auf gewisse Sachverhalte hinweisen.
Durch PayPal bin ich zudem noch auf ein ganz anderes Problem hingewiesen worden:
Der Kauf der Software entpuppte sich nämlich erst in der Rechnung als Abschluss eines Abos.
Wenn das nicht aufgefallen wäre, dann hätte ich ab da jeden Monat 60 Euro für die Software zahlen müssen.
Darauf wurde auf der Internetseite der Firma aber nicht hingewiesen.
Dort war unmissverständlich von einem Kauf die Rede. (siehe unten)
Ich habe mich dann mit meiner Rechtschutzversicherung in Verbindung gesetzt.
Weil bei dem Kleingedruckten - auf das mit dem Sternchen bei dem Hinweis auf die "Geld-Zurück-Garantie" hingewiesen worden war - nichts zu lesen war, was eine Ablehnung meiner Rückgabe des Produktes begründen würde und aufgrund der anderen Unstimmigkeiten, sowie dem ungewollten Abo, wurde mir ganz klar bestätigt, dass ich hier im Recht bin.
Die Juristen meiner Rechtschutzversicherung haben zwar keinen Grund gesehen, warum Richter dies anders sehen könnten, aber weil die Schadenssumme mit nur 60 Euro sehr gering war, würde ich keine Möglichkeit haben das Geld vor Gericht einzuklagen.
Meine Dateien habe ich dann aber doch noch retten können und zwar mit einer kostenlosen Software aus dem Internet.
So viel zu dem Thema, dass dies bei SSD-Festplatten angeblich generell nicht funktionieren würde.
Die betreffende Firma vertreibt ihr Produkt übrigens immer noch mit den gleichen Versprechen wie damals, doch heute soll die Software plötzlich doch auf SSD-Festplatten funktionieren.
(Stand: April 2025)
Neben mir scheinen auch noch andere Käufer Probleme mit dieser Firma und deren Software zu haben, wie diese Bewertung vermuten lässt.
Der Autor der Bewertung berichtet hier darüber, dass die Software bei ihm immer abgestürzt sei und daher unbrauchbar war.
Er habe sein Geld dann aber ebenfalls nicht zurückerhalten.
Schlimmer noch...
Die Firma solle ihm unterstellt haben, ein Betrüger zu sein.
|
|
(Die Verwendung von Teilen der Screenshots der damaligen Internetseite von EaseUS, geschieht als Medienkritik gemäß Art. 5 GG.)
|
Home
/
Impressum
/
Datenschutzerklärung
|
|
Diese Internetseite wurde für eine Auflösung von 2160 x 1440 Bildschirmpunkten und eine Anzeige-Skalierung von 150% optimiert. |
 |
|
|
|