同步操作将从 Gitee 极速下载/javascript-algorithms 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Repositori ini berisi contoh-contoh algoritme dan struktur data yang populer menggunakan JavaScript.
Setiap algoritme dan struktur data memiliki README-nya tersendiri dengan penjelasan yang berkaitan dan tautan untuk bacaan lebih lanjut (termasuk tautan menuju video YouTube).
Baca ini dalam bahasa yang lain: English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Українська, Arabic
☝ Perhatikan bahwa proyek ini hanya dimaksudkan untuk tujuan pembelajaran dan riset, dan tidak dimaksudkan untuk digunakan sebagai produksi.
Struktur data adalah cara tertentu untuk mengatur dan menyimpan data dalam komputer sehingga dapat diakses dan diubah secara efisien. Lebih tepatnya, struktur data adalah kumpulan dari nilai data, relasi di antara data-data, dan fungsi atau operasi yang dapat diterapkan pada data.
P
- Pemula, L
- Lanjutan
P
Senarai Berantai
P
Senarai Berantai Ganda
P
Antrean
P
Tumpukan
P
Tabel Hash
P
Heap - versi heap maksimum dan minimumP
Antrean Prioritas
L
Trie
L
Pohon
L
Pohon Telusur Biner
L
AVL Tree
L
Pohon Merah Hitam
L
Segment Tree - dengan contoh min/max/sum range queryL
Pohon Fenwick (Binary Indexed Tree)L
Graf (directed dan undirected)L
Disjoint Set
L
Bloom Filter
Algoritme adalah sebuah perincian yang jelas tentang cara untuk memecahkan suatu masalah. Ia adalah sekumpulan aturan yang menjelaskan secara tepat urutan-urutan dari sebuah operasi.
P
- Pemula, L
- Lanjutan
P
Manipulasi Bit - menetapkan/mendapatkan/memperbarui/mengahpus bit, perkalian/pembagian dengan angka 2, membuat bilangan negatif etc.P
Faktorial
P
Bilangan Fibonacci - versi klasik dan bentuk tertutupP
Faktor Prima - menemukan faktor prima dan menghitungnya menggunakan teorema Hardy-RamanujanP
Pengujian Bilangan Prima (metode trial division)P
Algoritme Euclidean - menghitung Faktor Persekutuan Terbesar (FPB)P
Least Common Multiple (LCM)P
Sieve of Eratosthenes - menemukan semua bilangan prima hingga batas yang ditentukanP
Is Power of Two - mengecek apakah sebuah bilangan adalah hasil dari pangkat dua (algoritme naive dan bitwise)P
Segitiga Pascal
P
Bilangan Kompleks - bilangan kompleks dengan operasi dasarnyaP
Radian & Derajat - konversi radian ke derajat dan sebaliknyaP
Fast Powering
P
Metode Horner - evaluasi polinomialL
Partisi Bilangan Bulat
L
Akar Pangkat Dua - metode NewtonL
Algoritme π Liu Hui - perkiraan perhitungan π berdasarkan segibanyakL
Transformasi Diskrit Fourier - menguraikan fungsi waktu (sinyal) menjadi frekuensi yang menyusunnyaP
Produk Kartesian - hasil dari beberapa himpunanP
Pengocokan Fisher–Yates - permutasi acak dari sebuah urutan terhinggaL
Himpunan Kuasa - semua himpunan bagian dari sebuah himpunanL
Permutasi (dengan dan tanpa pengulangan)L
Kombinasi (dengan dan tanpa pengulangan)L
Longest Common Subsequence (LCS)L
Longest Increasing Subsequence
L
Shortest Common Supersequence (SCS)L
Permasalahan Knapsack - "0/1" dan yang tidak "dibatasi"L
Upalarik Maksimum - "Brute Force" dan "Pemrograman Dinamis" versi KadaneL
Combination Sum - menemukan semua kombinasi yang membentuk jumlah tertentuP
Jarak Hamming - jumlah posisi di mana ditemukan simbol-simbol yang berbedaL
Algoritme Jarak Levenshtein - edit distance minimum antara dua urutanL
Algoritme Knuth–Morris–Pratt (Algoritme KMP) - pencarian substring (pencocokan pola)L
AlgoritmeZ - pencarian substring (pencocokan pola)L
Algoritme Rabin Karp - pencarian substringL
Longest Common Substring
L
Pencocokan Ekspresi Reguler
P
Pencarian Linier
P
Pencarian Lompat (atau Block Search) - pencarian di larik tersortirP
Pencarian Biner - pencarian di larik tersortirP
Pencarian Interpolasi - pencarian di larik tersortir yang terdistribusi seragamP
Sortir Gelembung
P
Sortir Seleksi
P
Sortir Sisipan
P
Sortir Heap
P
Sortir Gabungan
P
Sortir Cepat - implementasi in-place dan non-in-place
P
Sortir Shell
P
Sortir Perhitungan
P
Sortir Akar
P
Pencarian Kedalaman Pertama (DFS)P
Pencarian Luas Pertama (BFS)P
Pencarian Kedalaman Pertama (DFS)P
Pencarian Luas Pertama (BFS)P
Algoritme Kruskal - mencari rentang pohon minimum untuk graf tidak berarah berbobotL
Algoritme Dijkstra - menemukan jalur terpendek ke semua sudut graf dari sudut tunggalL
Algoritme Bellman-Ford - menemukan jalur terpendek ke semua sudut graf dari sudut tunggalL
Algoritme Floyd-Warshall - menemukan jalur terpendek antara semua pasangan sudutL
Mendeteksi Siklus - untuk graf berarah dan tidak berarah (berdasarkan versi DFS dan Disjoint Set)L
ALgoritme Prim - mencari rentang pohon minimum untuk graf tidak berarah berbobotL
Sortir Topologi - metode DFSL
Poin Artikulasi - Algoritme Tarjan (berdasarkan DFS)L
Jembatan - Algoritme berdasarkan DFSL
Jalur dan Sirkuit Eulerian - Algoritme Fleury - Mengunjungi setiap tepinya tepat satu kaliL
Siklus Hamiltonian - mengunjungi setiap sudutnya tepat satu kaliL
Komponen yang Terkoneksi dengan Kuat - Algoritme KosarajuL
Permasalahan Penjual Keliling - kemungkinan rute terpendek untuk mengunjungi setiap kota dan kembali lagi ke kota asalP
Polinomial Hash - fungsi rolling hash berdasarkan polinomialP
Sandi Caesar - sandi pengganti sederhanaP
NanoNeuron - 7 fungsi JS sederhana yang mengilustrasikan bagaimana mesin-mesin dapat benar-benar belajar (perambatan maju/mundur)P
Menara Hanoi
P
Perputaran Matriks Persegi - algoritme in-place
P
Permainan Melompat - runut-balik, pemrograman dinamis (atas ke bawah + bawah ke atas) and contoh-contoh greedy
P
Unique Paths - runut-balik, pemrograman dinamis and contoh-contoh beradsarkan Segitiga PascalP
Rain Terraces - permasalahan trapping rain water (versi pemrograman dinamis and brute force)P
Tangga Rekursif - menghitung jumlah cara untuk mencapai ke atas tangga (4 solusi)L
Permainan N-Queen
L
Permainan Knight's Tour
Paradigma algoritmik adalah sebuah metode atau pendekatan umum yang mendasari desain sebuah tingkatan algoritme. Paradigma algoritmik merupakan abstraksi yang lebih tinggi dari gagasan sebuah algoritme, seperti halnya sebuah algoritme merupakan abstraksi yang lebih tinggi dari sebuah program komputer.
P
Pencarian Linier
P
Rain Terraces - permasalahan trapping rain water
P
Tangga Rekursif - menghitung jumlah cara untuk mencapai ke atas tanggaL
Upalarik Maksimum
L
Permasalahan Penjual Keliling - kemungkinan rute terpendek untuk mengunjungi setiap kota dan kembali lagi ke kota asalL
Transformasi Diskrit Fourier - menguraikan fungsi waktu (sinyal) menjadi frekuensi yang menyusunnyaP
Permainan Melompat
L
Permasalahan Knapsack yang Tidak Dibatasi
L
Algoritme Dijkstra - menemukan jalur terpendek ke semua sudut graf dari sudut tunggalL
Algoritme Prim - mencari rentang pohon minimum untuk graf tidak berarah berbobotL
Algoritme Kruskal - mencari rentang pohon minimum untuk graf tidak berarah berbobotP
Pencarian Biner
P
Menara Hanoi
P
Segitiga Pascal
P
Algoritme Euclidean - menghitung Faktor Persekutuan Terbesar (FPB)P
Sortir Gabungan
P
Sortir Cepat
P
Pencarian Kedalaman Pertama untuk Pohon (DFS)P
Pencarian Kedalaman Pertama untuk Graf (DFS)P
Permainan Melompat
P
Fast Powering
L
Permutasi (dengan dan tanpa pengulangan)L
Kombinasi (dengan dan tanpa pengulangan)P
Bilangan Fibonacci
P
Permainan Melompat
P
Unique Paths
P
Rain Terraces - permasalahan trapping rain water
P
Tangga Rekursif - menghitung jumlah cara untuk mencapai ke atas tanggaL
Algoritme Jarak Levenshtein - edit distance minimum antara dua urutanL
Longest Common Subsquence (LCS)L
Longest Common Substring
L
Longest Increasing Subsequence
L
Shortest Common Supersequence
L
Permasalahan Knapsack 0/1
L
Partisi Bilangan Bulat
L
Upalarik Maksimum
L
Algoritme Bellman-Ford - menemukan jalur terpendek ke semua sudut graf dari sudut tunggalL
Algoritme Floyd-Warshall - menemukan jalur terpendek antara semua pasangan sudutL
Pencocokan Ekspresi Reguler
P
Permainan Melompat
P
Unique Paths
P
Himpunan Kuasa - semua himpunan bagian dari sebuah himpunanL
Siklus Hamiltonian - mengunjungi setiap sudutnya tepat satu kaliL
Permainan N-Queen
L
Permainan Knight's Tour
L
Combination Sum - menemukan semua kombinasi yang membentuk jumlah tertentuMeng-install semua dependensi
npm install
Menjalankan ESLint
Anda dapat menjalankannya untuk memeriksa kualitas kode.
npm run lint
Menjalankan semua tes
npm test
Menjalankan tes berdasarkan nama
npm test -- 'LinkedList'
Playground
Anda dapat bermain dengan algoritme dan struktur data di file ./src/playground/playground.js
dan menuliskan tesnya di ./src/playground/__test__/playground.test.js
.
Lalu, hanya tinggal menjalankan perintah berikut untuk mengetes apakah kode playground anda bekerja sesuai dengan keinginan:
npm test -- 'playground'
▶ Algoritme dan Struktur Data di YouTube
Notasi Big O digunakan untuk mengklasifikasikan algoritme berdasarkan durasi atau ruang yang dibutuhkan seiring bertambahnya input. Pada grafik dibawah, anda dapat menemukan urutan pertumbuhan yang paling umum dari algoritme yang ditentukan dalam notasi Big O.
Sumber: Big O Cheat Sheet.
Di bawah ini adalah daftar dari beberapa notasi Bog O yang sering digunakan dan perbandingan kinerjanya terhadap berbagai ukuran input data.
Notasi Big O | Komputasi untuk 10 elemen | Komputasi untuk 100 elemen | Komputasi untuk 1000 elemen |
---|---|---|---|
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 |
Struktur Data | Akses | Pencarian | Penyisipan | Penghapusan | Keterangan |
---|---|---|---|---|---|
Array (Larik) | 1 | n | n | n | |
Stack (Tumpukan) | n | n | 1 | 1 | |
Queue (Antrean) | n | n | 1 | 1 | |
Linked List (Senarai Berantai) | n | n | 1 | n | |
Hash Table | - | n | n | n | Apabila fungsi hash sempurna, biayanya akan menjadi O(1) |
Binary Search Tree (Pohon Telusur Biner) | n | n | n | n | Apabila pohon seimbang, biayanya akan menjadi O(log(n)) |
B-Tree | log(n) | log(n) | log(n) | log(n) | |
Red-Black Tree (Pohon Merah-Hitam) | log(n) | log(n) | log(n) | log(n) | |
AVL Tree | log(n) | log(n) | log(n) | log(n) | |
Bloom Filter | - | 1 | 1 | - | Positif palsu dimungkinkan saat pencarian |
Nama | Terbaik | Rata-rata | Terburuk | Memori | Stabil | Keterangan |
---|---|---|---|---|---|---|
Bubble sort (Sortir Gelembung) | n | n2 | n2 | 1 | Ya | |
Insertion sort (Sortir Sisipan) | n | n2 | n2 | 1 | Ya | |
Selection sort (Sortir Seleksi) | n2 | n2 | n2 | 1 | Tidak | |
Heap sort (Sortir Heap) | n log(n) | n log(n) | n log(n) | 1 | Tidak | |
Merge Sort (Sortir Gabungan) | n log(n) | n log(n) | n log(n) | n | Ya | |
Quick sort (Sortir Cepat) | n log(n) | n log(n) | n2 | log(n) | Tidak | Sortir Cepat biasanya dilakukan secara in-place dengan O(log(n)) ruang tumpukan |
Shell sort (Sortir Shell) | n log(n) | tergantung pada jarak urutan | n (log(n))2 | 1 | Tidak | |
Counting sort (Sortir Perhitungan) | n + r | n + r | n + r | n + r | Ya | r - angka terbesar dalam larik |
Radix sort (Sortir Akar) | n * k | n * k | n * k | n + k | Ya | k - panjang dari kunci terpanjang |
Anda dapat mendukung proyek ini via ❤️️ GitHub atau ❤️️ Patreon.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。