2020-11-03 01:39:46 +08:00
# JavaScript Algoritmalar ve Veri Yapı ları
[![Build Status ](https://travis-ci.org/trekhleb/javascript-algorithms.svg?branch=master )](https://travis-ci.org/trekhleb/javascript-algorithms)
[![codecov ](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg )](https://codecov.io/gh/trekhleb/javascript-algorithms)
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:_
[_简体中文_ ](README.zh-CN.md ),
[_繁體中文_ ](README.zh-TW.md ),
[_한국어_ ](README.ko-KR.md ),
[_日本語_ ](README.ja-JP.md ),
[_Polski_ ](README.pl-PL.md ),
[_Français_ ](README.fr-FR.md ),
[_Español_ ](README.es-ES.md ),
2020-12-09 15:37:37 +08:00
[_Português_ ](README.pt-BR.md ),
[_Р у с с кий_ ](README.ru-RU.md )
2020-11-03 01:39:46 +08:00
*☝ Not, bu proje araştı rma ve öğrenme amacı ile yapı lmı ş
olup üretim için **yaplı lmamı ştı r** .*
## Veri Yapı ları
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ı ](src/data-structures/linked-list )
* `B` [Çift Yönlü Bağlı Liste ](src/data-structures/doubly-linked-list )
* `B` [Kuyruk ](src/data-structures/queue )
* `B` [Yı ğı n ](src/data-structures/stack )
* `B` [Hash Table ](src/data-structures/hash-table )
* `B` [Heap ](src/data-structures/heap ) - max and min heap versions
* `B` [Öncelikli Kuyruk ](src/data-structures/priority-queue )
* `A` [Trie ](src/data-structures/trie )
* `A` [Ağaç ](src/data-structures/tree )
* `A` [İkili Arama Ağaçları ](src/data-structures/tree/binary-search-tree )
* `A` [AVL Tree ](src/data-structures/tree/avl-tree )
* `A` [Red-Black Tree ](src/data-structures/tree/red-black-tree )
* `A` [Segment Tree ](src/data-structures/tree/segment-tree ) - with min/max/sum range queries examples
* `A` [Fenwick Tree ](src/data-structures/tree/fenwick-tree ) (Binary Indexed Tree)
* `A` [Graph ](src/data-structures/graph ) (both directed and undirected)
* `A` [Disjoint Set ](src/data-structures/disjoint-set )
* `A` [Bloom Filter ](src/data-structures/bloom-filter )
## Algoritmalar
Bir 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
### Konusuna göre Algoritma
* **Matematik**
* `B` [Bit Manipülasyonu ](src/algorithms/math/bits ) - set/get/update/clear bits, multiplication/division by two, make negative etc.
* `B` [Faktöriyel ](src/algorithms/math/factorial )
* `B` [Fibonacci Sayı sı ](src/algorithms/math/fibonacci ) - klasik ve kapalı -form versiyonları
* `B` [Asallı k Testi ](src/algorithms/math/primality-test ) (trial division method)
* `B` [Öklid Algoritması ](src/algorithms/math/euclidean-algorithm ) - En büyük ortak bölen hesaplama (EBOB)
* `B` [En küçük Ortak Kat ](src/algorithms/math/least-common-multiple ) (EKOK)
* `B` [Sieve of Eratosthenes ](src/algorithms/math/sieve-of-eratosthenes ) - belirli bir sayı ya kadarki asal sayı ları bulma
* `B` [Is Power of Two ](src/algorithms/math/is-power-of-two ) - sayı ikinin katı mı sorgusu (naive ve bitwise algoritmaları )
* `B` [Paskal Üçgeni ](src/algorithms/math/pascal-triangle )
* `B` [Karmaşı k Sayı lar ](src/algorithms/math/complex-number ) - karmaşı k sayı lar ve bunlarla temel işlemler
* `B` [Radyan & Derece ](src/algorithms/math/radian ) - radyandan dereceye çeviri ve tersi
* `B` [Fast Powering ](src/algorithms/math/fast-powering )
* `A` [Tamsayı Bölümü ](src/algorithms/math/integer-partition )
* `A` [Karekök ](src/algorithms/math/square-root ) - Newton yöntemi
* `A` [Liu Hui π Algoritması ](src/algorithms/math/liu-hui ) - N-gons'a göre yaklaşı k π hesabı
* `A` [Ayrı k Fourier Dönüşümü ](src/algorithms/math/fourier-transform ) - bir zaman fonksiyonunu (bir sinyal) onu oluşturan frekanslara ayı rı r
* **Setler**
* `B` [Kartezyen Ürün ](src/algorithms/sets/cartesian-product ) - product of multiple sets
* `B` [Fisher– Yates Shuffle ](src/algorithms/sets/fisher-yates ) - sonlu bir dizinin rastgele permütasyonu
* `A` [Power Set ](src/algorithms/sets/power-set ) - all subsets of a set (bitwise and backtracking solutions)
* `A` [Permütasyonlar ](src/algorithms/sets/permutations )(tekrarlı ve tekrarsı z)
* `A` [Kombinasyonlar ](src/algorithms/sets/combinations ) (tekrarlı ve tekrarsı z)
* `A` [En Uzun Ortak Altdizi ](src/algorithms/sets/longest-common-subsequence ) (LCS)
* `A` [En Uzun Artan Altdizi ](src/algorithms/sets/longest-increasing-subsequence )
* `A` [En Kı sa Ortak Üst Sı ra ](src/algorithms/sets/shortest-common-supersequence ) (SCS)
* `A` [Knapsack Problem ](src/algorithms/sets/knapsack-problem ) - "0/1" and "Unbound" ones
* `A` [Maksimum Altdizi ](src/algorithms/sets/maximum-subarray ) - "Brute Force" ve "Dinamik Programlara" (Kadane'nin) versiyonu
* `A` [Kombinasyon Toplamı ](src/algorithms/sets/combination-sum ) - belirli toplamı oluşturan tüm kombinasyonları bulun
* **Metin**
* `B` [Hamming Mesafesi ](src/algorithms/string/hamming-distance ) - sembollerin farklı olduğu konumları n sayı sı
* `A` [Levenshtein Mesafesi ](src/algorithms/string/levenshtein-distance ) - iki sekans arası ndaki minimum düzenleme mesafesi
* `A` [Knuth– Morris– Pratt Algoritması ](src/algorithms/string/knuth-morris-pratt ) (KMP Algorithm) - substring search (pattern matching)
* `A` [Z Algoritması ](src/algorithms/string/z-algorithm ) - altmetin araması (desen eşleştirme)
* `A` [Rabin Karp Algoritması ](src/algorithms/string/rabin-karp ) - altmetin araması
* `A` [En Uzun Ortak Alt Metin ](src/algorithms/string/longest-common-substring )
* `A` [Regular Expression Eşleme ](src/algorithms/string/regular-expression-matching )
* **Aramalar**
* `B` [Doğrusal Arama ](src/algorithms/search/linear-search )
* `B` [Jump Search ](src/algorithms/search/jump-search ) (ya da Block Search) - sı ralı dizide ara
* `B` [İkili Arama ](src/algorithms/search/binary-search ) - sı ralı dizide ara
* `B` [Interpolation Search ](src/algorithms/search/interpolation-search ) - tekdüze dağı tı lmı ş sı ralı dizide arama
* **Sı ralama**
* `B` [Bubble Sort ](src/algorithms/sorting/bubble-sort )
* `B` [Selection Sort ](src/algorithms/sorting/selection-sort )
* `B` [Insertion Sort ](src/algorithms/sorting/insertion-sort )
* `B` [Heap Sort ](src/algorithms/sorting/heap-sort )
* `B` [Merge Sort ](src/algorithms/sorting/merge-sort )
* `B` [Quicksort ](src/algorithms/sorting/quick-sort ) - in-place and non-in-place implementations
* `B` [Shellsort ](src/algorithms/sorting/shell-sort )
* `B` [Counting Sort ](src/algorithms/sorting/counting-sort )
* `B` [Radix Sort ](src/algorithms/sorting/radix-sort )
* **Bağlantı lı Liste**
* `B` [Straight Traversal ](src/algorithms/linked-list/traversal )
* `B` [Reverse Traversal ](src/algorithms/linked-list/reverse-traversal )
* **Ağaçlar**
* `B` [Depth-First Search ](src/algorithms/tree/depth-first-search ) (DFS)
* `B` [Breadth-First Search ](src/algorithms/tree/breadth-first-search ) (BFS)
* **Graphs**
* `B` [Depth-First Search ](src/algorithms/graph/depth-first-search ) (DFS)
* `B` [Breadth-First Search ](src/algorithms/graph/breadth-first-search ) (BFS)
* `B` [Kruskal’ s Algorithm ](src/algorithms/graph/kruskal ) - ağı rlı klı yönlendirilmemiş grafik için Minimum Yayı lma Ağacı 'nı (MST) bulma
* `A` [Dijkstra Algorithm ](src/algorithms/graph/dijkstra ) - tek tepe noktası ndan tüm grafik köşelerine en kı sa yolları bulmak
* `A` [Bellman-Ford Algorithm ](src/algorithms/graph/bellman-ford ) - tek tepe noktası ndan tüm grafik köşelerine en kı sa yolları bulmak
* `A` [Floyd-Warshall Algorithm ](src/algorithms/graph/floyd-warshall ) - tüm köşe çiftleri arası ndaki en kı sa yolları bulun
* `A` [Detect Cycle ](src/algorithms/graph/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 ](src/algorithms/graph/prim ) - ağı rlı klı yönlendirilmemiş grafik için Minimum Yayı lma Ağacı 'nı (MST) bulma
* `A` [Topological Sorting ](src/algorithms/graph/topological-sorting ) - DFS metodu
* `A` [Articulation Points ](src/algorithms/graph/articulation-points ) - Tarjan's algoritması (DFS based)
* `A` [Bridges ](src/algorithms/graph/bridges ) - DFS yöntemi ile algoritma
* `A` [Eulerian Path and Eulerian Circuit ](src/algorithms/graph/eulerian-path ) - Fleury'nin algoritması - Her kenara tam olarak bir kez ulaş
* `A` [Hamiltonian Cycle ](src/algorithms/graph/hamiltonian-cycle ) - Her köşeyi tam olarak bir kez ziyaret et
* `A` [Strongly Connected Components ](src/algorithms/graph/strongly-connected-components ) - Kosaraju's algorithm
* `A` [Travelling Salesman Problem ](src/algorithms/graph/travelling-salesman ) - her şehri ziyaret eden ve başlangı ç şehrine geri dönen mümkün olan en kı sa rota
* **Kriptografi**
* `B` [Polynomial Hash ](src/algorithms/cryptography/polynomial-hash ) - polinom temelinde dönen hash işlevi
* `B` [Caesar Cipher ](src/algorithms/cryptography/caesar-cipher ) - simple substitution cipher
* **Makine Öğrenmesi**
* `B` [NanoNeuron ](https://github.com/trekhleb/nano-neuron ) - 7 simple JS functions that illustrate how machines can actually learn (forward/backward propagation)
* **Kategoriye Ayrı lmayanlar**
* `B` [Tower of Hanoi ](src/algorithms/uncategorized/hanoi-tower )
* `B` [Square Matrix Rotation ](src/algorithms/uncategorized/square-matrix-rotation ) - in-place algorithm
* `B` [Jump Game ](src/algorithms/uncategorized/jump-game ) - backtracking, dynamic programming (top-down + bottom-up) and greedy examples
* `B` [Unique Paths ](src/algorithms/uncategorized/unique-paths ) - backtracking, dynamic programming and Pascal's Triangle based examples
* `B` [Rain Terraces ](src/algorithms/uncategorized/rain-terraces ) - trapping rain water problem (dynamic programming and brute force versions)
* `B` [Recursive Staircase ](src/algorithms/uncategorized/recursive-staircase ) - tepeye ulaşmanı n yolları nı sayma (4 çözüm)
* `A` [N-Queens Problem ](src/algorithms/uncategorized/n-queens )
* `A` [Knight's Tour ](src/algorithms/uncategorized/knight-tour )
### Algoritmik Paradigma
Algoritmik 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.
* **Brute Force** - mümkün olan tüm çözümleri tara ve en iyisini seç
* `B` [Doğrusal Arama ](src/algorithms/search/linear-search )
* `B` [Rain Terraces ](src/algorithms/uncategorized/rain-terraces ) - trapping rain water problem
* `B` [Recursive Staircase ](src/algorithms/uncategorized/recursive-staircase ) - tepeye çı kmanı n yolları nı hesapla
* `A` [Maximum Subarray ](src/algorithms/sets/maximum-subarray )
* `A` [Travelling Salesman Problem ](src/algorithms/graph/travelling-salesman ) - her şehri ziyaret eden ve başlangı ç şehrine geri dönen mümkün olan en kı sa rota
* `A` [Discrete Fourier Transform ](src/algorithms/math/fourier-transform ) - bir zaman fonksiyonunu (bir sinyal) onu oluşturan frekanslara ayı rı r
* **Açgözlü** - geleceği düşünmeden şu an için en iyi seçeneği seçin
* `B` [Jump Game ](src/algorithms/uncategorized/jump-game )
* `A` [Unbound Knapsack Problem ](src/algorithms/sets/knapsack-problem )
* `A` [Dijkstra Algorithm ](src/algorithms/graph/dijkstra ) - tüm grafik köşelerine giden en kı sa yolu bulmak
* `A` [Prim’ s Algorithm ](src/algorithms/graph/prim ) - ağı rlı klı yönlendirilmemiş grafik için Minimum Yayı lma Ağacı 'nı (MST) bulma
* `A` [Kruskal’ s Algorithm ](src/algorithms/graph/kruskal ) - ağı rlı klı yönlendirilmemiş grafik için Minimum Yayı lma Ağacı 'nı (MST) bulma
* **Böl ve Fethet** - sorunu daha küçük parçalara bölün ve sonra bu parçaları çözün
* `B` [Binary Search ](src/algorithms/search/binary-search )
* `B` [Tower of Hanoi ](src/algorithms/uncategorized/hanoi-tower )
* `B` [Pascal's Triangle ](src/algorithms/math/pascal-triangle )
* `B` [Euclidean Algorithm ](src/algorithms/math/euclidean-algorithm ) - calculate the Greatest Common Divisor (GCD)
* `B` [Merge Sort ](src/algorithms/sorting/merge-sort )
* `B` [Quicksort ](src/algorithms/sorting/quick-sort )
* `B` [Tree Depth-First Search ](src/algorithms/tree/depth-first-search ) (DFS)
* `B` [Graph Depth-First Search ](src/algorithms/graph/depth-first-search ) (DFS)
* `B` [Jump Game ](src/algorithms/uncategorized/jump-game )
* `B` [Fast Powering ](src/algorithms/math/fast-powering )
* `A` [Permutations ](src/algorithms/sets/permutations ) (tekrarlı ve tekrarsı z)
* `A` [Combinations ](src/algorithms/sets/combinations ) (tekrarlı ve tekrarsı z)
* **Dinamik Programlama** - önceden bulunan alt çözümleri kullanarak bir çözüm oluşturmak
* `B` [Fibonacci Sayı sı ](src/algorithms/math/fibonacci )
* `B` [Jump Game ](src/algorithms/uncategorized/jump-game )
* `B` [Eşsiz Yol ](src/algorithms/uncategorized/unique-paths )
* `B` [Rain Terraces ](src/algorithms/uncategorized/rain-terraces ) - trapping rain water problem
* `B` [Recursive Staircase ](src/algorithms/uncategorized/recursive-staircase ) - zirveye ulaşmanı n yolları nı n sayı sı nı sayı n
* `A` [Levenshtein Distance ](src/algorithms/string/levenshtein-distance ) - iki sekans arası ndaki minimum düzenleme mesafesi
* `A` [Longest Common Subsequence ](src/algorithms/sets/longest-common-subsequence ) (LCS)
* `A` [Longest Common Substring ](src/algorithms/string/longest-common-substring )
* `A` [Longest Increasing Subsequence ](src/algorithms/sets/longest-increasing-subsequence )
* `A` [Shortest Common Supersequence ](src/algorithms/sets/shortest-common-supersequence )
* `A` [0/1 Knapsack Problem ](src/algorithms/sets/knapsack-problem )
* `A` [Integer Partition ](src/algorithms/math/integer-partition )
* `A` [Maximum Subarray ](src/algorithms/sets/maximum-subarray )
* `A` [Bellman-Ford Algorithm ](src/algorithms/graph/bellman-ford ) - tüm grafik köşelerine giden en kı sa yolu bulmak
* `A` [Floyd-Warshall Algorithm ](src/algorithms/graph/floyd-warshall ) - tüm köşe çiftleri arası ndaki en kı sa yolları bulun
* `A` [Regular Expression Matching ](src/algorithms/string/regular-expression-matching )
* **Backtracking** - brute forceye benzer, mümkün tüm sonuçları tara, ancak bir sonraki çözümü her ürettiğinizde test edersiniz
tüm koşulları karşı lı yorsa ve ancak o zaman sonraki çözümleri üretmeye devam edin. Aksi takdirde, geri dönün ve farklı bir çözüm arayı n(?).
Normally the DFS traversal of state-space is being used.
* `B` [Jump Game ](src/algorithms/uncategorized/jump-game )
* `B` [Unique Paths ](src/algorithms/uncategorized/unique-paths )
* `B` [Power Set ](src/algorithms/sets/power-set ) - all subsets of a set
* `A` [Hamiltonian Cycle ](src/algorithms/graph/hamiltonian-cycle ) - Her köşeyi tam olarak bir kez ziyaret edin
* `A` [N-Queens Problem ](src/algorithms/uncategorized/n-queens )
* `A` [Knight's Tour ](src/algorithms/uncategorized/knight-tour )
* `A` [Combination Sum ](src/algorithms/sets/combination-sum ) - belirli toplamı oluşturan tüm kombinasyonları bulun
* **Branch & Bound** - remember the lowest-cost solution found at each stage of the backtracking
search, and use the cost of the lowest-cost solution found so far as a lower bound on the cost of
a least-cost solution to the problem, in order to discard partial solutions with costs larger than the
lowest-cost solution found so far. Normally BFS traversal in combination with DFS traversal of state-space
tree is being used.
## Repository'in Kullanı mı
**Bü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'
```
## Yararlı Bilgiler
### Referanslar
[▶ Data Structures and Algorithms on YouTube ](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8 )
### Big O Notation
* Big O notation *, algoritmaları , giriş boyutu büyüdükçe çalı şma süresi veya alan gereksinimlerinin nası l arttı ğı na göre sı nı flandı rmak için kullanı lı r.
Aşağı daki grafikte, Big O gösteriminde belirtilen algoritmaları n en yaygı n büyüme sı raları nı bulabilirsiniz.
![Big O graphs ](./assets/big-o-graph.png )
Kaynak: [Big O Cheat Sheet ](http://bigocheatsheet.com/ ).
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ı İşlem Karmaşı klı ğı
| 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 |
### Dizi Sı ralama Algoritmaları Karmaşı klı ğı
| İsim | En İyi | Ortalama | En Kötü | Hafı za | Kararlı | Yorumlar |
| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- |
| **Bubble sort** | n | n< sup > 2</ sup > | n< sup > 2</ sup > | 1 | Evet | |
| **Insertion sort** | n | n< sup > 2</ sup > | n< sup > 2</ sup > | 1 | Evet | |
| **Selection sort** | n< sup > 2</ sup > | n< sup > 2</ sup > | n< sup > 2</ sup > | 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) | n< sup > 2</ sup > | 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))< sup > 2</ sup > | 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 |
## Projeyi Destekleme
Bu projeyi buradan destekleyebilirsiniz ❤️️ [GitHub ](https://github.com/sponsors/trekhleb ) veya ❤️️ [Patreon ](https://www.patreon.com/trekhleb ).