diff --git a/README.pe-PE.md b/README.pe-PE.md new file mode 100644 index 00000000..6ec8b246 --- /dev/null +++ b/README.pe-PE.md @@ -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` [الگوریتم Knuth–Morris–Pratt](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 | n2 | n2 | 1 | بله | | +| **مرتب سازی درج ** | n | n2 | n2 | 1 | بله | | +| **مرتب سازی انتخابی** | n2 | n2 | n2 | 1 | نه | | +| **مرتب سازی پشته** | n log(n) | n log(n) | n log(n) | 1 | نه | | +| **مرتب سازی ادغام ** | n log(n) | n log(n) | n log(n) | n | بله | | +| **مرتب سازی سریع** | n log(n) | n log(n) | n2 | log(n) | نه | مرتب سازی سریع معمولاً در محل با فضای پشته O(log(n)) انجام می شود +| **مرتب سازی پوسته** | n log(n) | به دنباله شکاف بستگی دارد | n (log(n))2 | 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) \ No newline at end of file