Bu repository JavaScript’e ait popüler algoritma ve veri yapılarını içermektedir.
Her bir algoritma ve veri yapısı kendine ait açıklama ve videoya sahip README dosyası içerir.
Read this in other languages: 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Italiana
☝ Not, bu proje araştırma ve öğrenme amacı ile yapılmış olup üretim için yaplılmamıştır.
Bir veri yapısı, verileri bir bilgisayarda organize etmenin ve depolamanın belirli bir yoludur, böylece verimli bir şekilde erişilebilir ve değiştirilebilir. Daha doğrusu, bir veri yapısı bir veri koleksiyonudur, aralarındaki ilişkiler, ve işlevler veya işlemler veriye uygulanabilir.
B - Başlangıç, A - İleri Seviye
B Bağlantılı Veri YapısıB Çift Yönlü Bağlı ListeB KuyrukB YığınB Hash TableB Heap - max and min heap versionsB Öncelikli KuyrukA TrieA Ağaç
A İkili Arama AğaçlarıA AVL TreeA Red-Black TreeA Segment Tree - with min/max/sum range queries examplesA Fenwick Tree (Binary Indexed Tree)A Graph (both directed and undirected)A Disjoint SetA Bloom FilterBir algoritma, bir problem sınıfının nasıl çözüleceğine dair kesin bir tanımlamadır. Bu bir işlem dizisini kesin olarak tanımlayan bir dizi kural.
B - Başlangıç, A - İleri Seviye
B Bit Manipülasyonu - set/get/update/clear bits, multiplication/division by two, make negative etc.B FaktöriyelB Fibonacci Sayısı - klasik ve kapalı-form versiyonlarıB Asallık Testi (trial division method)B Öklid Algoritması - En büyük ortak bölen hesaplama (EBOB)B En küçük Ortak Kat (EKOK)B Sieve of Eratosthenes - belirli bir sayıya kadarki asal sayıları bulmaB Is Power of Two - sayı ikinin katı mı sorgusu (naive ve bitwise algoritmaları)B Paskal ÜçgeniB Karmaşık Sayılar - karmaşık sayılar ve bunlarla temel işlemlerB Radyan & Derece - radyandan dereceye çeviri ve tersiB Fast PoweringA Tamsayı BölümüA Karekök - Newton yöntemiA Liu Hui π Algoritması - N-gons’a göre yaklaşık π hesabıA Ayrık Fourier Dönüşümü - bir zaman fonksiyonunu (bir sinyal) onu oluşturan frekanslara ayırırB Kartezyen Ürün - product of multiple setsB Fisher–Yates Shuffle - sonlu bir dizinin rastgele permütasyonuA Power Set - all subsets of a set (bitwise and backtracking solutions)A Permütasyonlar(tekrarlı ve tekrarsız)A Kombinasyonlar (tekrarlı ve tekrarsız)A En Uzun Ortak Altdizi (LCS)A En Uzun Artan AltdiziA En Kısa Ortak Üst Sıra (SCS)A Knapsack Problem - “0/1” and “Unbound” onesA Maksimum Altdizi - “Brute Force” ve “Dinamik Programlara” (Kadane’nin) versiyonuA Kombinasyon Toplamı - belirli toplamı oluşturan tüm kombinasyonları bulunB Hamming Mesafesi - sembollerin farklı olduğu konumların sayısıA Levenshtein Mesafesi - iki sekans arasındaki minimum düzenleme mesafesiA Knuth–Morris–Pratt Algoritması (KMP Algorithm) - substring search (pattern matching)A Z Algoritması - altmetin araması (desen eşleştirme)A Rabin Karp Algoritması - altmetin aramasıA En Uzun Ortak Alt MetinA Regular Expression EşlemeB Doğrusal AramaB Jump Search (ya da Block Search) - sıralı dizide araB İkili Arama - sıralı dizide araB Interpolation Search - tekdüze dağıtılmış sıralı dizide aramaB Bubble SortB Selection SortB Insertion SortB Heap SortB Merge SortB Quicksort - in-place and non-in-place implementationsB ShellsortB Counting SortB Radix SortB Depth-First Search (DFS)B Breadth-First Search (BFS)B Depth-First Search (DFS)B Breadth-First Search (BFS)B Kruskal’s Algorithm - ağırlıklı yönlendirilmemiş grafik için Minimum Yayılma Ağacı’nı (MST) bulmaA Dijkstra Algorithm - tek tepe noktasından tüm grafik köşelerine en kısa yolları bulmakA Bellman-Ford Algorithm - tek tepe noktasından tüm grafik köşelerine en kısa yolları bulmakA Floyd-Warshall Algorithm - tüm köşe çiftleri arasındaki en kısa yolları bulunA Detect Cycle - hem yönlendirilmiş hem de yönlendirilmemiş grafikler için (DFS ve Ayrık Küme tabanlı sürümler)A Prim’s Algorithm - ağırlıklı yönlendirilmemiş grafik için Minimum Yayılma Ağacı’nı (MST) bulmaA Topological Sorting - DFS metoduA Articulation Points - Tarjan’s algoritması (DFS based)A Bridges - DFS yöntemi ile algoritmaA Eulerian Path and Eulerian Circuit - Fleury’nin algoritması - Her kenara tam olarak bir kez ulaşA Hamiltonian Cycle - Her köşeyi tam olarak bir kez ziyaret etA Strongly Connected Components - Kosaraju’s algorithmA Travelling Salesman Problem - her şehri ziyaret eden ve başlangıç şehrine geri dönen mümkün olan en kısa rotaB Polynomial Hash - polinom temelinde dönen hash işleviB Caesar Cipher - simple substitution cipherB NanoNeuron - 7 simple JS functions that illustrate how machines can actually learn (forward/backward propagation)B Tower of HanoiB Square Matrix Rotation - in-place algorithmB Jump Game - backtracking, dynamic programming (top-down + bottom-up) and greedy examplesB Unique Paths - backtracking, dynamic programming and Pascal’s Triangle based examplesB Rain Terraces - trapping rain water problem (dynamic programming and brute force versions)B Recursive Staircase - tepeye ulaşmanın yollarını sayma (4 çözüm)A N-Queens ProblemA Knight’s TourAlgoritmik paradigma, bir sınıfın tasarımının altında yatan genel bir yöntem veya yaklaşımdır. Algoritma dizayn tekniği olarak düşünülebilir. Her bir altproblemi (subproblem) asıl problemle benzerlik gösteren problemlere uygulanabilir.
B Doğrusal AramaB Rain Terraces - trapping rain water problemB Recursive Staircase - tepeye çıkmanın yollarını hesaplaA Maximum SubarrayA Travelling Salesman Problem - her şehri ziyaret eden ve başlangıç şehrine geri dönen mümkün olan en kısa rotaA Discrete Fourier Transform - bir zaman fonksiyonunu (bir sinyal) onu oluşturan frekanslara ayırırB Jump GameA Unbound Knapsack ProblemA Dijkstra Algorithm - tüm grafik köşelerine giden en kısa yolu bulmakA Prim’s Algorithm - ağırlıklı yönlendirilmemiş grafik için Minimum Yayılma Ağacı’nı (MST) bulmaA Kruskal’s Algorithm - ağırlıklı yönlendirilmemiş grafik için Minimum Yayılma Ağacı’nı (MST) bulmaB Binary SearchB Tower of HanoiB Pascal’s TriangleB Euclidean Algorithm - calculate the Greatest Common Divisor (GCD)B Merge SortB QuicksortB Tree Depth-First Search (DFS)B Graph Depth-First Search (DFS)B Jump GameB Fast PoweringA Permutations (tekrarlı ve tekrarsız)A Combinations (tekrarlı ve tekrarsız)B Fibonacci SayısıB Jump GameB Eşsiz YolB Rain Terraces - trapping rain water problemB Recursive Staircase - zirveye ulaşmanın yollarının sayısını sayınA Levenshtein Distance - iki sekans arasındaki minimum düzenleme mesafesiA Longest Common Subsequence (LCS)A Longest Common SubstringA Longest Increasing SubsequenceA Shortest Common SupersequenceA 0/1 Knapsack ProblemA Integer PartitionA Maximum SubarrayA Bellman-Ford Algorithm - tüm grafik köşelerine giden en kısa yolu bulmakA Floyd-Warshall Algorithm - tüm köşe çiftleri arasındaki en kısa yolları bulunA Regular Expression MatchingB Jump GameB Unique PathsB Power Set - all subsets of a setA Hamiltonian Cycle - Her köşeyi tam olarak bir kez ziyaret edinA N-Queens ProblemA Knight’s TourA Combination Sum - belirli toplamı oluşturan tüm kombinasyonları bulunBütün dependencyleri kurun
npm install
ESLint’i başlatın
Bunu kodun kalitesini kontrol etmek amacı ile çalıştırabilirsin.
npm run lint
Bütün testleri çalıştır
npm test
Testleri ismine göre çalıştır
npm test -- 'LinkedList'
Deneme Alanı
data-structures ve algorithms içerisinde ./src/playground/playground.js
yazarak ./src/playground/__test__/playground.test.js için test edebilirsin.
Ardından basitçe alttaki komutu girerek kodunun beklendiği gibi çalışıp çalışmadığını test edebilirsin:
npm test -- 'playground'
▶ Data Structures and Algorithms on YouTube

Kaynak: Big O Cheat Sheet.
Altta Big O notations ve farklı input boyutlarına karşın yapılmış performans karşılaştırması listelenmektedir.
| Big O Notation | 10 Element için hesaplama | 100 Element için hesaplama | 1000 Element için hesaplama |
|---|---|---|---|
| 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 |
| Veri Yapısı | Access | Search | Insertion | Deletion | Comments |
|---|---|---|---|---|---|
| Dizi | 1 | n | n | n | |
| Yığın | n | n | 1 | 1 | |
| Sıralı | n | n | 1 | 1 | |
| Bağlantılı Liste | n | n | 1 | n | |
| Yığın Tablo | - | n | n | n | Kusursuz hash fonksiyonu durumunda sonuç O(1) |
| İkili Arama Ağacı | n | n | n | n | In case of balanced tree costs would be 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 | - | Arama esnasında yanlış sonuçlar çıkabilir |
| İsim | En İyi | Ortalama | En Kötü | Hafıza | Kararlı | Yorumlar |
|---|---|---|---|---|---|---|
| Bubble sort | n | n2 | n2 | 1 | Evet | |
| Insertion sort | n | n2 | n2 | 1 | Evet | |
| Selection sort | n2 | n2 | n2 | 1 | Hayır | |
| Heap sort | n log(n) | n log(n) | n log(n) | 1 | Hayır | |
| Merge sort | n log(n) | n log(n) | n log(n) | n | Evet | |
| Quick sort | n log(n) | n log(n) | n2 | log(n) | Hayır | Hızlı sıralama genellikle O(log(n)) yığın alanıyla yapılır |
| Shell sort | n log(n) | depends on gap sequence | n (log(n))2 | 1 | Hayır | |
| Counting sort | n + r | n + r | n + r | n + r | Evet | r - dizideki en büyük sayı |
| Radix sort | n * k | n * k | n * k | n + k | Evet | k - en uzun key’in uzunluğu |
Bu projeyi buradan destekleyebilirsiniz ❤️️ GitHub veya ❤️️ Patreon.