Compare commits

...

11 Commits

Author SHA1 Message Date
j0pgrm
c539d21589
Merge ef3b05afa3 into ca3d16dcce 2024-07-17 10:42:14 +09:00
Vlad Sosnov
ca3d16dcce
Update README.uk-UA.md (#991)
Co-authored-by: Oleksii Trekhleb <3000285+trekhleb@users.noreply.github.com>
2024-07-13 21:28:34 +02:00
Vicente Gutiérrez
e7f30a7bf7
Fix typos README.es-ES for linked list (#850) 2024-07-13 21:28:02 +02:00
Enzo
471e6d0791
Add es-ES translation to search/binary-search (#893) 2024-07-13 21:27:09 +02:00
Alaz Tetik
351a63a59f
Update README.md by correcting Turkish lang name (#904)
Co-authored-by: Oleksii Trekhleb <3000285+trekhleb@users.noreply.github.com>
2024-07-13 21:25:58 +02:00
Nikita Gurskiy
0e2b2574f8
update the ES README a lenguage correction (#952) 2024-07-13 21:23:02 +02:00
Youssef Rabei
0c054f782a
Update README.ar-AR.md (#959)
Co-authored-by: Oleksii Trekhleb <3000285+trekhleb@users.noreply.github.com>
2024-07-13 21:22:10 +02:00
name
ef3b05afa3 deploy 2022-08-26 16:26:37 -07:00
name
7e8d5689ab deploy 2022-08-25 16:41:58 -07:00
name
13521b2fc4 deploy 2022-08-09 16:17:36 -07:00
name
f55e3c2202 update-readme 2022-08-08 08:38:11 -07:00
9 changed files with 782 additions and 18 deletions

View File

@ -3,7 +3,7 @@
[![Build Status](https://travis-ci.org/trekhleb/javascript-algorithms.svg?branch=master)](https://travis-ci.org/trekhleb/javascript-algorithms) [![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) [![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms)
تحتوي هذا مقالة على أمثلة عديدة تستند إلى الخوارزميات الشائعة وهياكل البيانات في الجافا سكريبت. تحتوي هذه المقالة على أمثلة عديدة تستند إلى الخوارزميات الشائعة وهياكل البيانات في الجافا سكريبت.
كل خوارزمية وهياكل البيانات لها برنامج README منفصل خاص بها كل خوارزمية وهياكل البيانات لها برنامج README منفصل خاص بها
مع التفسيرات والروابط ذات الصلة لمزيد من القراءة (بما في ذلك تلك مع التفسيرات والروابط ذات الصلة لمزيد من القراءة (بما في ذلك تلك

View File

@ -70,7 +70,7 @@ definen con precisión una secuencia de operaciones.
* **Matemáticas** * **Matemáticas**
* `P` [Manipulación de bits](src/algorithms/math/bits) - asignar/obtener/actualizar/limpiar bits, multiplicación/división por dos, hacer negativo, etc. * `P` [Manipulación de bits](src/algorithms/math/bits) - asignar/obtener/actualizar/limpiar bits, multiplicación/división por dos, hacer negativo, etc.
* `P` [Factorial](src/algorithms/math/factorial) * `P` [Factorial](src/algorithms/math/factorial)
* `P` [Número de Fibonacci](src/algorithms/math/fibonacci) * `P` [Sucesión de Fibonacci](src/algorithms/math/fibonacci)
* `P` [Prueba de primalidad](src/algorithms/math/primality-test) (método de división de prueba) * `P` [Prueba de primalidad](src/algorithms/math/primality-test) (método de división de prueba)
* `P` [Algoritmo de Euclides](src/algorithms/math/euclidean-algorithm) - calcular el Máximo común divisor (MCD) * `P` [Algoritmo de Euclides](src/algorithms/math/euclidean-algorithm) - calcular el Máximo común divisor (MCD)
* `P` [Mínimo común múltiplo](src/algorithms/math/least-common-multiple) (MCM) * `P` [Mínimo común múltiplo](src/algorithms/math/least-common-multiple) (MCM)

364
README.ma-MA.md Normal file
View File

@ -0,0 +1,364 @@
# Algoritma JavaScript dan Struktur Data
> 🇺🇦 UKRAINE [SEDANG DISERANG](https://twitter.com/MFA_Ukraine) OLEH TENTERA RUSIA. ORANG AWAM SEMAKIN DIBUNUH. KAWASAN KEDIAMAN SEMAKIN DIBOM.
> - Bantu Ukraine melalui [Bank Negara Ukraine](https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi)
> - Bantu Ukraine melalui dana [SaveLife](https://savelife.in.ua/en/donate-en/)
> - Maklumat lanjut tentang [war.ukraine.ua](https://war.ukraine.ua/)
[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow% 3ACI+cawangan%3Amaster)
[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms)
Repositori ini mengandungi banyak contoh berasaskan JavaScript
algoritma dan struktur data yang popular.
Setiap algoritma dan struktur data mempunyai README tersendiri
dengan penjelasan dan pautan berkaitan untuk bacaan lanjut (termasuk yang
kepada video YouTube).
_Baca ini dalam bahasa lain:_
[_简体中文_](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),
[_Português_](README.pt-BR.md),
[_Русский_](README.ru-RU.md),
[_Türk_](README.tr-TR.md),
[_Italiana_](README.it-IT.md),
[_Bahasa Indonesia_](README.id-ID.md),
[_Українська_](README.uk-UA.md),
[_Arab_](README.ar-AR.md),
[_Tiếng Việt_](README.vi-VN.md),
[_Deutsch_](README.de-DE.md)
*☝ Ambil perhatian bahawa projek ini bertujuan untuk digunakan untuk tujuan pembelajaran dan penyelidikan
sahaja, dan ia **tidak** bertujuan untuk digunakan untuk pengeluaran.*
## Struktur Data
Struktur data ialah cara tertentu untuk mengatur dan menyimpan data dalam komputer supaya ia boleh
boleh diakses dan diubah suai dengan cekap. Lebih tepat lagi, struktur data ialah himpunan data
nilai, hubungan di antara mereka, dan fungsi atau operasi yang boleh digunakan
data itu.
`B` - Pemula, `A` - Lanjutan
* `B` [Senarai Terpaut](src/struktur-data/senarai-terpaut)
* `B` [Senarai Terpaut Berganda](src/struktur-data/senarai-berpaut-dua)
* `B` [Barisan](src/struktur-data/baris gilir)
* `B` [Timbunan](src/struktur-data/tindanan)
* `B` [Jadual Hash](src/struktur-data/jadual cincang)
* `B` [Timbunan](src/struktur-data/timbunan) - versi timbunan maks dan min
* `B` [Baris Keutamaan](src/struktur-data/baris gilir keutamaan)
* `A` [Trie](src/data-structures/trie)
* `A` [Pokok](src/struktur-data/pokok)
* `A` [Pokok Carian Perduaan](src/struktur-data/pokok/pokok-cari-perduaan)
* `A` [AVL Tree](src/data-structures/tree/avl-tree)
* `A` [Pokok Merah-Hitam](src/struktur-data/pokok/pokok-merah-hitam)
* `A` [Pokok Segmen](src/data-structures/tree/segment-tree) - dengan contoh pertanyaan julat min/maks/jumlah
* `A` [Pokok Fenwick](src/struktur-data/pokok/pokok-fenwick) (Pokok Berindeks Perduaan)
* `A` [Graf](src/struktur-data/graf) (kedua-dua terarah dan tidak terarah)
* `A` [Set Terpisah](src/struktur-data/set-terpisah)
* `A` [Bloom Filter](src/data-structures/bloom-filter)
## Algoritma
Algoritma ialah spesifikasi yang tidak jelas tentang cara menyelesaikan kelas masalah. Ia adalah
satu set peraturan yang mentakrifkan dengan tepat urutan operasi.
`B` - Pemula, `A` - Lanjutan
### Algoritma mengikut Topik
* **Matematik**
* `B` [Manipulasi Bit](src/algoritma/matematik/bit) - set/dapatkan/kemas kini/kosongkan bit, darab/bahagi dengan dua, jadikan negatif dsb.
* `B` [Titik Terapung Perduaan](src/algoritma/matematik/titik terapung binari) - perwakilan binari nombor titik terapung.
* `B` [Factorial](src/algoritma/matematik/faktorial)
* `B` [Nombor Fibonacci](src/algoritma/matematik/fibonacci) - versi klasik dan bentuk tertutup
* `B` [Faktor Perdana](src/algoritma/matematik/faktor-prima) - mencari faktor perdana dan mengiranya menggunakan teorem Hardy-Ramanujan
* `B` [Ujian Primaliti](src/algoritma/matematik/ujian-primaliti) (kaedah pembahagian percubaan)
* `B` [Algoritma Euclidean](src/algorithm/math/euclidean-algorithm) - kira Pembahagi Sepunya Terhebat (GCD)
* `B` [Garab Sepunya Terkecil](src/algoritma/matematik/bilangan-paling-biasa) (LCM)
* `B` [Ayak Eratosthenes](src/algoritma/matematik/ayak-eratosthenes) - mencari semua nombor perdana sehingga mana-mana had tertentu
* `B` [Adalah Kuasa Dua](src/algoritma/math/is-power-of-two) - semak sama ada nombor itu kuasa dua (algoritma naif dan bitwise)
* `B` [Segitiga Pascal](src/algoritma/matematik/segitiga-pascal)
* `B` [Nombor Kompleks](src/algoritma/matematik/nombor-kompleks) - nombor kompleks dan operasi asas dengannya
* `B` [Radian & Darjah](src/algoritma/matematik/radian) - penukaran radian kepada darjah dan ke belakang
* `B` [Fast Powering](src/algorithm/math/fast-powering)
* `B` [Kaedah Horner](src/algoritma/matematik/kaedah-horner) - penilaian polinomial
* `B` [Matriks](src/algoritma/matematik/matriks) - matriks dan operasi matriks asas (pendaraban, transposisi, dsb.)
* `B` [Jarak Euclidean](src/algoritma/matematik/jarak-euclidean) - jarak antara dua titik/vektor/matriks
* `A` [Pembahagian Integer](src/algoritma/matematik/integer-partition)
* `A` [Akar Kuasa Dua](src/algoritma/matematik/akar-kuadrat) - Kaedah Newton
* `A` [Algoritma Liu Hui π](src/algoritma/math/liu-hui) - anggaran π pengiraan berdasarkan N-gons
* `A` [Transformasi Fourier Diskret](src/algoritma/matematik/fourier-transform) - menguraikan fungsi masa (suatu isyarat) kepada frekuensi yang membentuknya
* **Set**
* `B` [Produk Cartesian](src/algoritma/set/produk cartesian) - hasil daripada berbilang set
* `B` [FisherYates Shuffle](src/algoritma/sets/fisher-yates) - pilih atur rawak bagi urutan terhingga
* `A` [Set Kuasa](src/algoritma/set/set-kuasa) - semua subset set (penyelesaian bitwise dan backtracking)
* `A` [Permutasi](src/algoritma/set/permutasi) (dengan dan tanpa ulangan)
* `A` [Gabungan](src/algoritma/set/gabungan) (dengan dan tanpa ulangan)
* `A` [Turutan Sepunya Terpanjang](src/algoritma/set/susulan-biasa-terpanjang) (LCS)
* `A` [Surutan Bertambah Terpanjang](src/algoritma/set/susulan-bertambah-panjang)
* `A` [Jurutan Sepunya Terpendek](src/algoritma/set/jujukan-sepunya-terpendek) (SCS)
* `A` [Masalah Knapsack](src/algorithms/sets/knapsack-problem) - "0/1" dan "Unbound"
* `A` [Maximum Subarray](src/algorithm/sets/maximum-subarray) - versi "Brute Force" dan "Dynamic Programming" (Kadane's)
* `A` [Jumlah Gabungan](src/algoritma/set/jumlah-gabungan) - cari semua gabungan yang membentuk jumlah tertentu
* **Rentetan**
* `B` [Jarak Hamming](src/algoritma/rentetan/jarak hamming) - bilangan kedudukan di mana simbol berbeza
* `B` [Palindrome](src/algorithm/string/palindrome) - semak sama ada rentetan adalah sama secara terbalik
* `A` [Jarak Levenshtein](src/algoritma/rentetan/levenshtein-jarak) - jarak edit minimum antara dua jujukan
* `A` [Algoritma KnuthMorrisPratt](src/algorithm/string/knuth-morris-pratt) (Algoritma KMP) - carian subrentetan (padanan corak)
* `A` [Z Algoritma](src/algorithm/string/z-algorithm) - carian subrentetan (padanan corak)
* `A` [Algoritma Rabin Karp](src/algorithm/string/rabin-karp) - carian subrentetan
* `A` [Subrentetan Biasa Terpanjang](src/algoritma/rentetan/subrentetan-biasa-terpanjang)
* `A` [Padanan Ungkapan Biasa](src/algoritma/rentetan/padanan-ungkapan-biasa)
* **Carian**
* `B` [Carian Linear](src/algorithm/search/linear-search)
* `B` [Cari Lompat](src/algorithm/search/jump-search) (atau Carian Sekat) - cari dalam tatasusunan yang diisih
* `B` [Carian Binari](src/algorithm/search/binary-search) - cari dalam tatasusunan yang diisih
* `B` [Carian Interpolasi](src/algoritma/search/interpolation-search) - cari dalam tatasusunan tersusun yang diedarkan secara seragam
* **Menyusun**
* `B` [Isih Buih](src/algoritma/isih/isih-buih)
* `B` [Isih Pilihan](src/algoritma/isih/isih-pilihan)
* `B` [Isih Sisipan](src/algoritma/isih/isihan-sisipan)
* `B` [Isih Timbunan](src/algoritma/isih/isih-timbun)
* `B` [Isih Gabung](src/algoritma/isih/isih-gabung)
* `B` [Quicksort](src/algorithm/sorting/quick-sort) - pelaksanaan di tempat dan bukan di tempat
* `B` [Shellsort](src/algoritm/sorting/shell-sort)
* `B` [Isih Mengira](src/algoritma/isihan/isihan-kira)
* `B` [Isih Radix](src/algoritma/isih/isih-radix)
* **Senarai Terpaut**
* `B` [Straight Traversal](src/algorithm/linked-list/traversal)
* `B` [Reverse Traversal](src/algorithm/linked-list/reverse-traversal)
* **Pokok**
* `B` [Depth-First Search](src/algorithm/tree/depth-first-search) (DFS)
* `B` [Breadth-First-search](src/algorithm/tree/breadth-first-search) (BFS)
* **Graf**
* `B` [Depth-First Search](src/algorithm/graph/depth-first-search) (DFS)
* `B` [Breadth-First Search](src/algorithm/graph/breadth-first-search) (BFS)
* `B` [Algoritma Kruskal](src/algoritma/graf/kruskal) - mencari Pokok Spanning Minimum (MST) untuk graf tidak berwajaran
* `A` [Algoritma Dijkstra](src/algorithm/graph/dijkstra) - mencari laluan terpendek ke semua bucu graf dari bucu tunggal
* `A` [Algoritma Bellman-Ford](src/algoritma/graf/bellman-ford) - mencari laluan terpendek ke semua bucu graf daripada bucu tunggal
* `A` [Algoritma Floyd-Warshall](src/algorithm/graph/floyd-warshall) - cari laluan terpendek antara semua pasangan bucu
* `A` [Detect Cycle](src/algorithm/graph/detect-cycle) - untuk kedua-dua graf terarah dan tidak terarah (versi berasaskan DFS dan Disjoint Set)
* `A` [Algoritma Prim](src/algoritma/graf/prim) - mencari Pokok Spanning Minimum (MST) untuk graf tidak berwajaran
* `A` [Isih Topologi](src/algoritma/graf/isihan-topologi) - Kaedah DFS
* `A` [Mata Artikulasi](src/algoritma/graf/titik-artikulasi) - Algoritma Tarjan (berasaskan DFS)
* `A` [Bridges](src/algorithm/graph/bridges) - algoritma berasaskan DFS
* `A` [Eulerian Path and Eulerian Circuit](src/algorithm/graph/eulerian-path) - Algoritma Fleury - Lawati setiap tepi tepat sekali
* `A` [Kitaran Hamiltonian](src/algoritma/graf/kitaran-hamilton) - Lawati setiap bucu tepat sekali
* `A` [Komponen Bersambung Kuat](src/algoritma/graf/komponen-kuat-bersambung) - Algoritma Kosaraju
* `A` [Masalah Jurujual Perjalanan](src/algoritma/graf/jurujual-perjalanan) - laluan terpendek mungkin yang melawati setiap bandar dan kembali ke bandar asal
* **Kriptografi**
* `B` [Cincangan Polinomial](src/algoritma/kriptografi/cincang polinomial) - fungsi cincang bergolek berdasarkan polinomial
* `B` [Sifir Pagar Rel](src/algoritma/kriptografi/sifir-pagar-rel) - algoritma sifir transposisi untuk pengekodan mesej
* `B` [Caesar Cipher](src/algoritma/kriptografi/caesar-cipher) - sifir penggantian mudah
* `B` [Sifir Bukit](src/algoritma/kriptografi/sifir bukit) - sifir penggantian berdasarkan algebra linear
* **Pembelajaran Mesin**
* `B` [NanoNeuron](https://github.com/trekhleb/nano-neuron) - 7 fungsi JS mudah yang menggambarkan bagaimana mesin sebenarnya boleh belajar (perambatan ke hadapan/belakang)
* `B` [k-NN](src/algoritma/ml/knn) - algoritma klasifikasi jiran terdekat k
* `B` [k-Means](src/algorithm/ml/k-means) - algoritma pengelompokan k-Means
* **Pemprosesan imej**
* `B` [Ukiran Jahitan](src/algoritma/pemprosesan-imej/ukiran-jahitan) - algoritma saiz semula imej sedar kandungan
* **Statistik**
* `B` [Rawak Berwajaran](src/algoritma/statistik/rawak-wajaran) - pilih item rawak daripada senarai berdasarkan berat item
* **Algoritma evolusi**
* `A` [Algoritma genetik](https://github.com/trekhleb/self-parking-car-evolution) - contoh cara algoritma genetik boleh digunakan untuk melatih kereta letak sendiri
* **Tidak dikategorikan**
* `B` [Menara Hanoi](src/algoritma/tidak dikategorikan/menara-hanoi)
* `B` [Putaran Matriks Persegi](src/algoritma/tidak dikategorikan/putaran-matriks-persegi) - algoritma di tempat
* `B` [Permainan Lompat](src/algoritma/tidak dikategorikan/permainan lompat) - menjejak ke belakang, pengaturcaraan dinamik (atas ke bawah + bawah ke atas) dan contoh tamak
* `B` [Laluan Unik](src/algorithms/uncategorized/unique-paths) - penjejakan ke belakang, pengaturcaraan dinamik dan contoh berasaskan Segitiga Pascal
* `B` [Teres Hujan](src/algoritma/tidak dikategorikan/teres hujan) - memerangkap masalah air hujan (versi pengaturcaraan dinamik dan kekerasan)
* `B` [Tangga Rekursif](src/algoritma/tidak dikategorikan/tangga rekursif) - kira bilangan cara untuk sampai ke atas (4 penyelesaian)
* `B` [Masa Terbaik Untuk Membeli Saham Jual](src/algoritma/tidak dikategorikan/masa-terbaik-untuk-membeli-menjual-saham) - bahagikan dan takluk serta contoh satu laluan
* `A` [Masalah N-Queens](src/algoritma/uncategorized/n-queens)
* `A` [Lawatan Kesatria](src/algoritma/tidak dikategorikan/jelajah kesatria)
### Algoritma mengikut Paradigma
Paradigma algoritma ialah kaedah atau pendekatan generik yang mendasari reka bentuk kelas
daripada algoritma. Ia adalah abstraksi yang lebih tinggi daripada tanggapan algoritma, sama seperti an
algoritma adalah abstraksi yang lebih tinggi daripada program komputer.
* **Brute Force** - lihat semua kemungkinan dan pilih penyelesaian terbaik
* `B` [Carian Linear](src/algorithm/search/linear-search)
* `B` [Rain Terraces](src/algoritma/uncategorized/rain-teres) - memerangkap masalah air hujan
* `B` [Tangga Rekursif](src/algoritma/tak berkategori/tangga rekursif) - kira bilangan cara untuk sampai ke atas
* `A` [Subarray Maksimum](src/algoritma/set/subarray maksimum)
* `A` [Masalah Jurujual Perjalanan](src/algoritma/graf/jurujual-perjalanan) - laluan terpendek mungkin yang melawati setiap bandar dan kembali ke bandar asal
* `A` [Transformasi Fourier Diskret](src/algoritma/matematik/fourier-transform) - menguraikan fungsi masa (suatu isyarat) kepada frekuensi yang membentuknya
* **Rakus** - pilih pilihan terbaik pada masa semasa, tanpa sebarang pertimbangan untuk masa hadapan
* `B` [Permainan Lompat](src/algoritma/tidak dikategorikan/permainan lompat)
* `A` [Masalah Knapsack Tidak Terikat](src/algoritma/set/masalah-knapsack)
* `A` [Algoritma Dijkstra](src/algoritma/graf/dijkstra) - mencari laluan terpendek ke semua bucu graf
* `A` [Algoritma Prim](src/algoritma/graf/prim) - mencari Pokok Spanning Minimum (MST) untuk graf tidak berwajaran
* `A` [Algoritma Kruskal](src/algoritma/graf/kruskal) - mencari Pokok Spanning Minimum (MST) untuk graf tidak berwajaran
* **Divide and Conquer** - bahagikan masalah kepada bahagian yang lebih kecil dan kemudian selesaikan bahagian tersebut
* `B` [Carian Perduaan](src/algoritma/carian/pencarian-perduaan)
* `B` [Menara Hanoi](src/algoritma/tidak dikategorikan/menara-hanoi)
* `B` [Segitiga Pascal](src/algoritma/matematik/segitiga-pascal)
* `B` [Algoritma Euclidean](src/algorithm/math/euclidean-algorithm) - kira Pembahagi Sepunya Terhebat (GCD)
* `B` [Isih Gabung](src/algoritma/isih/isih-gabung)
* `B` [Isih Pantas](src/algoritma/isih/isih-pantas)
* `B` [Carian Kedalaman-Pertama Pokok](src/algoritma/pokok/carian-pertama-dalam) (DFS)
* `B` [Graph Depth-First Search](src/algorithm/graph/depth-first-search) (DFS)
* `B` [Matriks](src/algoritma/matematik/matriks) - menjana dan melintasi matriks pelbagai bentuk
* `B` [Permainan Lompat](src/algoritma/tidak dikategorikan/permainan lompat)
* `B` [Fast Powering](src/algorithm/math/fast-powering)
* `B` [Masa Terbaik Untuk Membeli Saham Jual](src/algoritma/tidak dikategorikan/masa-terbaik-untuk-membeli-menjual-saham) - bahagikan dan takluk serta contoh satu laluan
* `A` [Permutasi](src/algoritma/set/permutasi) (dengan dan tanpa ulangan)
* `A` [Gabungan](src/algoritma/set/gabungan) (dengan dan tanpa ulangan)
* `A` [Subarray Maksimum](src/algoritma/set/subarray maksimum)
* **Pengaturcaraan Dinamik** - bina penyelesaian menggunakan sub-penyelesaian yang ditemui sebelum ini
* `B` [Nombor Fibonacci](src/algoritma/matematik/fibonacci)
* `B` [Permainan Lompat](src/algoritma/tidak dikategorikan/permainan lompat)
* `B` [Laluan Unik](src/algoritma/tidak dikategorikan/laluan-unik)
* `B` [Rain Terraces](src/algoritma/uncategorized/rain-teres) - memerangkap masalah air hujan
* `B` [Tangga Rekursif](src/algoritma/tak berkategori/tangga rekursif) - kira bilangan cara untuk sampai ke atas
* `B` [Ukiran Jahitan](src/algoritma/pemprosesan-imej/ukiran-jahitan) - algoritma saiz semula imej sedar kandungan
* `A` [Jarak Levenshtein](src/algoritma/rentetan/levenshtein-jarak) - jarak edit minimum antara dua jujukan
* `A` [Turutan Sepunya Terpanjang](src/algoritma/set/susulan-biasa-terpanjang) (LCS)
* `A` [Subrentetan Biasa Terpanjang](src/algoritma/rentetan/subrentetan-biasa-terpanjang)
* `A` [Surutan Bertambah Terpanjang](src/algoritma/set/susulan-bertambah-panjang)
* `A` [Jujukan Sepunya Terpendek](src/algoritma/set/jujukan-sepunya-terpendek)
* `A` [0/1 Masalah Knapsack](src/algoritma/set/knapsack-problem)
* `A` [Pembahagian Integer](src/algoritma/matematik/integer-partition)
* `A` [Subarray Maksimum](src/algoritma/set/subarray maksimum)
* `A` [Algoritma Bellman-Ford](src/algorithm/graph/bellman-ford) - mencari laluan terpendek ke semua bucu graf
* `A` [Algoritma Floyd-Warshall](src/algorithm/graph/floyd-warshall) - cari laluan terpendek antara semua pasangan bucu
* `A` [Padanan Ungkapan Biasa](src/algoritma/rentetan/padanan-ungkapan-biasa)
* **Penjejakan Belakang** - sama seperti kekerasan, cuba jana semua penyelesaian yang mungkin, tetapi setiap kali anda menjana penyelesaian seterusnya anda menguji
jika ia memenuhi semua syarat, dan hanya kemudian terus menjana penyelesaian seterusnya. Jika tidak, mundur, dan teruskan a
jalan yang berbeza untuk mencari penyelesaian. Biasanya traversal DFS bagi ruang keadaan sedang digunakan.
* `B` [Permainan Lompat](src/algoritma/tidak dikategorikan/permainan lompat)
* `B` [Laluan Unik](src/algoritma/tidak dikategorikan/laluan-unik)
* `B` [Set Kuasa](src/algoritma/set/set-kuasa) - semua subset set
* `A` [Kitaran Hamiltonian](src/algoritma/graf/kitaran-hamilton) - Lawati setiap bucu tepat sekali
* `A` [Masalah N-Queens](src/algoritma/uncategorized/n-queens)
* `A` [Lawatan Kesatria](src/algoritma/tidak dikategorikan/jelajah kesatria)
* `A` [Jumlah Gabungan](src/algoritma/set/jumlah-gabungan) - cari semua gabungan yang membentuk jumlah tertentu
* **Branch & Bound** - ingat penyelesaian kos terendah yang terdapat pada setiap peringkat penjejakan ke belakang
cari, dan gunakan kos penyelesaian kos terendah yang ditemui setakat ini sebagai had yang lebih rendah pada kos
penyelesaian kos termurah untuk masalah, untuk membuang penyelesaian separa dengan kos lebih besar daripada
penyelesaian kos terendah ditemui setakat ini. Biasanya traversal BFS digabungkan dengan traversal DFS of state-space
pokok sedang digunakan.
## Cara menggunakan repositori ini
**Pasang semua kebergantungan**
```
pemasangan npm
```
**Jalankan ESLint**
Anda mungkin mahu menjalankannya untuk menyemak kualiti kod.
```
npm run lint
```
**Jalankan semua ujian**
```
ujian npm
```
**Jalankan ujian mengikut nama**
```
ujian npm -- 'LinkedList'
```
**Penyelesaian masalah**
Jika linting atau ujian gagal, cuba padamkan folder `node_modules` dan pasang semula pakej npm:
```
rm -rf ./node_modules
npm i
```
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.
**Taman permainan**
Anda boleh bermain dengan struktur data dan algoritma dalam fail `./src/playground/playground.js` dan tulis
mengujinya dalam `./src/playground/__test__/playground.test.js`.
Kemudian hanya jalankan arahan berikut untuk menguji sama ada kod taman permainan anda berfungsi seperti yang diharapkan:
```
ujian npm -- 'taman permainan'
```
## Informasi berguna
### Rujukan
[▶ Struktur Data dan Algoritma di YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)
### Notasi O Besar
*Notasi O Besar* digunakan untuk mengklasifikasikan algoritma mengikut cara masa berjalan atau keperluan ruang mereka berkembang apabila saiz input bertambah.
Pada carta di bawah anda mungkin menemui susunan pertumbuhan algoritma yang paling biasa yang dinyatakan dalam tatatanda Big O.
![Graf O Besar](./assets/big-o-graph.png)
Sumber: [Big O Cheat Sheet](http://bigocheatsheet.com/).
Di bawah ialah senarai beberapa tatatanda Big O yang paling banyak digunakan dan perbandingan prestasinya terhadap saiz data input yang berbeza.
| Notasi O Besar | Taip | Pengiraan untuk 10 elemen | Pengiraan untuk 100 elemen | Pengiraan untuk 1000 elemen |
| -------------- | ----------- | ---------------------------- | ---------------------------- | ------------------------------- |
| **O(1)** | Malar | 1 | 1 | 1 |
| **O(log N)** | Logaritma | 3 | 6 | 9 |
| **O(N)** | Linear | 10 | 100 | 1000 |
| **O(N log N)** | n log(n) | 30 | 600 | 9000 |
| **O(N^2)** | Kuadratik | 100 | 10000 | 1000000 |
| **O(2^N)** | Eksponen | 1024 | 1.26e+29 | 1.07e+301 |
| **O(N!)** | Faktorial | 3628800 | 9.3e+157 | 4.02e+2567
### Kerumitan Operasi Struktur Data
| Struktur Data | Akses | Cari | Sisipan | Pemadaman | Komen |
| ------------------------ | :-------: | :-------: | :-------: | :-------: | :-------- |
| **Array** | 1 | n | n | n | |
| **Timbunan** | n | n | 1 | 1 | |
| **Beratur** | n | n | 1 | 1 | |
| **Senarai Terpaut** | n | n | 1 | n | |
| **Jadual Hash** | - | n | n | n | Dalam kes kos fungsi cincang yang sempurna ialah O(1) |
| **Pokok Carian Binari** | n | n | n | n | Dalam kes kos pokok seimbang ialah O(log(n)) |
| **B-Tree** | log(n) | log(n) | log(n) | log(n) | |
| **Pokok Merah-Hitam** | log(n) | log(n) | log(n) | log(n) | |
| **Pokok AVL** | log(n) | log(n) | log(n) | log(n) | |
| **Penapis Bloom** | - | 1 | 1 | - | Positif palsu mungkin semasa mencari |
### Kerumitan Algoritma Pengisihan Tatasusunan
| Nama | Terbaik | Purata | Paling teruk | Memori | Stabil | Komen |
| ---------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- |
| **Isih gelembung** | n | n<sup>2</sup> | n<sup>2</sup> | 1 | Ya | |
| **Isihan sisipan** | n | n<sup>2</sup> | n<sup>2</sup> | 1 | Ya | |
| **Isih pilihan** | n<sup>2</sup> | n<sup>2</sup> | n<sup>2</sup> | 1 | Tidak | |
| **Isihan timbunan** | n&nbsp;log(n) | n&nbsp;log(n) | n&nbsp;log(n) | 1 | Tidak | |
| **Isih gabung** | n&nbsp;log(n) | n&nbsp;log(n) | n&nbsp;log(n) | n | Ya | |
| **Isih cepat** | n&nbsp;log(n) | n&nbsp;log(n) | n<sup>2</sup> | log(n) | Tidak | Quicksort biasanya dilakukan di tempat dengan ruang tindanan O(log(n)) |
| **Isih cangkerang** | n&nbsp;log(n) | bergantung pada jujukan jurang | n&nbsp;(log(n))<sup>2</sup> | 1 | Tidak | |
| **Isih mengira** | n + r | n + r | n + r | n + r | Ya | r - nombor terbesar dalam tatasusunan |
| **Isih Radix** | n * k | n * k | n * k | n + k | Ya | k - panjang kunci terpanjang |
## Penyokong Projek
> Anda boleh menyokong projek ini melalui ❤️️ [GitHub](https://github.com/sponsors/trekhleb) atau ❤️️ [Patreon](https://www.patreon.com/trekhleb).
[Orang yang menyokong projek ini](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 0`
> Beberapa lagi [projek](https://trekhleb.dev/projects/) dan [artikel](https://trekhleb.dev/blog/) tentang JavaScript dan algoritma pada [trekhleb.dev](https:/ /trekhleb.dev)

371
README.pe-PE.md Normal file
View File

@ -0,0 +1,371 @@
الگوریتم های جاوا اسکریپت و ساختارهای داده
> 🇺🇦 اوکراین [در حال حمله است] (https://twitter.com/MFA_Ukraine) توسط ارتش روسیه. غیرنظامیان در حال کشته شدن هستند. مناطق مسکونی در حال بمباران هستند.
> - از طریق [بانک ملی اوکراین] به اوکراین کمک کنید (https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi)
> - از طریق صندوق [SaveLife](https://savelife.in.ua/en/donate-en/) به اوکراین کمک کنید
> - اطلاعات بیشتر در [war.ukraine.ua](https://war.ukraine.ua/)
[![CI](https://github.com/trekhleb/javascript-algorithms/workflows/CI/badge.svg)](https://github.com/trekhleb/javascript-algorithms/actions?query=workflow% 3ACI+شاخه%3Amaster)
[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](https://codecov.io/gh/trekhleb/javascript-algorithms)
این مخزن شامل نمونه های بسیاری بر اساس جاوا اسکریپت است
الگوریتم ها و ساختارهای داده محبوب
هر الگوریتم و ساختار داده README جداگانه خود را دارد
همراه با توضیحات مرتبط و لینک برای مطالعه بیشتر (از جمله
به ویدیوهای یوتیوب).
_این را به زبان های دیگر بخوانید:_
[_简体中文_](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
[_Português_](README.pt-BR.md
[_Русский_](README.ru-RU.md
[_Türk_](README.tr-TR.md
[_Italiana_](README.it-IT.md
[_Bahasa Indonesia_](README.id-ID.md
[_Українська_](README.uk-UA.md
[_عربی_](README.ar-AR.md
[_Tiếng Việt_](README.vi-VN.md
[_Deutsch_](README.de-DE.md)
*☝ توجه داشته باشید که این پروژه برای اهداف یادگیری و تحقیق استفاده می شود
فقط، و **نیست** برای تولید استفاده شود.*
## ساختارهای داده
ساختار داده روشی خاص برای سازماندهی و ذخیره سازی داده ها در رایانه است تا بتواند
به طور موثر قابل دسترسی و اصلاح باشد. به طور دقیق تر، ساختار داده مجموعه ای از داده ها است
مقادیر، روابط بین آنها و توابع یا عملیاتی که می توان روی آنها اعمال کرد
داده.
"B" - مبتدی، "A" - پیشرفته
* `B` [فهرست پیوند شده] (src/data-structures/linked-list)
* `B` [فهرست پیوند شده دوگانه] (src/data-structures/doubly-linked-list)
* 'B' [صف] (src/data-structures/queue)
* «B» [پشته] (src/data-structures/stack)
* `B` [Hash Table] (src/data-structures/hash-table)
* `B` [Heap] (src/data-structures/heap) - نسخه‌های حداکثر و حداقل پشته
* `B` [صف اولویت] (src/data-structures/priority-queue)
* `A` [Trie] (src/data-structures/trie)
* «A» [درخت] (src/data-structures/tree)
* `A` [درخت جستجوی باینری] (src/data-structures/tree/binary-search-tree)
* `A` [AVL Tree] (src/data-structures/tree/avl-tree)
* `A` [درخت قرمز-سیاه] (src/data-structures/tree/red-black-tree)
* `A` [Segment Tree] (src/data-structures/tree/segment-tree) - با نمونه جستجوهای محدوده حداقل/حداکثر/جمع
* `A` [درخت Fenwick](src/data-structures/tree/fenwick-tree) (درخت نمایه شده باینری)
* `A` [گراف] (src/data-structures/graph) (هم جهت دار و هم بدون جهت)
* «A» [مجموعه جدا] (src/data-structures/disjoint-set)
* «A» [فیلتر بلوم] (src/data-structures/bloom-filter)
## الگوریتم ها
یک الگوریتم یک مشخصات روشن از نحوه حل یک کلاس از مسائل است. این است
مجموعه ای از قوانین که دقیقاً دنباله ای از عملیات را تعریف می کند.
"B" - مبتدی، "A" - پیشرفته
### الگوریتم ها بر اساس موضوع
* **ریاضی**
* 'B' [دستکاری بیت] (src/الگوریتم ها/ریاضی/بیت ها) - تنظیم/دریافت/به روز رسانی/پاک کردن بیت ها، ضرب/تقسیم بر دو، ایجاد منفی و غیره.
* `B` [نقطه شناور دودویی] (src/الگوریتم ها/ریاضی/نقطه شناور باینری) - نمایش دودویی اعداد ممیز شناور.
* `B` [فاکتوری] (src/algorithms/math/factorial)
* 'B' [شماره فیبوناچی] (src/الگوریتم ها/ریاضی/فیبوناچی) - نسخه های کلاسیک و بسته
* 'B' [عوامل اول] (src/الگوریتم ها/ریاضی/عوامل اول) - یافتن عوامل اول و شمارش آنها با استفاده از قضیه هاردی رامانوجان
* `B` [آزمون اولیه] (src/algorithms/math/primality-test) (روش تقسیم آزمایشی)
* 'B' [الگوریتم اقلیدسی] (src/algorithms/math/euclidean-algorithm) - محاسبه بزرگترین مقسوم علیه مشترک (GCD)
* `B` [کمترین ضرب رایج] (src/algorithms/math/least-common-multiple) (LCM)
* `B` [الک اراتوستن] (src/الگوریتم ها/ریاضی/الک-اراتوستن) - یافتن تمام اعداد اول تا هر حد معین
* `B` [قدرت دو است] (src/algorithms/math/is-power-of-two) - بررسی کنید که آیا عدد توان دو است (الگوریتم‌های ساده و بی‌تفاوت)
* 'B' [مثلث پاسکال] (src/algorithms/math/pascal-triangle)
* 'B' [شماره مختلط] (src/algorithms/math/complex-number) - اعداد مختلط و عملیات اساسی با آنها
* 'B' [رادیان و درجه] (src/الگوریتم ها/ریاضی/رادیان) - تبدیل رادیان به درجه و معکوس
* `B` [تقویت سریع] (src/الگوریتم‌ها/ریاضی/تغذیه سریع)
* `B` [روش هورنر] (src/الگوریتم‌ها/ریاضی/روش هورنر) - ارزیابی چند جمله‌ای
* 'B' [ماتریس] (src/الگوریتم ها/ریاضی/ماتریس) - ماتریس ها و عملیات اصلی ماتریس (ضرب، جابجایی و غیره)
* `B` [فاصله اقلیدسی](src/algorithms/
ریاضی/اقلیدسی-فاصله) - فاصله بین دو نقطه/بردار/ماتریس
* 'A' [پارتیشن عدد صحیح] (src/algorithms/math/integer-partition)
* `A` [ریشه مربع] (src/الگوریتم ها/ریاضی/ریشه مربع) - روش نیوتن
* `A` [الگوریتم Liu Hui π](src/algorithms/math/liu-hui) - محاسبات π تقریبی بر اساس N-gon
* 'A' [تبدیل فوریه گسسته] (src/algorithms/math/fourier-transform) - یک تابع زمان (یک سیگنال) را به فرکانس‌هایی که آن را تشکیل می‌دهند تجزیه می‌کند.
* **مجموعه**
* `B` [محصول دکارتی] (src/الگوریتم‌ها/مجموعه‌ها/محصولات دکارتی) - محصول مجموعه‌های متعدد
* 'B' [Fisher-Yates Shuffle] (src/algorithms/sets/fisher-yates) - جایگشت تصادفی یک دنباله محدود
* «A» [مجموعه توان] (src/الگوریتم‌ها/مجموعه‌ها/مجموعه قدرت) - همه زیرمجموعه‌های یک مجموعه (راه‌حل‌های بیتی و پس‌گرد)
* «A» [جایگشت‌ها] (src/الگوریتم‌ها/مجموعه‌ها/جایگشت‌ها) (با و بدون تکرار)
* `A` [ترکیب ها] (src/الگوریتم ها/مجموعه ها/ترکیبات) (با و بدون تکرار)
* `A` [طولانی ترین دنباله متداول] (src/الگوریتم ها/مجموعه ها/طولانی ترین-متداول-زیر دنباله) (LCS)
* `A` [طولانی‌ترین دنباله افزایش‌دهنده] (src/الگوریتم‌ها/مجموعه‌ها/طولانی‌ترین-افزاینده-زیر دنباله)
* `A` [کوتاه‌ترین سوپرست متداول] (src/الگوریتم‌ها/مجموعه‌ها/کوتاه‌ترین ابرتوالی مشترک) (SCS)
* `A` [مسئله کوله پشتی] (src/algorithms/sets/knapsack-problem) - موارد "0/1" و "Unbound"
* `A` [Maximum Subarray] (src/algorithms/sets/maximum-subray) - نسخه های "Brute Force" و "Dynamic Programming" (Kadane's)
* `A` [ترکیب جمع] (src/الگوریتم‌ها/مجموعه‌ها/ترکیب-جمع) - همه ترکیب‌هایی را پیدا کنید که مجموع خاصی را تشکیل می‌دهند.
* **رشته های**
* 'B' [فاصله همینگ] (src/الگوریتم ها/رشته/همینگ-فاصله) - تعداد موقعیت هایی که نمادها در آنها متفاوت هستند
* `B` [Palindrome] (src/algorithms/string/palindrome) - بررسی کنید که آیا رشته به صورت معکوس یکسان است یا خیر
* `A` [فاصله Levenshtein] (src/algorithms/string/levenshtein-distance) - حداقل فاصله ویرایش بین دو دنباله
* `A` [الگوریتم KnuthMorrisPratt](src/algorithms/string/knuth-morris-pratt) (الگوریتم KMP) - جستجوی زیر رشته (تطبیق الگو)
* `A` [الگوریتم Z] (src/algorithms/string/z-algorithm) - جستجوی زیر رشته (تطبیق الگو)
* `A` [الگوریتم Rabin Karp] (src/algorithms/string/rabin-karp) - جستجوی زیر رشته
* `A` [طولانی ترین زیر رشته مشترک] (src/algorithms/string/longest-common-substring)
* «A» [تطبیق عبارت منظم] (src/algorithms/string/regular-expression-matching)
* **جستجو**
* `B` [جستجوی خطی] (src/algorithms/search/linear-search)
* `B` [Jump Search] (src/algorithms/search/jump-search) (یا Block Search) - جستجو در آرایه مرتب شده
* `B` [جستجوی باینری] (src/algorithms/search/binary-search) - جستجو در آرایه مرتب شده
* `B` [جستجوی درون یابی] (src/algorithms/search/interpolation-search) - جستجو در آرایه مرتب شده به طور یکنواخت توزیع شده
* **مرتب سازی**
* «B» [مرتب‌سازی حباب‌ها] (src/الگوریتم‌ها/مرتب‌سازی/مرتب‌سازی حباب‌ها)
* «B» [مرتب‌سازی انتخابی] (src/الگوریتم‌ها/مرتب‌سازی/مرتب‌سازی انتخابی)
* «B» [مرتب‌سازی درج] (src/الگوریتم‌ها/مرتب‌سازی/مرتب‌سازی درج)
* «B» [مرتب‌سازی پشته] (src/الگوریتم‌ها/مرتب‌سازی/مرتب‌سازی پشته)
* `B` [Merge Sort] (src/algorithms/sorting/merge-sort)
* «B» [مرتب‌سازی سریع] (src/الگوریتم‌ها/مرتب‌سازی/مرتب‌سازی سریع) - پیاده‌سازی در محل و غیردرجا
* `B` [Sellsort] (src/algorithms/sorting/shell-sort)
* «B» [مرتب‌سازی شمارش] (src/الگوریتم‌ها/مرتب‌سازی/شمارش مرتب‌سازی)
* `B` [Radix Sort] (src/algorithms/sorting/radix-sort)
* **لیست های پیوندی**
* `B` [پیمایش مستقیم] (src/algorithms/linked-list/traversal)
* `B` [پیمایش معکوس] (src/algorithms/linked-list/reverse-traversal)
* **درختان**
* `B` [Depth-First Search] (src/algorithms/tree/depth-first-search) (DFS)
* `B` [Breadth-First Search] (src/algorithms/tree/breadth-first-search) (BFS)
* **نمودارها**
* `B` [جستجوی عمق-اول](src/الگوریتم ها/گراف/عمق-اول-جستجو) (DFS)
* `B` [جستجوی عرض-اول](src/الگوریتم ها/گراف/عرض-اول-جستجو) (BFS)
* `B` [الگوریتم کروسکال] (src/algorithms/graph/kruskal) - یافتن حداقل درخت پوشا (MST) برای نمودار وزنی بدون جهت
* `A` [الگوریتم Dijkstra] (src/algorithms/graph/dijkstra) - یافتن کوتاه‌ترین مسیرها به تمام رئوس نمودار از یک راس
* `A` [الگوریتم بلمن-فورد](src/algorithms/graph/bellman-ford) - یافتن کوتاه ترین مسیرها برای همه رئوس نمودار از یک راس
* `A` [الگوریتم فلوید-وارشال] (src/algorithms/graph/floyd-warshall) - کوتاه ترین مسیرها را بین همه جفت رئوس پیدا کنید
* `A` [Detect Cycle] (src/algorithms/graph/ detect-cycle) - هم برای نمودارهای جهت دار و هم بدون جهت (نسخه های مبتنی بر DFS و Disjoint Set)
* `A` [الگوریتم Prim] (src/algorithms/graph/prim) - یافتن حداقل درخت پوشا (MST) برای نمودار وزنی بدون جهت
* `A` [مرتب‌سازی توپولوژیکی] (src/algorithms/graph/topological-sorting) - روش DFS
* `A` [نقاط بیانی] (src/algorithms/graph/articulation-points) - الگوریتم ترجان (بر اساس DFS)
* `A` [پلها] (src/algorithms/graph/bridges) - الگوریتم مبتنی بر DFS
* 'A' [مسیر اویلر و مدار اویلر] (src/algorithms/graph/eule
rian-path) - الگوریتم فلوری - دقیقاً یک بار از هر لبه بازدید کنید
* `A` [چرخه همیلتونی] (src/algorithms/graph/Hamiltonian-cycle) - از هر رأس دقیقاً یک بار بازدید کنید
* `A` [کامپوننت های به شدت متصل] (src/algorithms/graph/strongly-connected-components) - الگوریتم کوساراجو
* `A` [مسئله فروشنده مسافر] (src/algorithms/graph/travelling-salesman) - کوتاه ترین مسیر ممکن که از هر شهر بازدید می کند و به شهر مبدأ باز می گردد.
* **رمزنگاری**
* `B` [هش چند جمله‌ای] (src/الگوریتم‌ها/رمزنگاری/هش چند جمله‌ای) - تابع هش رول بر اساس چند جمله‌ای
* `B` [رمز حصار ریلی] (src/algorithms/cryptography/rail-fence-cipher) - یک الگوریتم رمز جابجایی برای رمزگذاری پیام ها
* `B` [Caesar Cipher] (src/algorithms/cryptography/caesar-cipher) - رمز جایگزین ساده
* `B` [رمز تپه] (src/الگوریتم‌ها/رمز نگاری/تپه-رمز) - رمز جایگزینی بر اساس جبر خطی
* **فراگیری ماشین**
* `B` [NanoNeuron] (https://github.com/trekhleb/nano-neuron) - 7 تابع JS ساده که نشان می‌دهد ماشین‌ها چگونه واقعاً می‌توانند یاد بگیرند (انتشار به جلو/عقب)
* `B` [k-NN](src/الگوریتم‌ها/ml/knn) - الگوریتم طبقه‌بندی k-نزدیک‌ترین همسایگان
* `B` [k-Means](src/algorithms/ml/k-means) - الگوریتم خوشه بندی k-Means
* **پردازش تصویر**
* `B` [Seam Carving] (src/algorithms/image-processing/seam-carving) - الگوریتم تغییر اندازه تصویر آگاه از محتوا
* **آمار**
* 'B' [تصادفی وزنی] (src/الگوریتم ها/آمار/وزنی-تصادفی) - آیتم تصادفی را از لیست بر اساس وزن آیتم ها انتخاب کنید
* **الگوریتم های تکاملی**
* `A` [الگوریتم ژنتیک] (https://github.com/trekhleb/self-parking-car-evolution) - نمونه ای از نحوه استفاده از الگوریتم ژنتیک برای آموزش خودروهای خود پارکینگ
* **دستهبندی نشده**
* `B` [برج هانوی] (src/الگوریتم‌ها/دسته‌بندی نشده/هانوی-برج)
* `B` [چرخش ماتریس مربع] (src/الگوریتم‌ها/ دسته‌بندی نشده/چرخش ماتریس مربع) - الگوریتم در محل
* `B` [بازی پرش] (src/الگوریتم ها/ دسته بندی نشده/بازی پرش) - عقب نشینی، برنامه نویسی پویا (از بالا به پایین + پایین به بالا) و مثال های حریصانه
* `B` [مسیرهای منحصربه‌فرد] (src/الگوریتم‌ها/ دسته‌بندی‌نشده/مسیرهای منحصربه‌فرد) - بک‌تراکینگ، برنامه‌نویسی پویا و مثال‌های مبتنی بر مثلث پاسکال
* `B` [تراس های بارانی] (src/الگوریتم ها/ دسته بندی نشده/تراس های بارانی) - به دام انداختن مشکل آب باران (برنامه نویسی پویا و نسخه های brute force)
* `B` [پلکان بازگشتی] (src/الگوریتم‌ها/ دسته‌بندی نشده/پله‌های بازگشتی) - تعداد راه‌های رسیدن به بالا را بشمارید (4 راه‌حل)
* `B` [بهترین زمان برای خرید سهام] (src/الگوریتم‌ها/دسته‌بندی نشده/بهترین زمان برای خرید-فروش- سهام) - تقسیم و غلبه و نمونه‌هایی با یک پاس
* `A` [مسئله N-Queens] (src/algorithms/uncategorized/n-queens)
* «A» [تور شوالیه] (src/الگوریتم‌ها/دسته‌بندی نشده/شوالیه-تور)
### الگوریتم های پارادایم
پارادایم الگوریتمی یک روش یا رویکرد عمومی است که زیربنای طراحی یک کلاس است
از الگوریتم ها این یک انتزاع بالاتر از مفهوم یک الگوریتم است، درست به عنوان یک
الگوریتم یک انتزاع بالاتر از یک برنامه کامپیوتری است.
* **Brute Force** - به همه احتمالات نگاه کنید و بهترین راه حل را انتخاب کنید
* `B` [جستجوی خطی] (src/algorithms/search/linear-search)
* `B` [تراس های بارانی] (src/الگوریتم ها/ دسته بندی نشده/تراس های بارانی) - به دام انداختن مشکل آب باران
* `B` [پلکان بازگشتی] (src/algorithms/uncategorized/recursive-staircase) - تعداد راه‌های رسیدن به بالا را بشمارید
* `A` [حداکثر زیرآرایه] (src/algorithms/sets/maximum-subray)
* `A` [مسئله فروشنده مسافر] (src/algorithms/graph/travelling-salesman) - کوتاه ترین مسیر ممکن که از هر شهر بازدید می کند و به شهر مبدأ باز می گردد.
* 'A' [تبدیل فوریه گسسته] (src/algorithms/math/fourier-transform) - یک تابع زمان (یک سیگنال) را به فرکانس‌هایی که آن را تشکیل می‌دهند تجزیه می‌کند.
* ** حریص** - بهترین گزینه را در زمان کنونی انتخاب کنید، بدون هیچ توجهی به آینده
* `B` [بازی پرش] (src/الگوریتم‌ها/ دسته‌بندی نشده/بازی پرش)
* `A` [مسئله کوله پشتی بدون محدودیت] (src/algorithms/sets/knapsack-problem)
* `A` [الگوریتم Dijkstra] (src/algorithms/graph/dijkstra) - یافتن کوتاهترین مسیر برای همه رئوس نمودار
* `A` [الگوریتم Prim] (src/algorithms/graph/prim) - یافتن حداقل درخت پوشا (MST) برای نمودار وزنی بدون جهت
* `A` [الگوریتم کروسکال] (src/algorithms/graph/kruskal) - یافتن حداقل درخت پوشا (MST) برای نمودار وزنی بدون جهت
* **تقسیم و تسخیر** - مسئله را به قسمت های کوچکتر تقسیم کنید و سپس آن قسمت ها را حل کنید
* `B` [جستجوی باینری] (src/algorithms/search/binary-search)
* `B` [برج هانوی] (src/الگوریتم‌ها/دسته‌بندی نشده/هانوی-برج)
* 'B' [مثلث پاسکال] (src/algorithms/math/pascal-triangle)
* 'B' [الگوریتم اقلیدسی] (src/algorithms/math/euclidean-algorithm) - محاسبه بزرگترین مقسوم علیه مشترک (GCD)
* `B` [Merge Sort] (src/algorithms/sorting/merge-sort)
* «B» [مرتب‌سازی سریع] (src/الگوریتم‌ها/مرتب‌سازی/مرتب‌سازی سریع)
* `B` [جستجوی اول عمق درخت] (src/algorithms/tree/depth-first-search) (DFS)
* `B` [عمق نمودار-F
irst Search](src/algorithms/graph/depth-first-search) (DFS)
* `B` [ماتریس] (src/الگوریتم ها/ریاضی/ماتریس) - تولید و پیمایش ماتریس های اشکال مختلف
* `B` [بازی پرش] (src/الگوریتم‌ها/ دسته‌بندی نشده/بازی پرش)
* `B` [تقویت سریع] (src/الگوریتم‌ها/ریاضی/تغذیه سریع)
* `B` [بهترین زمان برای خرید سهام] (src/الگوریتم‌ها/دسته‌بندی نشده/بهترین زمان برای خرید-فروش- سهام) - تقسیم و غلبه و نمونه‌هایی با یک پاس
* «A» [جایگشت‌ها] (src/الگوریتم‌ها/مجموعه‌ها/جایگشت‌ها) (با و بدون تکرار)
* `A` [ترکیب ها] (src/الگوریتم ها/مجموعه ها/ترکیبات) (با و بدون تکرار)
* `A` [حداکثر زیرآرایه] (src/algorithms/sets/maximum-subray)
* **برنامه نویسی پویا** - ایجاد راه حل با استفاده از راه حل های فرعی که قبلاً پیدا شده بود
* 'B' [شماره فیبوناچی] (src/الگوریتم ها/ریاضی/فیبوناچی)
* `B` [بازی پرش] (src/الگوریتم‌ها/ دسته‌بندی نشده/بازی پرش)
* `B` [مسیرهای منحصر به فرد] (src/algorithms/uncategorized/unique-paths)
* `B` [تراس های بارانی] (src/الگوریتم ها/ دسته بندی نشده/تراس های بارانی) - به دام انداختن مشکل آب باران
* `B` [پلکان بازگشتی] (src/algorithms/uncategorized/recursive-staircase) - تعداد راه‌های رسیدن به بالا را بشمارید
* `B` [Seam Carving] (src/algorithms/image-processing/seam-carving) - الگوریتم تغییر اندازه تصویر آگاه از محتوا
* `A` [فاصله Levenshtein] (src/algorithms/string/levenshtein-distance) - حداقل فاصله ویرایش بین دو دنباله
* `A` [طولانی ترین دنباله متداول] (src/الگوریتم ها/مجموعه ها/طولانی ترین-متداول-زیر دنباله) (LCS)
* `A` [طولانی ترین زیر رشته مشترک] (src/algorithms/string/longest-common-substring)
* `A` [طولانی‌ترین دنباله افزایش‌دهنده] (src/الگوریتم‌ها/مجموعه‌ها/طولانی‌ترین-افزاینده-زیر دنباله)
* `A` [کوتاه‌ترین سوپرست متداول] (src/الگوریتم‌ها/مجموعه‌ها/کوتاه‌ترین سوپرتوالی مشترک)
* `A` [0/1 مشکل کوله پشتی] (src/algorithms/sets/knapsack-problem)
* 'A' [پارتیشن عدد صحیح] (src/algorithms/math/integer-partition)
* `A` [حداکثر زیرآرایه] (src/algorithms/sets/maximum-subray)
* `A` [الگوریتم بلمن-فورد] (src/algorithms/graph/bellman-ford) - یافتن کوتاه ترین مسیر برای همه رئوس نمودار
* `A` [الگوریتم فلوید-وارشال] (src/algorithms/graph/floyd-warshall) - کوتاه ترین مسیرها را بین همه جفت رئوس پیدا کنید
* «A» [تطبیق عبارت منظم] (src/algorithms/string/regular-expression-matching)
* **Backtracking** - مشابه نیروی بی رحم، سعی کنید همه راه حل های ممکن را ایجاد کنید، اما هر بار که راه حل بعدی را ایجاد می کنید، آزمایش می کنید
اگر همه شرایط را برآورده کند و تنها پس از آن به تولید راه حل های بعدی ادامه دهید. در غیر این صورت، به عقب برگردید، و ادامه دهید
مسیرهای مختلف برای یافتن راه حل به طور معمول از پیمایش DFS فضای حالت استفاده می شود.
* `B` [بازی پرش] (src/الگوریتم‌ها/ دسته‌بندی نشده/بازی پرش)
* `B` [مسیرهای منحصر به فرد] (src/algorithms/uncategorized/unique-paths)
* «B» [مجموعه توان] (src/الگوریتم‌ها/ست‌ها/مجموعه قدرت) - همه زیر مجموعه‌های یک مجموعه
* `A` [چرخه همیلتونی] (src/algorithms/graph/Hamiltonian-cycle) - از هر رأس دقیقاً یک بار بازدید کنید
* `A` [مسئله N-Queens] (src/algorithms/uncategorized/n-queens)
* «A» [تور شوالیه] (src/الگوریتم‌ها/دسته‌بندی نشده/شوالیه-تور)
* `A` [ترکیب جمع] (src/الگوریتم‌ها/مجموعه‌ها/ترکیب-جمع) - همه ترکیب‌هایی را پیدا کنید که مجموع خاصی را تشکیل می‌دهند.
* **شاخه و محدود ** - کم هزینه ترین راه حل یافت شده در هر مرحله از عقب نشینی را به خاطر بسپارید
جستجو کنید، و از هزینه کم‌هزینه‌ترین راه‌حلی که تاکنون پیدا شده است، به عنوان یک کران پایین‌تر در هزینه استفاده کنید
یک راه حل کم هزینه برای مشکل، به منظور کنار گذاشتن راه حل های جزئی با هزینه های بیشتر از این
کم هزینه ترین راه حل پیدا شده تا کنون به طور معمول پیمایش BFS در ترکیب با پیمایش DFS فضای حالت
درخت استفاده می شود
## نحوه استفاده از این مخزن
**همه وابستگی ها را نصب کنید**
```
npm نصب کنید
```
**اجرای ESLint**
ممکن است بخواهید آن را اجرا کنید تا کیفیت کد را بررسی کنید.
```
npm اجرا lint
```
**اجرای تمام تست ها**
```
تست npm
```
**آزمون ها را با نام اجرا کنید**
```
تست npm -- 'LinkedList'
```
**عیب یابی**
اگر پرده زدن یا آزمایش ناموفق بود، سعی کنید پوشه «node_modules» را حذف کنید و بسته‌های npm را دوباره نصب کنید:
```
rm -rf ./node_modules
npm من
```
همچنین مطمئن شوید که از نسخه صحیح Node (`>=14.16.0`) استفاده می کنید. اگر از [nvm](https://github.com/nvm-sh/nvm) برای مدیریت نسخه Node استفاده می‌کنید، می‌توانید «nvm use» را از پوشه اصلی پروژه اجرا کنید و نسخه صحیح انتخاب خواهد شد.
**زمین بازی**
می‌توانید با ساختارهای داده و الگوریتم‌ها در فایل «./src/playground/playground.js» بازی کنید و بنویسید
آن را در «./src/playground/__test__/playground.test.js» آزمایش می کند.
سپس به سادگی دستور زیر را اجرا کنید تا بررسی کنید که آیا کد زمین بازی شما مطابق انتظار کار می کند یا خیر:
```
تست npm -- "زمین بازی"
```
## اطلاعات مفید
### منابع
[▶ ساختارها و الگوریتم‌های داده در YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)
### نماد بزرگ O
*نشانگذاری Big O* برای طبقه بندی الگوریتم ها بر اساس چگونگی رشد زمان یا فضای مورد نیاز آنها با افزایش اندازه ورودی استفاده می شود.
در نمودار زیر می توانید رایج ترین ترتیبات رشد الگوریتم های مشخص شده را بیابید
در نماد O بزرگ.
![نگارهای بزرگ O](./assets/big-o-graph.png)
منبع: [Big O Cheat Sheet](http://bigocheatsheet.com/).
در زیر لیستی از برخی از پرکاربردترین نمادهای Big O و مقایسه عملکرد آنها در برابر اندازه های مختلف داده های ورودی آورده شده است.
| Big O Notation | نوع | محاسبات برای 10 عنصر | محاسبات برای 100 عنصر | محاسبات برای 1000 عنصر |
| -------------- | ----------- | ---------------------------- | ----------------------------- | ------------------------------- |
| **O(1)** | ثابت | 1 | 1 | 1 |
| **O(log N)** | لگاریتمی | 3 | 6 | 9 |
| **O(N)** | خطی | 10 | 100 | 1000 |
| **O(N log N)** | 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 |
### پیچیدگی عملیات ساختار داده
| ساختار داده | دسترسی | جستجو | درج | حذف | نظرات |
| ----------------------- | :-------: | :-------: | :-------: | :-------: | :-------- |
| **آرایه** | 1 | n | n | n | |
| **پشته** | n | n | 1 | 1 | |
| **صف ** | n | n | 1 | 1 | |
| **فهرست پیوند شده** | n | n | 1 | n | |
| **جدول هش** | - | n | n | n | در صورت عملکرد هش کامل هزینه ها O(1) |
| **درخت جستجوی باینری** | n | n | n | n | در صورت متعادل بودن هزینه های درخت O(log(n)) |
| **B-Tree** | log(n) | log(n) | log(n) | log(n) | |
| **درخت قرمز-سیاه** | log(n) | log(n) | log(n) | log(n) | |
| **AVL Tree** | log(n) | log(n) | log(n) | log(n) | |
| **فیلتر بلوم** | - | 1 | 1 | - | در حین جستجو، نتایج مثبت کاذب امکان پذیر است |
### پیچیدگی الگوریتم های مرتب سازی آرایه
| نام | بهترین | میانگین | بدترین | حافظه | پایدار | نظرات |
| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- |
| **مرتب سازی حبابی** | n | n<sup>2</sup> | n<sup>2</sup> | 1 | بله | |
| **مرتب سازی درج ** | n | n<sup>2</sup> | n<sup>2</sup> | 1 | بله | |
| **مرتب سازی انتخابی** | n<sup>2</sup> | n<sup>2</sup> | n<sup>2</sup> | 1 | نه | |
| **مرتب سازی پشته** | n&nbsp;log(n) | n&nbsp;log(n) | n&nbsp;log(n) | 1 | نه | |
| **مرتب سازی ادغام ** | n&nbsp;log(n) | n&nbsp;log(n) | n&nbsp;log(n) | n | بله | |
| **مرتب سازی سریع** | n&nbsp;log(n) | n&nbsp;log(n) | n<sup>2</sup> | log(n) | نه | مرتب سازی سریع معمولاً در محل با فضای پشته O(log(n)) انجام می شود
| **مرتب سازی پوسته** | n&nbsp;log(n) | به دنباله شکاف بستگی دارد | n&nbsp;(log(n))<sup>2</sup> | 1 | نه | |
| **شمارش مرتب سازی** | n + r | n + r | n + r | n + r | بله | r - بزرگترین عدد در آرایه |
| **مرتب سازی ریشه** | n * k | n * k | n * k | n + k | بله | k - طول طولانی ترین کلید |
## حامیان پروژه
> می توانید از طریق ❤️️ [GitHub](https://github.com/sponsors/trekhleb) یا ❤️️ [Patreon] (https://www.patreon.com/trekhleb) از این پروژه حمایت کنید.
[کسانی که از این پروژه حمایت می کنند](https://github.com/trekhleb/javascript-algorithms/blob/master/BACKERS.md) `∑ = 0`
> چند [پروژه](https://trekhleb.dev/projects/) و [مقاله](https://trekhleb.dev/blog/) دیگر درباره جاوا اسکریپت و الگوریتم ها در [trekhleb.dev](https:/ /trekhleb.dev)

View File

@ -0,0 +1,27 @@
# Búsqueda binaria
_Lea esto en otros idiomas:_
[English](README.md)
[Português brasileiro](README.pt-BR.md).
En informática, la búsqueda binaria, también conocida como búsqueda de medio intervalo
búsqueda, búsqueda logarítmica, o corte binario, es un algoritmo de búsqueda
que encuentra la posición de un valor objetivo dentro de una matriz
ordenada. La búsqueda binaria compara el valor objetivo con el elemento central
de la matriz; si son desiguales, se elimina la mitad en la que
la mitad en la que no puede estar el objetivo se elimina y la búsqueda continúa
en la mitad restante hasta que tenga éxito. Si la búsqueda
termina con la mitad restante vacía, el objetivo no está
en la matriz.
![Búsqueda binaria](https://upload.wikimedia.org/wikipedia/commons/8/83/Binary_Search_Depiction.svg)
## Complejidad
**Complejidad de tiempo**: `O(log(n))` - ya que dividimos el área de búsqueda en dos para cada
siguiente iteración.
## Referencias
- [Wikipedia](https://en.wikipedia.org/wiki/Binary_search_algorithm)
- [YouTube](https://www.youtube.com/watch?v=P3YID7liBug&index=29&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)

View File

@ -2,6 +2,7 @@
_Read this in other languages:_ _Read this in other languages:_
[Português brasileiro](README.pt-BR.md). [Português brasileiro](README.pt-BR.md).
[Español](README.es-ES.md).
In computer science, binary search, also known as half-interval In computer science, binary search, also known as half-interval
search, logarithmic search, or binary chop, is a search algorithm search, logarithmic search, or binary chop, is a search algorithm

View File

@ -2,6 +2,7 @@
_Leia isso em outras línguas:_ _Leia isso em outras línguas:_
[english](README.md). [english](README.md).
[Español](README.es-ES.md).
Em ciência da computação, busca binária, também conhecida como busca de meio-intervalo, busca logarítmica ou corte binário, é um algoritmo de pesquisa Em ciência da computação, busca binária, também conhecida como busca de meio-intervalo, busca logarítmica ou corte binário, é um algoritmo de pesquisa
que encontra a posição de um elemento alvo dentro de um que encontra a posição de um elemento alvo dentro de um

View File

@ -7,9 +7,9 @@ _Lee este artículo en otros idiomas:_
[_Português_](README.pt-BR.md) [_Português_](README.pt-BR.md)
[_English_](README.md) [_English_](README.md)
En ciencias de la computaciòn una **lista enlazada** es una coleccion linear En ciencias de la computación una **lista enlazada** es una colección lineal
de elementos de datos, en los cuales el orden linear no es dado por de elementos, en los cuales el orden lineal no es dado por
su posciòn fisica en memoria. En cambio, cada su posición física en memoria. En cambio, cada
elemento señala al siguiente. Es una estructura de datos elemento señala al siguiente. Es una estructura de datos
que consiste en un grupo de nodos los cuales juntos representan que consiste en un grupo de nodos los cuales juntos representan
una secuencia. En su forma más sencilla, cada nodo está una secuencia. En su forma más sencilla, cada nodo está
@ -19,10 +19,10 @@ permite la inserción o eliminación de elementos
desde cualquier posición en la secuencia durante la iteración. desde cualquier posición en la secuencia durante la iteración.
Las variantes más complejas agregan enlaces adicionales, permitiendo Las variantes más complejas agregan enlaces adicionales, permitiendo
una eficiente inserción o eliminación desde referencias arbitrarias una eficiente inserción o eliminación desde referencias arbitrarias
del elemento. Una desventaja de las listas lazadas es que el tiempo de del elemento. Una desventaja de las listas enlazadas es que el tiempo de
acceso es lineal (y difícil de canalizar). Un acceso acceso es lineal (y difícil de canalizar). Un acceso
más rápido, como un acceso aleatorio, no es factible. Los arreglos más rápido, como un acceso aleatorio, no es factible. Los arreglos
tienen una mejor locazion en caché comparados con las listas lazadas. tienen una mejor localización en caché comparados con las listas enlazadas.
![Linked List](./images/linked-list.jpeg) ![Linked List](./images/linked-list.jpeg)
@ -112,7 +112,7 @@ Remove(head, value)
end Remove end Remove
``` ```
### Atrevesar ### Atravesar
```text ```text
Traverse(head) Traverse(head)

View File

@ -10,8 +10,8 @@
Додаткова операція для читання головного елемента (peek) дає доступ Додаткова операція для читання головного елемента (peek) дає доступ
до останнього елементу стека без зміни самого стека. до останнього елементу стека без зміни самого стека.
Найчастіше принцип роботи стека порівнюють зі чаркою тарілок: щоб узяти другу Найчастіше принцип роботи стека порівнюють із стопкою тарілок: щоб узяти другу
зверху потрібно зняти верхню. зверху потрібно спочатку зняти верхню.
Ілюстрація роботи зі стеком. Ілюстрація роботи зі стеком.