Jährliche Archive: 2018


Automatisches Differenzieren

Durch das automatische Differenzieren (autoDiff) ist es Programmen möglich mathematische Funktionen abzuleiten. Je nach Anwendungsfall kann dabei vorwärts oder rückwärts differenziert werden. Ich erkläre anhand eines Beispiels beide Vorgehensweisen und gehe auf die Vor- und Nachteile ein. (1)   Die obige Formel soll durch einen Algorithmus differenziert werden. Für ein […]


Java Virtual Machine

Java-Programme werden im Gegensatz zu nativen Programmen nicht direkt durch das Betriebssystem ausgeführt, sondern von der Java Virtual Machine (JVM). Die JVM kümmert sich um die korrekte Ausführung des Programms auf dem jeweiligen Betriebssystem. Der Programmierer muss also nicht auf spezifische Eigenschaften eines Betriebssystems Rücksicht nehmen sondern kann sich darauf […]


Tensorflow GPU installation unter Windows 10

Tensorflow ist das mit Abstand beliebteste Framework um neuronale Netze zu entwickeln. Es besitzt eine starke Community und wird vom Softwaregiganten Google gestützt.  Es ist daher nicht verwunderlich, dass Cloud-Dienste wie AWS oder Google Cloud Platform Tensorflow-Umgebungen anbieten. Wer nicht auf die Cloud-Dienste angewiesen sein und Tensorflow dennoch testen möchte, […]


Sortierverfahren: Quicksort

Quicksort ist ein Sortierverfahren, welches wie Mergesort nach dem teile und hersche Prinzip arbeitet. Quicksort arbeitet inplace ist jedoch nicht stabil. Quicksort wurde 1961 von Tony Hoare publiziert und gewann schnell an Beliebtheit, da es weitaus schneller sortierte als Heap- oder Mergesort. Angeberwissen: QuicksortTony Hoare entwickelte Quicksort als er als […]


Sortierverfahren: Mergesort

Mergesort ist ein stabiles Sortierverfahren, welches nach dem Teile-und-herrsche-Verfahren (divide and conquer) arbeitet. Ein zu sortierendes Feld wird dabei in zwei gleich große Felder geteilt. Beide Felder werden im Anschluss wieder rekursiv in den Algorithmus gesteckt. Dies geschieht so lange, bis alle Felder in ihre einzelnen Elemente zerteilt wurden. Beide […]


Sortierverfahren: Bubblesort

Bubblesort ist das wohl am einfachsten zu implementierende Sortierverfahren. Es ist jedoch zu ineffektiv um es praktisch einzusetzen und hat daher nur einen geringen Stellenwert. Der Bubblesort-Algorithmus geht Element für Element einzeln durch und prüft ob das aktuelle Element kleiner ist als dessen Vorgänger. Ist dies der Fall, dann werden […]


Sortierverfahren: Shellsort

Shellsort ist ein Sortierverfahren, welches auf Insertionsort basiert. Insertionsort bringt jedes Element an seine Position, indem das Element über den bereits sortierten Bereich iteriert und mit jedem darin enthaltenen Element verglichen wird. Shellsort funktioniert auf die gleiche Weise. Der Unterschied ist jedoch, dass Elemente, welche in einem bestimmten Abstand zueinander […]


Sortierverfahren: Countingsort

Countingsort ist ein Sortierverfahren, das sehr effizient auf einen beschränkten Intervall große Datenmengen sortieren kann. Es wurde 1954 von Harold H. Seward entickelt. Countingsort ist eines der wenigen Sortierverfahren welches nicht vergleichsbasiert arbeitet, sondern die Vorkommnisse der einzelnen Werte des Intervals zählt. Es ist daher wichtig, dass das Interval einen […]


Sortierverfahren: Insertionsort

Insertionsort ist ein Sortierverfahren, welches einfach zu verstehen und schnell zu implementieren ist. Von anderen Sortierverfahren hebt es sich dadurch hervor, dass es sowohl stabil wie auch onlinefähig ist. Ein weiterer Vorteil besteht darin, dass der Algorithmus in-place arbeitet und somit keinen weiteren Speicherplatz benötigt. Bei all den Vorteilen, hat […]


Datenstrukturen: Arrays

Arrays, oder auch Felder gehören zu den ältesten Datentypen der Softwareentwicklung. Bereits 1945 schrieb von Neumann den Mergesort-Algorithmus zum sortieren von Arrays. Bei einem Array handelt es sich um einen zusammengesetzten Bereich, der eine bestimmte Anzahl von gleichen Datentypen aufnehmen kann. Die Größe eines dieses Bereichs muss bei dessen Initialisierung bekannt […]