Giter VIP home page Giter VIP logo

algorithmen-einfach-erklaert's Introduction

Algorithmen einfach erklärt

Da ich, als ich angefangen habe, Algorithmen zu lernen, leider größtenteils auf rein englisch sprachige Tutorials gestoßen bin, was nicht unbedingt dabei geholfen hat, sie zu verstehen, dachte ich mir, so etwas müsste es in Deutsch geben. Aus diesem Grund werde ich in diesem Repository ein paar der bekanntesten Algorithmen in Deutsch näher erklären. Alle Algorithmen werden für ein besseres Verständnis zusätzlich zu der Erklärung noch in Python implementiert. Ich habe mir Python ausgesucht, da diese Programmiersprache auch für Leser ohne Programmierkenntnisse leicht zu verstehen ist.
Des weiteren werden Kenntnisse über folgende Datenstrukturen vorausgesetzt, da ich auf diese nicht genauer eingehen werde.

  • Array (Listen in Python)
  • set
  • Queue (FirstInFirstOut) / Stack (LastInFirstOut)
  • Graphen

Grundlegendes Vokabular und Erklärungen

First things first.

Was ist ein Algorithmus?

Einfach erklärt, ein Algorithmus ist eine Reihe von Anweisungen, die Schritt für Schritt ausgeführt werden, um ein bestimmtes Problem, wie beispielsweise das Sortieren einer Liste, zu lösen. Sie helfen uns aber auch im Alltag weiter, Stichwort Google Maps. Zu den bekanntesten gehören unter anderem die Algorithmen:

  • Bubblesort
  • Insertionsort
  • Quicksort
  • Mergesort
  • Breadth First Search / Depth First Search (Breiten- und Tiefensuche)
  • Dijkstras Algorithmus
  • Binary Search (Binäre Suche)
  • Euklidischer Algorithmus
  • SHA-256 (Wird bspw. im Bitcoin Netzwerk für das Mining und zur Erstellung von Bitcoin Adressen verwendet)
  • Shors Algorithmus

Wobei Letzterer für Quantencomputer und nicht für herkömmliche Computer entwickelt wurde.
Die Leser, die gerne mehr über den Shor-Algorithmus erfahren möchten, können dies hier tun:
https://de-academic.com/dic.nsf/dewiki/1283433

Einige dieser Algorithmen werde ich in diesem Repository behandeln.

Landau-Notation (O-Notation oder auch big O notation)

Wenn du relativ neu im Thema Algorithmen bist, wirst du dir wahrscheinlich die Frage stellen, was ist die Landau-Notation und wozu brauch man sie. Da in der Informatik das Laufzeitverhalten von Programmen eine wichtige und fundamentale Rolle spielt, muss es eine Möglichkeit geben, dieses anzugeben.
Kommen wir nun zu unserem vorherigen Beispiel, dem sortieren einer Liste zurück.
Da die Länge einer Liste, welche mit einem Bestimmen Algorithmus sortiert werden soll, meist variabel ist, kann man die Laufzeit des Algorithmus nicht in Sekunden oder Minuten angeben. Hier kommt die Landau-Notaion (auch O-Notation genannt) ins Spiel.
Diese ermöglicht es uns, eine allgemeine Aussage über das Laufzeitverhalten von Algorithmen zu tätigen.
Jetzt folgt eine kleine Erklärung, der häufigsten Notationen.

O(1): konstante Komplexität, die Laufzeit hängt nicht von der Datenmenge ab. z.B. Arrayzugriff, Hashtable.

O(n): lineare Komplexität, die Laufzeit ist propertional zur Datenmenge. z.B. Schleife über ein Array um einen Wert zu finden, Einlesen einer Treffermenge aus der Datenbank.

O(n²): quadratische Komplexität, eine doppelte Datenmenge vervierfacht die Laufzeit z.B. Bubble-Sort.

O(log n): logarithmische Komplexität, wird die Datenmenge jeweils verdoppelt, steigt die Laufzeit linear an z.B. Suchbäume.

O(n log n): superlineare Komplexität, liegt zwischen 𝒪(n) und 𝒪(n²). Tritt zum Beispiel auf, wenn eine Schleife über eine Baumsuche gebildet wird. z.B. optimierte Sortieralgorithmen wie Quicksort.

O(2ⁿ): exponentielle Komplexität, die Laufzeit verdoppelt sich, wenn die Datenmenge um eine Einheit größer wird. z.B. Bilden aller Paare einer Menge, Türme von Hanoi als rekursiver Algorithmus

O(n!): faktorielle Komplexität, die Laufzeit wächst mit der Fakultät der Datenmenge. z.B. Problem des Handlungsreisenden.

Da es manchen bestimmt trotzdem noch schwerfällt, sich darunter was vorzustellen, habe ich hier noch mal ein Bild eingefügt, welches das soeben Beschriebene visuell darstellt.

image

Zusätzlich spielt auch noch die sogenannte Space complexity (Platzkomplexität) eine wichtige Rolle. Diese gibt an, wie viel Speicher ein Algorithmus benötigt. Die Platzkomplexität wird ebenfalls mit der zuvor erklärten Landau-Notation angegeben.

In-Place-Algorithmus

Wenn du dich mit Algorithmen beschäftigst, wirst du um den Begriff In-Place nicht herumkommen. Dieser bedeutet lediglich, dass kein neuer Speicherplatz für die Ausführung des Algorithmus benötigt wird, da um wieder zu dem Beispiel einer Liste, die sortiert werden muss, zurück zukommen, die Elemente nur untereinander getauscht und keine neue Listen erstellt werden. Ein Beispiel hierfür ist der Bubblesort Algorithmus.



Falls ich etwas vergessen habe oder sich irgendwelche Fehler eingeschlichen haben, würde ich mich freuen, wenn du mich darauf aufmerksam machst.

Quellen:
https://ichi.pro/de/algorithmen-und-big-o-notation-274052038946963
https://wiki.selfhtml.org/wiki/Laufzeitkomplexit%C3%A4t

algorithmen-einfach-erklaert's People

Contributors

niclasdev63 avatar

Stargazers

Maximilian Schön avatar Felix Singer avatar Yuchen He avatar Roman avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.