/javascript-algorithms

Bu repository popüler algoritmaların ve veri yapılarının birçoğunun Javascript tabanlı örneklerini bulundurur.

Primary LanguageJavaScriptMIT LicenseMIT

JavaScript Algoritmalar ve Veri Yapıları

Bu repository popüler algoritmaların ve veri yapılarının birçoğunun Javascript tabanlı örneklerini bulundurur.

Her bir algoritma ve veri yapısı kendine ait açıklama ve videoya sahip README dosyası içerir.

☝ Not, bu proje araştırma ve öğrenme amacı ile yapılmış olup üretim için yapı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 iyi ifadeyle, 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. Bir işlem dizisini açık olarak tanımlayan kurallar dizisidir.

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 notation *, algoritmaları, girdi 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

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

ℹ️ Tüm Projelerime burdan ulaşabilirsiniz.