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 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.
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.

Themen der Startseite
1.  Warnung! Probleme bei der Verwendung von PHP 8.0 aufwärts
2.  2.1:  Bekanntmachung der Entwicklung diverser neuer Sortierverfahren
2.2:  Meine Funktionstests
2.3:  Meine Laufzeitmessungen
2.4:  Die Liste meiner Sortierverfahren
3.  Meine Erfahrung mit der US-Firma "EaseUS" und deren Software "Data Recovery"


Warnung! 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 nämlich 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


Bekanntmachung der Entwicklung diverser neuer Sortierverfahren

Im Jahr 1985 habe ich mein erstes Sortierverfahren entwickelt und im Jahr 2008 sind Sortierverfahren für mich zu einem richtigen Hobby geworden. Seitdem habe ich eine ganze Reihe neuer Sortierverfahren entwickelt (siehe weiter unten), oder bereits bekannte Sortierverfahren weiterentwickelt, die ich nach und nach auf meiner Internetseite veröffentlichen werde.

Meine Funktionstests:
Ich habe ein Excel-Makro entwickelt, mit dem ich Sortierverfahren auf eine korrekte Funktion überprüfen kann. Es beginnt mit einem Array mit zwei zu sortierenden Datensätzen, bei denen nach Zahlen sortiert wird. Jede Zahl kann hierbei zwei Zustände annehmen. Dies sind die Zahlen 0 und 1. Weil alle Kombinationsmöglichkeiten durchgespielt werden, ergeben sich hierbei vier Durchläufe. Der Test geht dann weiter mit einem Array mit drei Datensätzen und jeweils drei verschiedenen Zahlen (0,1,2 = 27 Kombinationsmöglichkeiten), bis zu einem Array mit 10 Datensätzen und 10 verschiedenen Zahlen (0 bis 9 = 10 Milliarden Kombinationsmöglichkeiten). Dadurch ergeben sich insgesamt 10.405.071.316 Arrays, die jeweils von allen Sortierverfahren sortiert werden müssen, um ihre korrekte Funktion nachzuweisen. Dass jeweils richtig sortiert wurde wird dadurch überprüft, indem ein bereits zuvor getestetes Sortierverfahren die gleichen Arrays ebenfalls sortiert und dann die beiden sortierten Arrays verglichen werden.
Weil die zu sortierenden Datensätze nicht nur die zu vergleichenden Zahlen enthalten, sondern auch Zahlen, die die ursprünglichen Positionen der Datensätze repräsentieren, wird damit nach der Sortierung auch überprüft, ob das zu testende Sortierverfahren stabil sortiert, oder nicht. Wenn es bei zwei benachbarten identischen Zahlen nur ein einziges Mal zu einem Abstieg der Positionszahlen kommt, dann gilt das Sortierverfahren damit als instabil. Und wenn eine dieser Positionszahlen dann sogar mehr als einmal vorhanden sein sollte, dann wäre dies der Nachweis dafür, dass Datensätze vervielfacht wurden, was natürlich bedeutet, dass das zu testende Sortierverfahren nicht richtig funktioniert.

Meine Laufzeitmessungen:
Früher habe ich meine Laufzeitmessungen unter Excel mit "Visual Basic" durchgeführt. Dabei bin ich aber leider immer wieder auf das Problem gestoßen, dass man auf einem PC keine verlässlichen Laufzeitmessungen durchführen kann, weil diverse Hintergrundprozesse wie Virenscanner und so weiter, ganz massiv die Laufzeiten beeinträchtigen. Dass Wiederholen der gleichen Tests, hatte immer andere Laufzeiten zum Ergebnis. Deshalb teste ich die Laufzeiten nun mit der wiederauferstandenen Version des "Commodore 64" (1982 bis 1994), dem "The C64 Maxi" (Retro Games Ltd.), weil es dort keine Hintergrundprozesse gibt. Selbst wenn eine Sortierung mehrere Minuten dauert, dann dauert die Wiederholung eines Tests bei jedem weiteren Mal, immer ganz exakt genauso lange. Der "The C64 Maxi" besitzt zwar wie sein originales Vorbild nur 0,038 Megabyte nutzbaren Arbeitsspeicher, aber weil die Arbeitsgeschwindigkeit des dort verwendeten "BASIC V2" so extrem langsam ist, reichen bereits weniger als 400 sortierte Zahlen, für aussagekräftige Vergleiche zwischen diversen Sortierverfahren aus.
Zum Testen der Funktionsweisen und Laufzeiten der diversen Sortierverfahren, verwende ich unterschiedlich große Arrays, mit 14 verschiedenen Datenstrukturen:

 
 
 
 
 
 
 
 
 
 
 
 
 

Die Liste meiner Sortierverfahren:
Dies ist die Liste der bisher von mir entwickelten Sortierverfahren. Es befinden sich Sortierverfahren darunter, die komplette Neuentwicklungen mit neuen Funktionsweisen sind, aber es gibt auch bereits bekannte Sortierverfahren, für die ich lediglich einen neuen und verbesserten Quellcode entwickelt habe. Ich werde dann immer ganz spontan entscheiden, welches Sortierverfahren ich als nächstes veröffentlichen werde. Sinngemäß werde ich mich dann aber wohl immer für die Sortierverfahren entscheiden, die die Fachwelt am meisten interessieren dürften. Aus diversen Gründen habe ich aber leider nicht so viel Zeit daran zu arbeiten, wie ich gerne würde.

Meine Sortierverfahren
Name Datum stabil Informationen
AVL-Sort 23.12.2022 ja  
Babylonsort 21.9.2021 ja  
Bubblesort (Area)   ja  
Bubblesort (multi areas)   ja  
Bubblesort (with stop)   ja  
Comb-3-Sort 9.7.2022 nein Combsort mit 3 Positionen
Defragmentation-Sort 2008 nein  
ETM-Sort 26.2.2023 ja
ETM-Sort - was für "eat the middle / esse die Mitte" steht - ist eine Weiterentwicklung aus meinem Sortierverfahren "L/R-Sort". Der Algorithmus erzeugt einen neuen "Streifen" für Verknüpfungen und wählt im Array immer die Mitte des aktuellen Arbeitsbereiches aus und beginnt dann dort Elemente zu vergleichen. Zu Anfang befinden sich die beiden zu vergleichenden Elemente direkt nebeneinander. Der kleinere Wert davon, beziehungsweise der identische linke, erzeugt eine Verknüpfung zu sich selbst, die dann am aktuellen Streifen angehängt wird. Die jeweilige Vergleichsposition, die die letzte Verknüpfung erzeugt hat, rückt dann im Arbeitsbereich ein Element weiter nach außen. Die linke Vergleichsposition nach links und die rechte nach rechts. Wenn beim aktuellen Vergleich das Ergebnis kleiner als das letzte Ergebnis sein sollte, dann wird der Algorithmus für den eventuell verbliebenen linken und rechten Teil im aktuellen Arbeitsbereich neu gestartet. Das wiederholt sich dann solange, bis alle Arbeitsbereiche verschwunden sind und alle Elemente Verknüpfungen in Streifen erzeugt haben. ETM-Sort verarbeitet die Arbeitsbereiche aber nicht mit Rekursionen, sondern verwaltet diese Positionen selbst. Das ist grundsätzlich immer schneller, als mit echten Rekursionen zu arbeiten. Nun werden immer zwei oder drei benachbarte Streifen, zu einem neuen zusammengerechnet, bis am Ende nur noch ein Streifen übrig ist.
Im vorletzten Schritt werden aus den Verknüpfungszahlen im Streifen, die Zielpositionen für die Datensätze berechnet. Zum Schluss werden die Datensätze im Array, mit jeweils maximal nur zwei Vertauschungen, zu ihren Endpositionen verschoben. In günstigen Fällen erreichen die Datensätze ihr Ziel mit nur einer Vertauschung und wenn sie sich bereits zu Beginn auf der richtigen Position befunden haben, dann bewegen sie sich gar nicht.

Gnomesort 10.4.2022 ja  
Heapsort (Easy) 12.4.2022 nein  
Heapsort (Pyramid) 13.4.2022 ja  
HOPASA-Sort 1986 ja  
HOPASA-Sort 2 1988 nein  
HOPASA-Sort 3 2008 nein  
Humanly-Sort 2008 nein  
L/R-Sort 20.4.2022 ja
L/R-Sort ("links / rechts"-Sortierung) ist aus der Idee eines Weichen-Sortierverfahrens entstanden. Die ursprüngliche Idee aus dem Jahr 2008, hatte sich allerdings als viel zu langsam erwiesen. Davon geblieben ist nur der Vergleich des linken und rechten Elements im Array. Der kleinere Wert davon, beziehungsweise der identische linke, erzeugt eine Verknüpfung zu sich selbst, die dann am aktuellen "Streifen" angehängt wird. Sollte das aktuelle Ergebnis kleiner als das vorherige sein, dann wird ein neuer Streifen erzeugt. Die jeweilige Vergleichsposition, von der aus die letzte Verknüpfung erzeugt wurde, rückt dann ein Element näher in die Mitte des Arrays. Die linke Vergleichsposition nach rechts und die rechte nach links. Wenn so alle Elemente Verknüpfungen erzeugt haben, die an Streifen angehängt wurden, dann werden immer zwei oder drei benachbarte Streifen zu einem neuen zusammengerechnet, bis am Ende nur noch ein Streifen übrig ist.
Im vorletzten Schritt werden aus den Verknüpfungszahlen im Streifen, die Zielpositionen für die Datensätze berechnet. Zum Schluss werden die Datensätze im Array, mit jeweils maximal nur zwei Vertauschungen, zu ihren Endpositionen verschoben. In günstigen Fällen erreichen die Datensätze ihr Ziel mit nur einer Vertauschung und wenn sie sich bereits zu Beginn auf der richtigen Position befunden haben, dann bewegen sie sich gar nicht.

L/R-Sort 2 9.8.2023 ja
L/R-Sort 2 ("links / rechts"-Sortierung) ist aus der Idee eines Weichen-Sortierverfahrens entstanden. Die ursprüngliche Idee aus dem Jahr 2008, hatte sich als viel zu langsam erwiesen, weshalb ich die Idee noch einmal aufgegriffen habe und das Problem nun lösen konnte. Anders als die verwandten Sortierverfahren L/R-Sort, ETM-Sort und LMR-Sort, erzeugt L/R-Sort 2 zwar immer noch Verknüpfungen zu den Datensätzen, jedoch werden diese nicht mehr in Streifen angeordnet. Anstelle dessen gibt es ein Verknüpfungs-Array, in dem es zweimal so viele Verknüpfungen, wie zu sortierende Datensätze gibt. Bei den Abarbeitungen der einzelnen Arbeitsbereiche, werden die Verknüpfungen immer zwischen den beiden Bereichen des Verwaltungs-Array der Verknüpfungen hin und her kopiert. In den noch unsortierten Bereichen (kleiner) wandern immer zwei Positionsmarker von links nach rechts und von rechts nach links. Wenn der rechte Positionsmarker zu einem kleineren Element führt, als der linke Positionsmarker, dann wird dessen Verknüpfung weiterverwendet und ansonsten die Verknüpfung des linken Positionsmarkers. Wenn das aktuelle verknüpfte Element kleiner als die zuletzt kopierte Verknüpfung ist, dann wird die Verknüpfung zum neuen Bereich "kleiner" kopiert und ansonsten zum neuen Bereich "aufsteigend". Dies geht dann solange weiter, bis der vorherige Bereich "kleiner" vollständig abgearbeitet wurde. Immer wenn auf dem neuen Bereich "kleiner" ein neuer Arbeitsbereich beginnt, dann wechseln die nächsten Bereiche "aufsteigend" und "kleiner", immer zwischen der linken und rechten Seite. Die Verknüpfungen werden hierbei immer von außen nach innen in den neuen Arbeitsbereich kopiert. Wenn es keinen neuen Bereich "kleiner" gegeben hat, dann werden immer die beiden Bereiche "aufsteigend", die zuletzt erstellt wurden, zu einem neuen Bereich "aufsteigend" zusammengerechnet.
Im vorletzten Schritt werden aus den Verknüpfungszahlen, die Zielpositionen für die Datensätze berechnet. Zum Schluss werden die Datensätze im Array, mit jeweils maximal nur zwei Vertauschungen, zu ihren Endpositionen verschoben. In günstigen Fällen erreichen die Datensätze ihr Ziel mit nur einer Vertauschung und wenn sie sich bereits zu Beginn auf der richtigen Position befunden haben, dann bewegen sie sich gar nicht.
LMR-Sort 27.2.2023 ja
LMR-Sort ("links / Mitte / rechts"-Sortierung) ist die Kombination meiner beiden Sortierverfahren L/R-Sort und ETM-Sort. Der Algorithmus erzeugt einen neuen "Streifen" für Verknüpfungen und macht im aktuellen Arbeitsbereich das linke, das rechte, sowie die beiden benachbarten Elemente in der Mitte, zu Vergleichselementen. Mit jeweils maximal drei Vergleichen bestimmt LMR-Sort dann, welches dieser vier Elemente das kleinste ist. Bei identischen Elementen, wird hierbei immer das linke ausgewählt. Weil gespeichert wird, welches Vergleichselement das nächstgrößere ist, kann LMR-Sort im Idealfall mit nur einem Vergleich das kleinste Element der vier Vergleichselemente finden. Das ausgewählte Element erzeugt dann eine Verknüpfung zu sich selbst, die am aktuellen Streifen angehängt wird und bewegt sich eine Position zur Seite. Das linke und das rechte mittlere Element würden sich dann eine Position nach rechts bewegen und das rechte und linke mittlere Element, eine Position nach links. Wenn beim aktuellen Vergleich das Ergebnis kleiner als das letzte Ergebnis sein sollte, dann wird der Algorithmus für den eventuell verbliebenen linken und rechten Teil im aktuellen Arbeitsbereich neu gestartet. Das wiederholt sich dann solange, bis alle Arbeitsbereiche verschwunden sind und alle Elemente Verknüpfungen in Streifen erzeugt haben. LMR-Sort verarbeitet die Arbeitsbereiche aber nicht mit Rekursionen, sondern verwaltet diese Positionen selbst. Das ist grundsätzlich immer schneller, als mit echten Rekursionen zu arbeiten. Nun werden immer zwei oder drei benachbarte Streifen, zu einem neuen zusammengerechnet, bis am Ende nur noch ein Streifen übrig ist.
Im vorletzten Schritt werden aus den Verknüpfungszahlen im Streifen, die Zielpositionen für die Datensätze berechnet. Zum Schluss werden die Datensätze im Array, mit jeweils maximal nur zwei Vertauschungen, zu ihren Endpositionen verschoben. In günstigen Fällen erreichen die Datensätze ihr Ziel mit nur einer Vertauschung und wenn sie sich bereits zu Beginn auf der richtigen Position befunden haben, dann bewegen sie sich gar nicht.
Mergesort   ja  
Neuronsort 15.10.2020 ja
Eine durch Datenneuronen (KI) gesteuerte Sortierung. Die Datenneuronen besitzen jeweils zwei Eingänge und einen Ausgang.
Werte / Datensätze die bereits übergeben wurden, werden aus dem Netzwerk entfernt.
Datenneuronen die nur noch einen aktiven Eingang haben, löschen sich selbst. Hierfür gibt es drei verschiedene Situationen:
1.  Wenn ein Neuron an seinem verbliebenen Eingang einen Wert / Datensatz hat, dann wird dieser an das obere Neuron übergeben.
2.  Wenn ein Neuron an seinem verbliebenen Eingang und an seinem Ausgang mit anderen Neuronen verbunden ist, dann überbrückt es sich selbst, indem es das untere und obere Neuron miteinander verbindet.
3.  Wenn sich das oberste Neuron - das "Master-Neuron" - löschen muss, dann macht es das untere Neuron zum neuen Master-Neuron.
Unabhängig davon wie sich ein Neuron löscht, erfolgt anschließend vom oberen Neuron aus ein Aktualisierungsimpuls, der im Netzwerk auf dem kürzesten Weg bis zum Master-Neuron läuft. Dort angekommen steht der nächste zu übergebende Wert / Datensatz fest. Im Fall "3." braucht verständlicherweise kein Aktualisierungsimpuls zu erfolgen.

Neuronsort 3D 26.4.2022 ja
Eine durch Datenneuronen (KI) gesteuerte Sortierung. Die Datenneuronen besitzen jeweils sechs Anschlüsse, die jeweils Werte / Datensätze senden und empfangen können und zwar nach links, rechts, vorne, hinten, oben und unten.
Die Datenneuronen sind bestrebt, sich immer in der Form eines Würfels mit identischen Kantenlängen anzuordnen. Dieser Würfel befindet sich zudem - in der Sprache der Science-Fiction - innerhalb einer würfelförmigen Einstein-Rosen-Brücke (Wurmloch). Dadurch verbinden sich die Neuronen an den Außenseiten des Würfels, direkt mit den Neuronen, die sich an der gegenüberliegenden Seite des Würfels befinden.
Wenn die Logik eines der Datenneuronen veranlasst, dass es seinen Wert / Datensatz mit dem eines benachbarten Neurons tauschen muss, dann wird für das andere Neuron eine Aktualisierung ausgelöst. Dieses Neuron überprüft dann ebenfalls, ob es seinen Wert / Datensatz mit dem eines benachbarten Neurons tauschen muss. Dadurch kann es dann zu einem Dominoeffekt kommen, der in alle sechs möglichen Richtungen, diverse Wege durch den Würfel nimmt. Wenn alle Neuronen zu Ruhe gekommen sind, ist die Sortierung beendet.
Quicksort   nein  
Shakersort   ja  
Shellsort   nein  
SRUDQsort 10.9.2021 ja Dokumentation noch nicht vollständig
Stage-Sort 2008 ja  
Structuresort 19.11.2021 ja  
Tensort 2008 nein Vom Prinzip her wie Radixsort (MSD) als in-place Variante.
Timsort (easy) 20.2.2023 ja Eine sehr stark vereinfachte Version von Tim Peters Hybrid-Sortierverfahren "Timsort" (2002).

Home


Meine Erfahrung mit der US-Firma "EaseUS" und deren Software "Data Recovery"

[[MODULA]]-Fehler:
Datei "Artikel/EaseUS.txt" nicht gefunden!


Home / Impressum / Datenschutzerklärung

 
Diese Internetseite wurde für eine Auflösung von 2160 x 1440 Bildschirmpunkten und eine Anzeige-Skalierung von 150% optimiert.