javascript-algorithms

JavaScript Algoritmalar ve Veri Yapıları

CI codecov

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.

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

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

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.

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

Big O Notation

Big O graphs

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ı İş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 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

Projeyi Destekleme

Bu projeyi buradan destekleyebilirsiniz ❤️️ GitHub veya ❤️️ Patreon.