To repozytorium zawiera wiele przykładów JavaScript opartych na znanych algorytmach i strukturach danych.
Każdy algorytm i struktura danych zawiera osobny plik README wraz z powiązanymi wyjaśnieniami i odnośnikami do dalszego czytania (włącznie z tymi do YouTube videos).
Read this in other languages: English 简体中文, 繁體中文, 한국어, 日本語, Français, Español, Português, Русский, Türk, Italiana
Struktura danych to sposób uporządkowania i przechowywania informacji w komputerze żeby mogłaby być sprawnie dostępna i efektywnie zmodyfikowana. Dokładniej, struktura danych jest zbiorem wartości danych, relacjami pomiędzy nimi, zadaniami lub działaniami, które mogą dotyczyć danych.
B - Początkujący, A - Zaawansowany
B ListaB Lista DwukierunkowaB KolejkaB StosB Tabela SkrótuB StertaB Kolejka PriorytetowaA TrieA Drzewo
A Wyszukiwanie BinarneA AVL DrzewoA Drzewa czerwono-czarneA Drzewo Segmentu - z przykładami zapytań o min / max / sumie sumA Drzewo Fenwicka (Drzewo Indeksowane Binarnie)A Graf (zarówno skierowane i nieukierunkowane)A Rozłączny ZestawA Filtr BloomaAlgorytm jest to skończony ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego rodzaju zadań. Sposób postępowania prowadzący do rozwiązania problemu.
B - Początkujący, A - Zaawansowany
B Manipulacja Bitami - ustaw / uzyskaj / aktualizuj / usuwaj bity, mnożenie / dzielenie przez dwa, tworzenie negatywów itp.B SilnaB Ciąg FibonacciegoB Test Pierwszorzędności (metoda podziału na próby)B Algorytm Euclideana - obliczyć Największy Wspólny Dzielnik (GCD)B Najmniejsza Wspólna Wielokrotność (LCM)B Sito Eratosthenes-a - znajdowanie wszystkich liczb pierwszych do określonego limituB Jest Potęgą Dwójki - sprawdź, czy liczba jest potęgą dwóch (algorytmy naiwne i bitowe)B Trójkąt PascalaA Partycja CałkowitaA Algorytm Liu Huia - przybliżone obliczenia na podstawie N-gonówB Produkt Kartezyjny - wynik wielu zestawówB Przetasowanie Fisher Yates-a - losowa permutacja kończącej się seriiA Zestaw Zasilający - podzbiór wszystkich seriiA Permutacje (z albo bez powtórzeń)A Kombinacje (z albo bez powtórzeń)A Najdłuższa Wspólna Podsekwencja (LCS)A Najdłuższa Wzrostająca PodsekwencjaA Najkrótsza Wspólna Supersekwencja (SCS)A Problem Knapsacka - “0/1” i “Rozwiązany”A Maksymalna Podtablica - “Metoda Siłowa” i “Dynamiczne Programowanie” (Kadane-a) wersjeA Suma Kombinacji -
znajdź wszystkie kombinacje, które tworzą określoną sumęB Odległość Hamminga - liczba pozycji, w których symbole są różneA Odległość Levenshteina - minimalna odległość edycji między dwiema sekwencjamiA Algorytm Knuth–Morris–Pratta (Algorytm KMP) - dopasowywanie wzorców (dopasowywanie wzorców)A Algorytm Z - szukanie podłańcucha(dopasowywanie wzorców)A Algorytm Rabin Karpa - szukanie podłańcuchaA Najdłuższa Wspólna PodłańcuchaA Dopasowanie Wyrażeń RegularnychB Wyszukiwanie LinioweB Jump Search (lub Przeszukiwanie Bloku) - szukaj w posortowanej tablicyB Wyszukiwanie Binarne - szukaj w posortowanej tablicyB Wyszukiwanie Interpolacyjne - szukaj w równomiernie rozłożonej, posortowanej tablicyB Sortowanie bąbelkoweB Sortowanie przez wymianeB Sortowanie przez wstawianieB Sortowanie stogoweB Sortowanie przez scalanieB Sortowanie szybkie - wdrożenia w miejscu i nie na miejscuB Sortowanie ShellaB Sortowanie przez zliczanieB Sortowanie pozycyjneB Przeszukiwanie w głąb (DFS)B Przeszukiwanie wszerz (BFS)B Przeszukiwanie w głąb (DFS)B Przeszukiwanie wszerz (BFS)B Algorytm Kruskala - znalezienie Minimalnego Drzewa Opinającego (MST) dla ważonego nieukierunkowanego wykresuA Algorytm Dijkstry - znajdowanie najkrótszej ścieżki z pojedynczego źródła w grafieA Algorytm Bellmana-Forda - znajdowanie najkrótszych ścieżek do wszystkich wierzchołków wykresu z jednego wierzchołkaA Algorytm Floyd-Warshalla - znajdź najkrótsze ścieżki między wszystkimi parami wierzchołkówA Detect Cycle - zarówno dla wykresów skierowanych, jak i nieukierunkowanych(wersje oparte na DFS i Rozłączny Zestaw)A Algorytm Prima - znalezienie Minimalnego Drzewa Opinającego (MST) dla ważonego nieukierunkowanego wykresuA Sortowanie Topologiczne - metoda DFSA Punkty Artykulacji - Algorytm Tarjana (oparty o DFS)A Mosty - Oparty na algorytmie DFSA Ścieżka Euleriana i Obwód Euleriana - Algorytm Fleurya - Odwiedź każdą krawędź dokładnie razA Cykl Hamiltoniana - Odwiedź każdy wierzchołek dokładnie razA Silnie Połączone Komponenty - Algorytm KosarajaA Travelling Salesman Problem - najkrótsza ścieżka która odwiedza każde miasto i wraca miasta początkującegoB Wieża HanoiB Kwadratowa Matryca Obrotu - algorytm w miejscuB Jump Game - cofanie, dynamiczne programowanie (od góry do dołu + od dołu do góry) i przykłady chciwegoB Unikatowe Ścieżki - cofanie, dynamiczne programowanie i przykłady oparte na Trójkącie PascalaA Problem N-QueensA Knight’s TourParadygmat algorytmiczny jest ogólną metodą lub podejściem, które jest podstawą projektowania klasy algorytmów. Jest abstrakcją wyższą niż pojęcie algorytmu, podobnie jak algorytm jest abstrakcją wyższą niż program komputerowy.
B Wyszukiwanie LinioweA Maksymalna PodtablicaA Problem z Podróżującym Sprzedawcą - najkrótsza możliwa trasa, która odwiedza każde miasto i wraca do miasta początkowegoB Jump GameA Niezwiązany Problem Knapsacka A Algorytm Dijkstry -
znalezienie najkrótszej ścieżki do wszystkich wierzchołków grafuA Algorytm Prima - znalezienie Minimalnego Drzewa Opinającego (MST) dla ważonego nieukierunkowanego wykresuA Algorytm Kruskala - znalezienie Minimalnego Drzewa Opinającego (MST) dla ważonego nieukierunkowanego wykresuB Wyszukiwanie BinarneB Wieża HanoiB Trójkąt PascalaB Algorytm Euclideana - obliczyć Największy Wspólny Dzielnik(GCD)B Sortowanie przez scalanieB Szybkie SortowanieB Drzewo Przeszukiwania W Głąb (DFS)B Graf Przeszukiwania W Głąb (DFS)B Jump GameA Permutacje (z albo bez powtórzeń)A Kombinacje (z albo bez powtórzeń)B Ciąg FibonacciegoB Jump GameB Unikatowe ScieżkiA Dystans Levenshteina - minimalna odległość edycji między dwiema sekwencjamiA Najdłuższa Wspólna Podsekwencja (LCS)A Najdłuższa Wspólna PodłańcuchaA Najdłuższa Wzrostająca PodsekwencjaA Najkrótsza Wspólna SupersekwencjaA 0/1 Problem KnapsackaA Partycja CałkowitaA Maksymalne PodtabliceA Algorytm Bellman-Forda - znalezienie najkrótszej ścieżki wszystkich wierzchołków wykresuA Algorytm Floyd-Warshalla -
znajdź najkrótsze ścieżki między wszystkimi parami wierzchołkówA Dopasowanie Wyrażeń RegularnychB Jump GameB Unikatowe ScieżkiA Cykl Hamiltoniana - Odwiedź każdy wierzchołek dokładnie razA Problem N-QueensA Knight’s TourA Zestaw Sumy - znajduje wszystkie zestawy które tworzą określoną sumęZainstaluj wszystkie zależnosci
npm install
Uruchom ESLint
Możesz to uruchomić aby sprawdzić jakość kodu.
npm run lint
Uruchom wszystkie testy
npm test
Uruchom testy używając określonej nazwy
npm test -- 'LinkedList'
Playground
Możesz pociwiczyć ze strukturą danych i algorytmami w ./src/playground/playground.js zakartotekuj i napisz
testy do tego w ./src/playground/__test__/playground.test.js.
Następnie uruchom następującą komendę w celu przetestowania czy twoje kod działa według oczekiwań:
npm test -- 'playground'
â–¶ Struktury Danych i Algorytmy na YouTube
Kolejność wzrastania algorytmów według Big O notacji.

Źródło: Big O Cheat Sheet.
Poniżej umieszczamy listę najbardziej używanych Big O notacji i ich porównania wydajności do róznych rozmiarów z wprowadzonych danych.
| Big O notacja | Obliczenia na 10 elementów | Obliczenia na 100 elementów | Obliczenia na 1000 elementów |
|---|---|---|---|
| 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 |
| Struktura Danych | Dostęp | Szukaj | Umieszczanie | Usuwanie | Komentarze |
|---|---|---|---|---|---|
| Szereg | 1 | n | n | n | |
| Sterta | n | n | 1 | 1 | |
| Kolejka | n | n | 1 | 1 | |
| Lista Powiązana | n | n | 1 | 1 | |
| Tablica funkcji mieszanej | - | n | n | n | W wypadku idealnej funkcji skrótu koszt mógłby sie równać O(1) |
| Binarne Drzewo Poszukiwań | n | n | n | n | W przypadku zrównoważonych kosztów drzew byłoby O(log(n)) |
| B-Drzewo | log(n) | log(n) | log(n) | log(n) | |
| Drzewa czerwono-czarne | log(n) | log(n) | log(n) | log(n) | |
| AVL Drzewo | log(n) | log(n) | log(n) | log(n) | |
| Filtr Blooma | - | 1 | 1 | - | Fałszywe dotatnie są możliwe podczas wyszukiwania |
| Nazwa | Najlepszy | Średni | Najgorszy | Pamięć | Stabilność | Komentarze |
|---|---|---|---|---|---|---|
| Sortowanie bąbelkowe | n | n2 | n2 | 1 | Yes | |
| Sortowanie przez wstawianie | n | n2 | n2 | 1 | Yes | |
| Sortowanie przez wybieranie | n2 | n2 | n2 | 1 | No | |
| Sortowanie przez kopcowanie | n log(n) | n log(n) | n log(n) | 1 | No | |
| Sortowanie przez scalanie | n log(n) | n log(n) | n log(n) | n | Yes | |
| Szybkie sortowanie | n log(n) | n log(n) | n2 | log(n) | No | Szybkie sortowanie jest zazwyczaj robione w miejsce O(log(n)) stosu przestrzeni |
| Sortowanie Shella | n log(n) | zależy od luki w układzie | n (log(n))2 | 1 | No | |
| Sortowanie przez zliczanie | n + r | n + r | n + r | n + r | Yes | r - największy numer w tablicy |
| Sortowanie Radix | n * k | n * k | n * k | n + k | Yes | k -długość najdłuższego klucza |