|
| 1 | +# Algoritma JavaScript dan Struktur Data |
| 2 | + |
| 3 | +> 🇺🇦 UKRAINE [SEDANG DISERANG](https://twitter.com/MFA_Ukraine) OLEH TENTERA RUSIA. ORANG AWAM SEMAKIN DIBUNUH. KAWASAN KEDIAMAN SEMAKIN DIBOM. |
| 4 | +> - Bantu Ukraine melalui [Bank Negara Ukraine](https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi) |
| 5 | +> - Bantu Ukraine melalui dana [SaveLife](https://savelife.in.ua/en/donate-en/) |
| 6 | +> - Maklumat lanjut tentang [war.ukraine.ua](https://war.ukraine.ua/) |
| 7 | +
|
| 8 | +[](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow% 3ACI+cawangan%3Amaster) |
| 9 | +[](https://codecov.io/gh/trekhleb/javascript-algorithms) |
| 10 | + |
| 11 | +Repositori ini mengandungi banyak contoh berasaskan JavaScript |
| 12 | +algoritma dan struktur data yang popular. |
| 13 | + |
| 14 | +Setiap algoritma dan struktur data mempunyai README tersendiri |
| 15 | +dengan penjelasan dan pautan berkaitan untuk bacaan lanjut (termasuk yang |
| 16 | +kepada video YouTube). |
| 17 | + |
| 18 | +_Baca ini dalam bahasa lain:_ |
| 19 | +[_简体中文_](README.zh-CN.md), |
| 20 | +[_繁體中文_](README.zh-TW.md), |
| 21 | +[_한국어_](README.ko-KR.md), |
| 22 | +[_日本語_](README.ja-JP.md), |
| 23 | +[_Polski_](README.pl-PL.md), |
| 24 | +[_Français_](README.fr-FR.md), |
| 25 | +[_Español_](README.es-ES.md), |
| 26 | +[_Português_](README.pt-BR.md), |
| 27 | +[_Русский_](README.ru-RU.md), |
| 28 | +[_Türk_](README.tr-TR.md), |
| 29 | +[_Italiana_](README.it-IT.md), |
| 30 | +[_Bahasa Indonesia_](README.id-ID.md), |
| 31 | +[_Українська_](README.uk-UA.md), |
| 32 | +[_Arab_](README.ar-AR.md), |
| 33 | +[_Tiếng Việt_](README.vi-VN.md), |
| 34 | +[_Deutsch_](README.de-DE.md) |
| 35 | + |
| 36 | +*☝ Ambil perhatian bahawa projek ini bertujuan untuk digunakan untuk tujuan pembelajaran dan penyelidikan |
| 37 | +sahaja, dan ia **tidak** bertujuan untuk digunakan untuk pengeluaran.* |
| 38 | + |
| 39 | +## Struktur Data |
| 40 | + |
| 41 | +Struktur data ialah cara tertentu untuk mengatur dan menyimpan data dalam komputer supaya ia boleh |
| 42 | +boleh diakses dan diubah suai dengan cekap. Lebih tepat lagi, struktur data ialah himpunan data |
| 43 | +nilai, hubungan di antara mereka, dan fungsi atau operasi yang boleh digunakan |
| 44 | +data itu. |
| 45 | + |
| 46 | +`B` - Pemula, `A` - Lanjutan |
| 47 | + |
| 48 | +* `B` [Senarai Terpaut](src/struktur-data/senarai-terpaut) |
| 49 | +* `B` [Senarai Terpaut Berganda](src/struktur-data/senarai-berpaut-dua) |
| 50 | +* `B` [Barisan](src/struktur-data/baris gilir) |
| 51 | +* `B` [Timbunan](src/struktur-data/tindanan) |
| 52 | +* `B` [Jadual Hash](src/struktur-data/jadual cincang) |
| 53 | +* `B` [Timbunan](src/struktur-data/timbunan) - versi timbunan maks dan min |
| 54 | +* `B` [Baris Keutamaan](src/struktur-data/baris gilir keutamaan) |
| 55 | +* `A` [Trie](src/data-structures/trie) |
| 56 | +* `A` [Pokok](src/struktur-data/pokok) |
| 57 | + * `A` [Pokok Carian Perduaan](src/struktur-data/pokok/pokok-cari-perduaan) |
| 58 | + * `A` [AVL Tree](src/data-structures/tree/avl-tree) |
| 59 | + * `A` [Pokok Merah-Hitam](src/struktur-data/pokok/pokok-merah-hitam) |
| 60 | + * `A` [Pokok Segmen](src/data-structures/tree/segment-tree) - dengan contoh pertanyaan julat min/maks/jumlah |
| 61 | + * `A` [Pokok Fenwick](src/struktur-data/pokok/pokok-fenwick) (Pokok Berindeks Perduaan) |
| 62 | +* `A` [Graf](src/struktur-data/graf) (kedua-dua terarah dan tidak terarah) |
| 63 | +* `A` [Set Terpisah](src/struktur-data/set-terpisah) |
| 64 | +* `A` [Bloom Filter](src/data-structures/bloom-filter) |
| 65 | + |
| 66 | +## Algoritma |
| 67 | + |
| 68 | +Algoritma ialah spesifikasi yang tidak jelas tentang cara menyelesaikan kelas masalah. Ia adalah |
| 69 | +satu set peraturan yang mentakrifkan dengan tepat urutan operasi. |
| 70 | + |
| 71 | +`B` - Pemula, `A` - Lanjutan |
| 72 | + |
| 73 | +### Algoritma mengikut Topik |
| 74 | + |
| 75 | +* **Matematik** |
| 76 | + * `B` [Manipulasi Bit](src/algoritma/matematik/bit) - set/dapatkan/kemas kini/kosongkan bit, darab/bahagi dengan dua, jadikan negatif dsb. |
| 77 | + * `B` [Titik Terapung Perduaan](src/algoritma/matematik/titik terapung binari) - perwakilan binari nombor titik terapung. |
| 78 | + * `B` [Factorial](src/algoritma/matematik/faktorial) |
| 79 | + * `B` [Nombor Fibonacci](src/algoritma/matematik/fibonacci) - versi klasik dan bentuk tertutup |
| 80 | + * `B` [Faktor Perdana](src/algoritma/matematik/faktor-prima) - mencari faktor perdana dan mengiranya menggunakan teorem Hardy-Ramanujan |
| 81 | + * `B` [Ujian Primaliti](src/algoritma/matematik/ujian-primaliti) (kaedah pembahagian percubaan) |
| 82 | + * `B` [Algoritma Euclidean](src/algorithm/math/euclidean-algorithm) - kira Pembahagi Sepunya Terhebat (GCD) |
| 83 | + * `B` [Garab Sepunya Terkecil](src/algoritma/matematik/bilangan-paling-biasa) (LCM) |
| 84 | + * `B` [Ayak Eratosthenes](src/algoritma/matematik/ayak-eratosthenes) - mencari semua nombor perdana sehingga mana-mana had tertentu |
| 85 | + * `B` [Adalah Kuasa Dua](src/algoritma/math/is-power-of-two) - semak sama ada nombor itu kuasa dua (algoritma naif dan bitwise) |
| 86 | + * `B` [Segitiga Pascal](src/algoritma/matematik/segitiga-pascal) |
| 87 | + * `B` [Nombor Kompleks](src/algoritma/matematik/nombor-kompleks) - nombor kompleks dan operasi asas dengannya |
| 88 | + * `B` [Radian & Darjah](src/algoritma/matematik/radian) - penukaran radian kepada darjah dan ke belakang |
| 89 | + * `B` [Fast Powering](src/algorithm/math/fast-powering) |
| 90 | + * `B` [Kaedah Horner](src/algoritma/matematik/kaedah-horner) - penilaian polinomial |
| 91 | + * `B` [Matriks](src/algoritma/matematik/matriks) - matriks dan operasi matriks asas (pendaraban, transposisi, dsb.) |
| 92 | + * `B` [Jarak Euclidean](src/algoritma/matematik/jarak-euclidean) - jarak antara dua titik/vektor/matriks |
| 93 | + * `A` [Pembahagian Integer](src/algoritma/matematik/integer-partition) |
| 94 | + * `A` [Akar Kuasa Dua](src/algoritma/matematik/akar-kuadrat) - Kaedah Newton |
| 95 | + * `A` [Algoritma Liu Hui π](src/algoritma/math/liu-hui) - anggaran π pengiraan berdasarkan N-gons |
| 96 | + * `A` [Transformasi Fourier Diskret](src/algoritma/matematik/fourier-transform) - menguraikan fungsi masa (suatu isyarat) kepada frekuensi yang membentuknya |
| 97 | +* **Set** |
| 98 | + * `B` [Produk Cartesian](src/algoritma/set/produk cartesian) - hasil daripada berbilang set |
| 99 | + * `B` [Fisher–Yates Shuffle](src/algoritma/sets/fisher-yates) - pilih atur rawak bagi urutan terhingga |
| 100 | + * `A` [Set Kuasa](src/algoritma/set/set-kuasa) - semua subset set (penyelesaian bitwise dan backtracking) |
| 101 | + * `A` [Permutasi](src/algoritma/set/permutasi) (dengan dan tanpa ulangan) |
| 102 | + * `A` [Gabungan](src/algoritma/set/gabungan) (dengan dan tanpa ulangan) |
| 103 | + * `A` [Turutan Sepunya Terpanjang](src/algoritma/set/susulan-biasa-terpanjang) (LCS) |
| 104 | + * `A` [Surutan Bertambah Terpanjang](src/algoritma/set/susulan-bertambah-panjang) |
| 105 | + * `A` [Jurutan Sepunya Terpendek](src/algoritma/set/jujukan-sepunya-terpendek) (SCS) |
| 106 | + * `A` [Masalah Knapsack](src/algorithms/sets/knapsack-problem) - "0/1" dan "Unbound" |
| 107 | + * `A` [Maximum Subarray](src/algorithm/sets/maximum-subarray) - versi "Brute Force" dan "Dynamic Programming" (Kadane's) |
| 108 | + * `A` [Jumlah Gabungan](src/algoritma/set/jumlah-gabungan) - cari semua gabungan yang membentuk jumlah tertentu |
| 109 | +* **Rentetan** |
| 110 | + * `B` [Jarak Hamming](src/algoritma/rentetan/jarak hamming) - bilangan kedudukan di mana simbol berbeza |
| 111 | + * `B` [Palindrome](src/algorithm/string/palindrome) - semak sama ada rentetan adalah sama secara terbalik |
| 112 | + * `A` [Jarak Levenshtein](src/algoritma/rentetan/levenshtein-jarak) - jarak edit minimum antara dua jujukan |
| 113 | + * `A` [Algoritma Knuth–Morris–Pratt](src/algorithm/string/knuth-morris-pratt) (Algoritma KMP) - carian subrentetan (padanan corak) |
| 114 | + * `A` [Z Algoritma](src/algorithm/string/z-algorithm) - carian subrentetan (padanan corak) |
| 115 | + * `A` [Algoritma Rabin Karp](src/algorithm/string/rabin-karp) - carian subrentetan |
| 116 | + * `A` [Subrentetan Biasa Terpanjang](src/algoritma/rentetan/subrentetan-biasa-terpanjang) |
| 117 | + * `A` [Padanan Ungkapan Biasa](src/algoritma/rentetan/padanan-ungkapan-biasa) |
| 118 | + * **Carian** |
| 119 | + * `B` [Carian Linear](src/algorithm/search/linear-search) |
| 120 | + * `B` [Cari Lompat](src/algorithm/search/jump-search) (atau Carian Sekat) - cari dalam tatasusunan yang diisih |
| 121 | + * `B` [Carian Binari](src/algorithm/search/binary-search) - cari dalam tatasusunan yang diisih |
| 122 | + * `B` [Carian Interpolasi](src/algoritma/search/interpolation-search) - cari dalam tatasusunan tersusun yang diedarkan secara seragam |
| 123 | +* **Menyusun** |
| 124 | + * `B` [Isih Buih](src/algoritma/isih/isih-buih) |
| 125 | + * `B` [Isih Pilihan](src/algoritma/isih/isih-pilihan) |
| 126 | + * `B` [Isih Sisipan](src/algoritma/isih/isihan-sisipan) |
| 127 | + * `B` [Isih Timbunan](src/algoritma/isih/isih-timbun) |
| 128 | + * `B` [Isih Gabung](src/algoritma/isih/isih-gabung) |
| 129 | + * `B` [Quicksort](src/algorithm/sorting/quick-sort) - pelaksanaan di tempat dan bukan di tempat |
| 130 | + * `B` [Shellsort](src/algoritm/sorting/shell-sort) |
| 131 | + * `B` [Isih Mengira](src/algoritma/isihan/isihan-kira) |
| 132 | + * `B` [Isih Radix](src/algoritma/isih/isih-radix) |
| 133 | +* **Senarai Terpaut** |
| 134 | + * `B` [Straight Traversal](src/algorithm/linked-list/traversal) |
| 135 | + * `B` [Reverse Traversal](src/algorithm/linked-list/reverse-traversal) |
| 136 | +* **Pokok** |
| 137 | + * `B` [Depth-First Search](src/algorithm/tree/depth-first-search) (DFS) |
| 138 | + * `B` [Breadth-First-search](src/algorithm/tree/breadth-first-search) (BFS) |
| 139 | +* **Graf** |
| 140 | + * `B` [Depth-First Search](src/algorithm/graph/depth-first-search) (DFS) |
| 141 | + * `B` [Breadth-First Search](src/algorithm/graph/breadth-first-search) (BFS) |
| 142 | + * `B` [Algoritma Kruskal](src/algoritma/graf/kruskal) - mencari Pokok Spanning Minimum (MST) untuk graf tidak berwajaran |
| 143 | + * `A` [Algoritma Dijkstra](src/algorithm/graph/dijkstra) - mencari laluan terpendek ke semua bucu graf dari bucu tunggal |
| 144 | + * `A` [Algoritma Bellman-Ford](src/algoritma/graf/bellman-ford) - mencari laluan terpendek ke semua bucu graf daripada bucu tunggal |
| 145 | + * `A` [Algoritma Floyd-Warshall](src/algorithm/graph/floyd-warshall) - cari laluan terpendek antara semua pasangan bucu |
| 146 | + * `A` [Detect Cycle](src/algorithm/graph/detect-cycle) - untuk kedua-dua graf terarah dan tidak terarah (versi berasaskan DFS dan Disjoint Set) |
| 147 | + * `A` [Algoritma Prim](src/algoritma/graf/prim) - mencari Pokok Spanning Minimum (MST) untuk graf tidak berwajaran |
| 148 | + * `A` [Isih Topologi](src/algoritma/graf/isihan-topologi) - Kaedah DFS |
| 149 | + * `A` [Mata Artikulasi](src/algoritma/graf/titik-artikulasi) - Algoritma Tarjan (berasaskan DFS) |
| 150 | + * `A` [Bridges](src/algorithm/graph/bridges) - algoritma berasaskan DFS |
| 151 | + * `A` [Eulerian Path and Eulerian Circuit](src/algorithm/graph/eulerian-path) - Algoritma Fleury - Lawati setiap tepi tepat sekali |
| 152 | + * `A` [Kitaran Hamiltonian](src/algoritma/graf/kitaran-hamilton) - Lawati setiap bucu tepat sekali |
| 153 | + * `A` [Komponen Bersambung Kuat](src/algoritma/graf/komponen-kuat-bersambung) - Algoritma Kosaraju |
| 154 | + * `A` [Masalah Jurujual Perjalanan](src/algoritma/graf/jurujual-perjalanan) - laluan terpendek mungkin yang melawati setiap bandar dan kembali ke bandar asal |
| 155 | +* **Kriptografi** |
| 156 | + * `B` [Cincangan Polinomial](src/algoritma/kriptografi/cincang polinomial) - fungsi cincang bergolek berdasarkan polinomial |
| 157 | + * `B` [Sifir Pagar Rel](src/algoritma/kriptografi/sifir-pagar-rel) - algoritma sifir transposisi untuk pengekodan mesej |
| 158 | + * `B` [Caesar Cipher](src/algoritma/kriptografi/caesar-cipher) - sifir penggantian mudah |
| 159 | + * `B` [Sifir Bukit](src/algoritma/kriptografi/sifir bukit) - sifir penggantian berdasarkan algebra linear |
| 160 | +* **Pembelajaran Mesin** |
| 161 | + * `B` [NanoNeuron](https://github.com/trekhleb/nano-neuron) - 7 fungsi JS mudah yang menggambarkan bagaimana mesin sebenarnya boleh belajar (perambatan ke hadapan/belakang) |
| 162 | + * `B` [k-NN](src/algoritma/ml/knn) - algoritma klasifikasi jiran terdekat k |
| 163 | + * `B` [k-Means](src/algorithm/ml/k-means) - algoritma pengelompokan k-Means |
| 164 | +* **Pemprosesan imej** |
| 165 | + * `B` [Ukiran Jahitan](src/algoritma/pemprosesan-imej/ukiran-jahitan) - algoritma saiz semula imej sedar kandungan |
| 166 | +* **Statistik** |
| 167 | + * `B` [Rawak Berwajaran](src/algoritma/statistik/rawak-wajaran) - pilih item rawak daripada senarai berdasarkan berat item |
| 168 | +* **Algoritma evolusi** |
| 169 | + * `A` [Algoritma genetik](https://github.com/trekhleb/self-parking-car-evolution) - contoh cara algoritma genetik boleh digunakan untuk melatih kereta letak sendiri |
| 170 | + * **Tidak dikategorikan** |
| 171 | + * `B` [Menara Hanoi](src/algoritma/tidak dikategorikan/menara-hanoi) |
| 172 | + * `B` [Putaran Matriks Persegi](src/algoritma/tidak dikategorikan/putaran-matriks-persegi) - algoritma di tempat |
| 173 | + * `B` [Permainan Lompat](src/algoritma/tidak dikategorikan/permainan lompat) - menjejak ke belakang, pengaturcaraan dinamik (atas ke bawah + bawah ke atas) dan contoh tamak |
| 174 | + * `B` [Laluan Unik](src/algorithms/uncategorized/unique-paths) - penjejakan ke belakang, pengaturcaraan dinamik dan contoh berasaskan Segitiga Pascal |
| 175 | + * `B` [Teres Hujan](src/algoritma/tidak dikategorikan/teres hujan) - memerangkap masalah air hujan (versi pengaturcaraan dinamik dan kekerasan) |
| 176 | + * `B` [Tangga Rekursif](src/algoritma/tidak dikategorikan/tangga rekursif) - kira bilangan cara untuk sampai ke atas (4 penyelesaian) |
| 177 | + * `B` [Masa Terbaik Untuk Membeli Saham Jual](src/algoritma/tidak dikategorikan/masa-terbaik-untuk-membeli-menjual-saham) - bahagikan dan takluk serta contoh satu laluan |
| 178 | + * `A` [Masalah N-Queens](src/algoritma/uncategorized/n-queens) |
| 179 | + * `A` [Lawatan Kesatria](src/algoritma/tidak dikategorikan/jelajah kesatria) |
| 180 | + |
| 181 | +### Algoritma mengikut Paradigma |
| 182 | + |
| 183 | +Paradigma algoritma ialah kaedah atau pendekatan generik yang mendasari reka bentuk kelas |
| 184 | +daripada algoritma. Ia adalah abstraksi yang lebih tinggi daripada tanggapan algoritma, sama seperti an |
| 185 | +algoritma adalah abstraksi yang lebih tinggi daripada program komputer. |
| 186 | + |
| 187 | +* **Brute Force** - lihat semua kemungkinan dan pilih penyelesaian terbaik |
| 188 | + * `B` [Carian Linear](src/algorithm/search/linear-search) |
| 189 | + * `B` [Rain Terraces](src/algoritma/uncategorized/rain-teres) - memerangkap masalah air hujan |
| 190 | + * `B` [Tangga Rekursif](src/algoritma/tak berkategori/tangga rekursif) - kira bilangan cara untuk sampai ke atas |
| 191 | + * `A` [Subarray Maksimum](src/algoritma/set/subarray maksimum) |
| 192 | + * `A` [Masalah Jurujual Perjalanan](src/algoritma/graf/jurujual-perjalanan) - laluan terpendek mungkin yang melawati setiap bandar dan kembali ke bandar asal |
| 193 | + * `A` [Transformasi Fourier Diskret](src/algoritma/matematik/fourier-transform) - menguraikan fungsi masa (suatu isyarat) kepada frekuensi yang membentuknya |
| 194 | +* **Rakus** - pilih pilihan terbaik pada masa semasa, tanpa sebarang pertimbangan untuk masa hadapan |
| 195 | +* `B` [Permainan Lompat](src/algoritma/tidak dikategorikan/permainan lompat) |
| 196 | + * `A` [Masalah Knapsack Tidak Terikat](src/algoritma/set/masalah-knapsack) |
| 197 | + * `A` [Algoritma Dijkstra](src/algoritma/graf/dijkstra) - mencari laluan terpendek ke semua bucu graf |
| 198 | + * `A` [Algoritma Prim](src/algoritma/graf/prim) - mencari Pokok Spanning Minimum (MST) untuk graf tidak berwajaran |
| 199 | + * `A` [Algoritma Kruskal](src/algoritma/graf/kruskal) - mencari Pokok Spanning Minimum (MST) untuk graf tidak berwajaran |
| 200 | +* **Divide and Conquer** - bahagikan masalah kepada bahagian yang lebih kecil dan kemudian selesaikan bahagian tersebut |
| 201 | + * `B` [Carian Perduaan](src/algoritma/carian/pencarian-perduaan) |
| 202 | + * `B` [Menara Hanoi](src/algoritma/tidak dikategorikan/menara-hanoi) |
| 203 | + * `B` [Segitiga Pascal](src/algoritma/matematik/segitiga-pascal) |
| 204 | + * `B` [Algoritma Euclidean](src/algorithm/math/euclidean-algorithm) - kira Pembahagi Sepunya Terhebat (GCD) |
| 205 | + * `B` [Isih Gabung](src/algoritma/isih/isih-gabung) |
| 206 | + * `B` [Isih Pantas](src/algoritma/isih/isih-pantas) |
| 207 | + * `B` [Carian Kedalaman-Pertama Pokok](src/algoritma/pokok/carian-pertama-dalam) (DFS) |
| 208 | + * `B` [Graph Depth-First Search](src/algorithm/graph/depth-first-search) (DFS) |
| 209 | + * `B` [Matriks](src/algoritma/matematik/matriks) - menjana dan melintasi matriks pelbagai bentuk |
| 210 | + * `B` [Permainan Lompat](src/algoritma/tidak dikategorikan/permainan lompat) |
| 211 | + * `B` [Fast Powering](src/algorithm/math/fast-powering) |
| 212 | + * `B` [Masa Terbaik Untuk Membeli Saham Jual](src/algoritma/tidak dikategorikan/masa-terbaik-untuk-membeli-menjual-saham) - bahagikan dan takluk serta contoh satu laluan |
| 213 | + * `A` [Permutasi](src/algoritma/set/permutasi) (dengan dan tanpa ulangan) |
| 214 | + * `A` [Gabungan](src/algoritma/set/gabungan) (dengan dan tanpa ulangan) |
| 215 | + * `A` [Subarray Maksimum](src/algoritma/set/subarray maksimum) |
| 216 | +* **Pengaturcaraan Dinamik** - bina penyelesaian menggunakan sub-penyelesaian yang ditemui sebelum ini |
| 217 | + * `B` [Nombor Fibonacci](src/algoritma/matematik/fibonacci) |
| 218 | + * `B` [Permainan Lompat](src/algoritma/tidak dikategorikan/permainan lompat) |
| 219 | + * `B` [Laluan Unik](src/algoritma/tidak dikategorikan/laluan-unik) |
| 220 | + * `B` [Rain Terraces](src/algoritma/uncategorized/rain-teres) - memerangkap masalah air hujan |
| 221 | + |
| 222 | + * `B` [Tangga Rekursif](src/algoritma/tak berkategori/tangga rekursif) - kira bilangan cara untuk sampai ke atas |
| 223 | + * `B` [Ukiran Jahitan](src/algoritma/pemprosesan-imej/ukiran-jahitan) - algoritma saiz semula imej sedar kandungan |
| 224 | + * `A` [Jarak Levenshtein](src/algoritma/rentetan/levenshtein-jarak) - jarak edit minimum antara dua jujukan |
| 225 | + * `A` [Turutan Sepunya Terpanjang](src/algoritma/set/susulan-biasa-terpanjang) (LCS) |
| 226 | + * `A` [Subrentetan Biasa Terpanjang](src/algoritma/rentetan/subrentetan-biasa-terpanjang) |
| 227 | + * `A` [Surutan Bertambah Terpanjang](src/algoritma/set/susulan-bertambah-panjang) |
| 228 | + * `A` [Jujukan Sepunya Terpendek](src/algoritma/set/jujukan-sepunya-terpendek) |
| 229 | + * `A` [0/1 Masalah Knapsack](src/algoritma/set/knapsack-problem) |
| 230 | + * `A` [Pembahagian Integer](src/algoritma/matematik/integer-partition) |
| 231 | + * `A` [Subarray Maksimum](src/algoritma/set/subarray maksimum) |
| 232 | + * `A` [Algoritma Bellman-Ford](src/algorithm/graph/bellman-ford) - mencari laluan terpendek ke semua bucu graf |
| 233 | + * `A` [Algoritma Floyd-Warshall](src/algorithm/graph/floyd-warshall) - cari laluan terpendek antara semua pasangan bucu |
| 234 | + * `A` [Padanan Ungkapan Biasa](src/algoritma/rentetan/padanan-ungkapan-biasa) |
| 235 | +* **Penjejakan Belakang** - sama seperti kekerasan, cuba jana semua penyelesaian yang mungkin, tetapi setiap kali anda menjana penyelesaian seterusnya anda menguji |
| 236 | +jika ia memenuhi semua syarat, dan hanya kemudian terus menjana penyelesaian seterusnya. Jika tidak, mundur, dan teruskan a |
| 237 | +jalan yang berbeza untuk mencari penyelesaian. Biasanya traversal DFS bagi ruang keadaan sedang digunakan. |
| 238 | + * `B` [Permainan Lompat](src/algoritma/tidak dikategorikan/permainan lompat) |
| 239 | + * `B` [Laluan Unik](src/algoritma/tidak dikategorikan/laluan-unik) |
| 240 | + * `B` [Set Kuasa](src/algoritma/set/set-kuasa) - semua subset set |
| 241 | + * `A` [Kitaran Hamiltonian](src/algoritma/graf/kitaran-hamilton) - Lawati setiap bucu tepat sekali |
| 242 | + * `A` [Masalah N-Queens](src/algoritma/uncategorized/n-queens) |
| 243 | + * `A` [Lawatan Kesatria](src/algoritma/tidak dikategorikan/jelajah kesatria) |
| 244 | + * `A` [Jumlah Gabungan](src/algoritma/set/jumlah-gabungan) - cari semua gabungan yang membentuk jumlah tertentu |
| 245 | + |
| 246 | + * **Branch & Bound** - ingat penyelesaian kos terendah yang terdapat pada setiap peringkat penjejakan ke belakang |
| 247 | +cari, dan gunakan kos penyelesaian kos terendah yang ditemui setakat ini sebagai had yang lebih rendah pada kos |
| 248 | +penyelesaian kos termurah untuk masalah, untuk membuang penyelesaian separa dengan kos lebih besar daripada |
| 249 | +penyelesaian kos terendah ditemui setakat ini. Biasanya traversal BFS digabungkan dengan traversal DFS of state-space |
| 250 | +pokok sedang digunakan. |
| 251 | + |
| 252 | +## Cara menggunakan repositori ini |
| 253 | + |
| 254 | +**Pasang semua kebergantungan** |
| 255 | + |
| 256 | +``` |
| 257 | +pemasangan npm |
| 258 | +``` |
| 259 | + |
| 260 | +**Jalankan ESLint** |
| 261 | + |
| 262 | +Anda mungkin mahu menjalankannya untuk menyemak kualiti kod. |
| 263 | + |
| 264 | +``` |
| 265 | +npm run lint |
| 266 | +``` |
| 267 | + |
| 268 | +**Jalankan semua ujian** |
| 269 | + |
| 270 | +``` |
| 271 | +ujian npm |
| 272 | +``` |
| 273 | + |
| 274 | +**Jalankan ujian mengikut nama** |
| 275 | + |
| 276 | +``` |
| 277 | +ujian npm -- 'LinkedList' |
| 278 | +``` |
| 279 | + |
| 280 | +**Penyelesaian masalah** |
| 281 | + |
| 282 | +Jika linting atau ujian gagal, cuba padamkan folder `node_modules` dan pasang semula pakej npm: |
| 283 | + |
| 284 | +``` |
| 285 | +rm -rf ./node_modules |
| 286 | +npm i |
| 287 | +``` |
| 288 | + |
| 289 | +Juga pastikan anda menggunakan versi Nod yang betul (`>=14.16.0`). Jika anda menggunakan [nvm](https://github.com/nvm-sh/nvm) untuk pengurusan versi Nod, anda boleh menjalankan `nvm use` daripada folder akar projek dan versi yang betul akan diambil. |
| 290 | + |
| 291 | +**Taman permainan** |
| 292 | + |
| 293 | +Anda boleh bermain dengan struktur data dan algoritma dalam fail `./src/playground/playground.js` dan tulis |
| 294 | +mengujinya dalam `./src/playground/__test__/playground.test.js`. |
| 295 | + |
| 296 | +Kemudian hanya jalankan arahan berikut untuk menguji sama ada kod taman permainan anda berfungsi seperti yang diharapkan: |
| 297 | + |
| 298 | +``` |
| 299 | +ujian npm -- 'taman permainan' |
| 300 | +``` |
| 301 | + |
| 302 | +## Informasi berguna |
| 303 | + |
| 304 | +### Rujukan |
| 305 | + |
| 306 | +[▶ Struktur Data dan Algoritma di YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8) |
| 307 | + |
| 308 | +### Notasi O Besar |
| 309 | + |
| 310 | +*Notasi O Besar* digunakan untuk mengklasifikasikan algoritma mengikut cara masa berjalan atau keperluan ruang mereka berkembang apabila saiz input bertambah. |
| 311 | +Pada carta di bawah anda mungkin menemui susunan pertumbuhan algoritma yang paling biasa yang dinyatakan dalam tatatanda Big O. |
| 312 | + |
| 313 | + |
| 314 | + |
| 315 | +Sumber: [Big O Cheat Sheet](http://bigocheatsheet.com/). |
| 316 | + |
| 317 | +Di bawah ialah senarai beberapa tatatanda Big O yang paling banyak digunakan dan perbandingan prestasinya terhadap saiz data input yang berbeza. |
| 318 | + |
| 319 | +| Notasi O Besar | Taip | Pengiraan untuk 10 elemen | Pengiraan untuk 100 elemen | Pengiraan untuk 1000 elemen | |
| 320 | +| -------------- | ----------- | ---------------------------- | ---------------------------- | ------------------------------- | |
| 321 | +| **O(1)** | Malar | 1 | 1 | 1 | |
| 322 | +| **O(log N)** | Logaritma | 3 | 6 | 9 | |
| 323 | +| **O(N)** | Linear | 10 | 100 | 1000 | |
| 324 | +| **O(N log N)** | n log(n) | 30 | 600 | 9000 | |
| 325 | +| **O(N^2)** | Kuadratik | 100 | 10000 | 1000000 | |
| 326 | +| **O(2^N)** | Eksponen | 1024 | 1.26e+29 | 1.07e+301 | |
| 327 | +| **O(N!)** | Faktorial | 3628800 | 9.3e+157 | 4.02e+2567 |
| 328 | + |
| 329 | +### Kerumitan Operasi Struktur Data |
| 330 | + |
| 331 | +| Struktur Data | Akses | Cari | Sisipan | Pemadaman | Komen | |
| 332 | +| ------------------------ | :-------: | :-------: | :-------: | :-------: | :-------- | |
| 333 | +| **Array** | 1 | n | n | n | | |
| 334 | +| **Timbunan** | n | n | 1 | 1 | | |
| 335 | +| **Beratur** | n | n | 1 | 1 | | |
| 336 | +| **Senarai Terpaut** | n | n | 1 | n | | |
| 337 | +| **Jadual Hash** | - | n | n | n | Dalam kes kos fungsi cincang yang sempurna ialah O(1) | |
| 338 | +| **Pokok Carian Binari** | n | n | n | n | Dalam kes kos pokok seimbang ialah O(log(n)) | |
| 339 | +| **B-Tree** | log(n) | log(n) | log(n) | log(n) | | |
| 340 | +| **Pokok Merah-Hitam** | log(n) | log(n) | log(n) | log(n) | | |
| 341 | +| **Pokok AVL** | log(n) | log(n) | log(n) | log(n) | | |
| 342 | +| **Penapis Bloom** | - | 1 | 1 | - | Positif palsu mungkin semasa mencari | |
| 343 | + |
| 344 | +### Kerumitan Algoritma Pengisihan Tatasusunan |
| 345 | + |
| 346 | +| Nama | Terbaik | Purata | Paling teruk | Memori | Stabil | Komen | |
| 347 | +| ---------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | |
| 348 | +| **Isih gelembung** | n | n<sup>2</sup> | n<sup>2</sup> | 1 | Ya | | |
| 349 | +| **Isihan sisipan** | n | n<sup>2</sup> | n<sup>2</sup> | 1 | Ya | | |
| 350 | +| **Isih pilihan** | n<sup>2</sup> | n<sup>2</sup> | n<sup>2</sup> | 1 | Tidak | | |
| 351 | +| **Isihan timbunan** | n log(n) | n log(n) | n log(n) | 1 | Tidak | | |
| 352 | +| **Isih gabung** | n log(n) | n log(n) | n log(n) | n | Ya | | |
| 353 | +| **Isih cepat** | n log(n) | n log(n) | n<sup>2</sup> | log(n) | Tidak | Quicksort biasanya dilakukan di tempat dengan ruang tindanan O(log(n)) | |
| 354 | +| **Isih cangkerang** | n log(n) | bergantung pada jujukan jurang | n (log(n))<sup>2</sup> | 1 | Tidak | | |
| 355 | +| **Isih mengira** | n + r | n + r | n + r | n + r | Ya | r - nombor terbesar dalam tatasusunan | |
| 356 | +| **Isih Radix** | n * k | n * k | n * k | n + k | Ya | k - panjang kunci terpanjang | |
| 357 | + |
| 358 | +## Penyokong Projek |
| 359 | + |
| 360 | +> Anda boleh menyokong projek ini melalui ❤️️ [GitHub](https://github.com/sponsors/trekhleb) atau ❤️️ [Patreon](https://www.patreon.com/trekhleb). |
| 361 | +
|
| 362 | +[Orang yang menyokong projek ini](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 0` |
| 363 | + |
| 364 | +> ℹ️ Beberapa lagi [projek](https://trekhleb.dev/projects/) dan [artikel](https://trekhleb.dev/blog/) tentang JavaScript dan algoritma pada [trekhleb.dev](https:/ /trekhleb.dev) |
0 commit comments