Skip to content

Latest commit

 

History

History
333 lines (283 loc) · 28.7 KB

README.de-DE.md

File metadata and controls

333 lines (283 loc) · 28.7 KB

JavaScript-Algorithmen und Datenstrukturen

CI codecov

Dieses Repository enthält JavaScript Beispiele für viele gängige Algorithmen und Datenstrukturen.

Jeder Algorithmus und jede Datenstruktur hat eine eigene README mit zugehörigen Erklärungen und weiterführenden Links (einschließlich zu YouTube-Videos).

Lies dies in anderen Sprachen: English 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Bahasa Indonesia, Українська, Arabic

☝ Beachte, dass dieses Projekt nur für Lern- und Forschungszwecke gedacht ist und nicht für den produktiven Einsatz verwendet werden soll

Datenstrukturen

Eine Datenstruktur ist eine bestimmte Art und Weise, Daten in einem Computer so zu organisieren und zu speichern, dass sie effizient erreicht und verändert werden können. Genauer gesagt, ist eine Datenstruktur eine Sammlung von Werten, den Beziehungen zwischen ihnen und den Funktionen oder Operationen, die auf die Daten angewendet werden können.

B - Anfänger:innen, A - Fortgeschrittene

Algorithmen

Ein Algorithmus ist eine eindeutige Spezifikation, wie eine Klasse von Problemen zu lösen ist. Er besteht aus einem Satz von Regeln, die eine Abfolge von Operationen genau definieren.

B - Anfänger:innen, A - Fortgeschrittene

Algorithmen nach Thema

Algorithmen nach Paradigma

Ein algorithmisches Paradigma ist eine generische Methode oder ein Ansatz, der dem Entwurf einer Klasse von Algorithmen zugrunde liegt. Es ist eine Abstraktion, die höher ist als der Begriff des Algorithmus. Genauso wie ein Algorithmus eine Abstraktion ist, die höher ist als ein Computerprogramm.

So verwendest du dieses Repository

Alle Abhängigkeiten installieren

npm install

ESLint ausführen

You may want to run it to check code quality.

npm run lint

Alle Tests ausführen

npm test

Tests nach Namen ausführen

npm test -- 'LinkedList'

Fehlerbehebung

Falls das Linting oder Testen fehlschlägt, versuche, den Ordner "node_modules" zu löschen und die npm-Pakete neu zu installieren:

rm -rf ./node_modules
npm i

Spielwiese

Du kannst mit Datenstrukturen und Algorithmen in der Datei ./src/playground/playground.js herumspielen und dir in dieser Datei Tests schreiben ./src/playground/__test__/playground.test.js.

Dann führe einfach folgenden Befehl aus, um zu testen, ob dein Spielwiesencode wie erwartet funktioniert:

npm test -- 'playground'

Nützliche Informationen

Referenzen

▶ Datenstrukturen und Algorithmen auf YouTube(Englisch)

O-Notation (Big O Notation)

Die O-Notation wird verwendet, um Algorithmen danach zu klassifizieren, wie ihre Laufzeit oder ihr Platzbedarf mit zunehmender Eingabegröße wächst. In der folgenden Tabelle finden Sie die häufigsten Wachstumsordnungen von Algorithmen, die in Big-O-Notation angegeben sind.

O-Notation Graphen

Quelle: Big O Cheat Sheet.

Nachfolgend finden Sie eine Liste einiger der am häufigsten verwendeten Big O-Notationen und deren Leistungsvergleiche für unterschiedliche Größen der Eingabedaten.

Big O Notation Berechnungen für 10 Elemente Berechnungen für 100 Elemente Berechnungen für 1000 Elemente
O(1) 1 1 1
O(log N) 3 6 9
O(N) 10 100 1000
O(N log N) 30 600 9000
O(N^2) 100 10000 1000000
O(2^N) 1024 1.26e+29 1.07e+301
O(N!) 3628800 9.3e+157 4.02e+2567

Komplexität von Datenstrukturoperationen

Datenstruktur Zugriff auf Suche Einfügen Löschung Kommentare
Array 1 n n n
Stack n n 1 1
Queue n n 1 1
Linked List n n 1 n
Hash Table - n n n Im Falle einer perfekten Hash-Funktion wären die Kosten O(1)
Binary Search Tree n n n n Im Falle eines ausgeglichenen Baumes wären die Kosten O(log(n))
B-Tree log(n) log(n) log(n) log(n)
Red-Black Tree log(n) log(n) log(n) log(n)
AVL Tree log(n) log(n) log(n) log(n)
Bloom Filter - 1 1 - Falschpostive sind bei der Suche möglichen

Komplexität von Array-Sortieralgorithmen

Name Bester Durchschnitt Schlechtester Speicher Stabil Kommentar
Bubble sort n n2 n2 1 JA
Insertion sort n n2 n2 1 Ja
Selection sort n2 n2 n2 1 Nein
Heap sort n log(n) n log(n) n log(n) 1 Nein
Merge sort n log(n) n log(n) n log(n) n Ja
Quick sort n log(n) n log(n) n2 log(n) Nein Quicksort wird normalerweise in-place mit O(log(n)) Stapelplatz ausgeführt
Shell sort n log(n) abhängig von Spaltfolge n (log(n))2 1 Nein
Counting sort n + r n + r n + r n + r Ja r - größte Zahl im Array
Radix sort n * k n * k n * k n + k Ja k - Länge des längsten Schlüssels

Projekt-Unterstützer

Du kannst dieses Projekt unterstützen über ❤️️ GitHub or ❤️️ Patreon.

Leute, die dieses Projekt unterstützen ∑ = 0