diff --git a/README.fr-FR.md b/README.fr-FR.md index a979253a..c1f986b0 100644 --- a/README.fr-FR.md +++ b/README.fr-FR.md @@ -3,9 +3,12 @@ [![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) -Ce dépôt contient des exemples d'implémentation en JavaScript de plusieurs algorithmes et structures de données populaires. +Ce dépôt contient des exemples d'implémentation en JavaScript de plusieurs +algorithmes et structures de données populaires. -Chaque algorithme et structure de donnée possède son propre README contenant les explications détaillées et liens (incluant aussi des vidéos Youtube) pour complément d'informations. +Chaque algorithme et structure de donnée possède son propre README contenant +les explications détaillées et liens (incluant aussi des vidéos Youtube) pour +complément d'informations. _Lisez ceci dans d'autres langues:_ [_English_](https://github.com/trekhleb/javascript-algorithms/), @@ -14,11 +17,18 @@ _Lisez ceci dans d'autres langues:_ [_한국어_](README.ko-KR.md), [_Polski_](README.pl-PL.md) -> Nous écrivons actuellement un livre qui expliquera clairement, en détail, les principaux algorithmes. Si vous souhaitez être notifié lorsque le livre “JavaScript Algorithms” paraîtra, [cliquez ici](https://upscri.be/402324/). +> Nous écrivons actuellement un livre qui expliquera clairement, en détail, les +principaux algorithmes. Si vous souhaitez être notifié lorsque le livre +“JavaScript Algorithms” paraîtra, [cliquez ici](https://upscri.be/402324/). ## Data Structures -Une structure de données est une manière spéciale d'organiser et de stocker des données dans un ordinateur de manière à ce que l'on puisse accéder à cette information et la modifier de manière efficiente. De manière plus spécifique, une structure de données est un ensemble composé d'une collection de valeurs, des relations entre ces valeurs ainsi que d'un ensemble de fonctions ou d'opérations pouvant être appliquées sur ces données. +Une structure de données est une manière spéciale d'organiser et de stocker +des données dans un ordinateur de manière à ce que l'on puisse accéder à +cette information et la modifier de manière efficiente. De manière plus +spécifique, une structure de données est un ensemble composé d'une collection +de valeurs, des relations entre ces valeurs ainsi que d'un ensemble de +fonctions ou d'opérations pouvant être appliquées sur ces données. `B` - Débutant, `A` - Avancé @@ -42,7 +52,9 @@ Une structure de données est une manière spéciale d'organiser et de stocker d ## Algorithmes -Un algorithme est une démarche non ambigüe expliquant comment résoudre une classe de problèmes. C'est un ensemble de règles décrivant de manière précise une séquence d'opérations. +Un algorithme est une démarche non ambigüe expliquant comment résoudre une +classe de problèmes. C'est un ensemble de règles décrivant de manière précise +une séquence d'opérations. `B` - Débutant, `A` - Avancé @@ -124,8 +136,10 @@ Un algorithme est une démarche non ambigüe expliquant comment résoudre une cl ### Algorithmes par Paradigme -Un paradigme algorithmique est une méthode générique ou une approche qui sous-tend la conception d'une classe -d'algorithmes. C'est une abstraction au-dessus de la notion d'algorithme, tout comme l'algorithme est une abstraction supérieure à un programme informatique. +Un paradigme algorithmique est une méthode générique ou une approche qui +sous-tend la conception d'une classe d'algorithmes. C'est une abstraction +au-dessus de la notion d'algorithme, tout comme l'algorithme est une abstraction +supérieure à un programme informatique. * **Force Brute** - cherche parmi toutes les possibilités et retient la meilleure * `B` [Recherche Linéaire](src/algorithms/search/linear-search) @@ -201,9 +215,12 @@ npm test -- 'LinkedList' **Tests personnalisés** -Vous pouvez manipuler les structures de données et algorithmes présents dans ce dépôt avec le fichier `./src/playground/playground.js` et écrire vos propres tests dans file `./src/playground/__test__/playground.test.js`. +Vous pouvez manipuler les structures de données et algorithmes présents dans ce +dépôt avec le fichier `./src/playground/playground.js` et écrire vos propres +tests dans file `./src/playground/__test__/playground.test.js`. -Vous pourrez alors simplement exécuter la commande suivante afin de tester si votre code fonctionne comme escompté +Vous pourrez alors simplement exécuter la commande suivante afin de tester si +votre code fonctionne comme escompté ``` npm test -- 'playground' @@ -223,42 +240,43 @@ Comparaison de la performance d'algorithmes en notation Grand O. Source: [Big O Cheat Sheet](http://bigocheatsheet.com/). -Voici la liste de certaines des notations Grand O les plus utilisées et de leurs comparaisons de performance suivant différentes tailles pour les données d'entrée. +Voici la liste de certaines des notations Grand O les plus utilisées et de leurs +comparaisons de performance suivant différentes tailles pour les données d'entrée. | Notation Grand O | Opérations pour 10 éléments | Opérations pour 100 éléments | Opérations pour 1000 éléments | -| -------------- | ---------------------------- | ----------------------------- | ------------------------------- | -| **O(1)** | 1 | 1 | 1 | -| **O(log N)** | 3 | 6 | 9 | -| **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | -| **O(N^2)** | 100 | 10000 | 1000000 | -| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | -| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | +| ---------------- | ---------------------------- | ----------------------------- | ------------------------------- | +| **O(1)** | 1 | 1 | 1 | +| **O(log N)** | 3 | 6 | 9 | +| **O(N)** | 10 | 100 | 1000 | +| **O(N log N)** | 30 | 600 | 9000 | +| **O(N^2)** | 100 | 10000 | 1000000 | +| **O(2^N)** | 1024 | 1.26e+29 | 1.07e+301 | +| **O(N!)** | 3628800 | 9.3e+157 | 4.02e+2567 | ### Complexité des Opérations suivant les Structures de Données | Structure de donnée | Accès | Recherche | Insertion | Suppression | Commentaires | -| ------------------------------- | :-------: | :-------: | :-------: | :----------: | :-------- | -| **Liste** | 1 | n | n | n | | -| **Pile** | n | n | 1 | 1 | | -| **Queue** | n | n | 1 | 1 | | -| **Liste Liée** | n | n | 1 | 1 | | +| ------------------------------- | :-------: | :-------: | :-------: | :----------: | :------------ | +| **Liste** | 1 | n | n | n | | +| **Pile** | n | n | 1 | 1 | | +| **Queue** | n | n | 1 | 1 | | +| **Liste Liée** | n | n | 1 | 1 | | | **Table de Hachage** | - | n | n | n | Dans le cas des fonctions de hachage parfaites, les couts seraient de O(1) | | **Arbre de Recherche Binaire** | n | n | n | n | Dans le cas des arbre équilibrés, les coûts seraient de O(log(n)) | -| **Arbre B** | log(n) | log(n) | log(n) | log(n) | | -| **Arbre Red-Black** | log(n) | log(n) | log(n) | log(n) | | -| **Arbre AVL** | log(n) | log(n) | log(n) | log(n) | | +| **Arbre B** | log(n) | log(n) | log(n) | log(n) | | +| **Arbre Red-Black** | log(n) | log(n) | log(n) | log(n) | | +| **Arbre AVL** | log(n) | log(n) | log(n) | log(n) | | | **Filtre de Bloom** | - | 1 | 1 | - | Les faux positifs sont possibles lors de la recherche | ### Complexité des Algorithmes de Tri de Liste | Nom | Meilleur | Moyenne | Pire | Mémoire | Stable | Commentaires | -| ----------------------- | :-------------: | :--------------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Tri Bulle** | n | n2 | n2 | 1 | Oui | | -| **Tri Insertion** | n | n2 | n2 | 1 | Oui | | -| **Tri Sélection** | n2 | n2 | n2 | 1 | Non | | -| **Tri par Tas** | n log(n) | n log(n) | n log(n) | 1 | Non | | -| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Oui | | +| ----------------------- | :-------------: | :--------------------: | :-----------------: | :-------: | :-------: | :------------ | +| **Tri Bulle** | n | n2 | n2 | 1 | Oui | | +| **Tri Insertion** | n | n2 | n2 | 1 | Oui | | +| **Tri Sélection** | n2 | n2 | n2 | 1 | Non | | +| **Tri par Tas** | n log(n) | n log(n) | n log(n) | 1 | Non | | +| **Merge sort** | n log(n) | n log(n) | n log(n) | n | Oui | | | **Tri Rapide** | n log(n) | n log(n) | n2 | log(n) | Non | le Tri Rapide est généralement effectué *in-place* avec une pile de taille O(log(n)) | | **Tri Shell** | n log(n) | dépend du gap séquence | n (log(n))2 | 1 | Non | | | **Tri Comptage** | n + r | n + r | n + r | n + r | Oui | r - le plus grand nombre dans la liste | diff --git a/README.ko-KR.md b/README.ko-KR.md index fd5c48ff..ab281a53 100644 --- a/README.ko-KR.md +++ b/README.ko-KR.md @@ -12,7 +12,8 @@ _Read this in other languages:_ [_English_](https://github.com/trekhleb/javascript-algorithms/), [_简体中文_](README.zh-CN.md), [_繁體中文_](README.zh-TW.md), -[_Polski_](README.pl-PL.md) +[_Polski_](README.pl-PL.md), +[_Français_](README.fr-FR.md) > 우리는 주요 알고리즘에 대해 더 자세한 설명을 담은 책을 제작 중입니다. 만약 “JavaScript Algorithms” 책이 언제 출시되는지 알고 싶다면 @@ -258,14 +259,14 @@ Source: [Big O Cheat Sheet](http://bigocheatsheet.com/). ### 정렬 알고리즘 복잡도 -| 이름 | 최적 | 평균 | 최악 | 메모리 | 동일값 순서유지 | 비고 | -| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **거품 정렬** | n | n2 | n2 | 1 | Yes | | -| **삽입 정렬** | n | n2 | n2 | 1 | Yes | | -| **선택 정렬** | n2 | n2 | n2 | 1 | No | | -| **힙 정렬** | n log(n) | n log(n) | n log(n) | 1 | No | | -| **병합 정렬** | n log(n) | n log(n) | n log(n) | n | Yes | | -| **퀵 정렬** | n log(n) | n log(n) | n2 | log(n) | No | 퀵 정렬은 보통 제자리(in-place)로 O(log(n)) 스택공간으로 수행됩니다. | +| 이름 | 최적 | 평균 | 최악 | 메모리 | 동일값 순서유지 | 비고 | +| --------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :--------------: | :-------- | +| **거품 정렬** | n | n2 | n2 | 1 | Yes | | +| **삽입 정렬** | n | n2 | n2 | 1 | Yes | | +| **선택 정렬** | n2 | n2 | n2 | 1 | No | | +| **힙 정렬** | n log(n) | n log(n) | n log(n) | 1 | No | | +| **병합 정렬** | n log(n) | n log(n) | n log(n) | n | Yes | | +| **퀵 정렬** | n log(n) | n log(n) | n2 | log(n) | No | 퀵 정렬은 보통 제자리(in-place)로 O(log(n)) 스택공간으로 수행됩니다. | | **셸 정렬** | n log(n) | 간격 순서에 영향을 받습니다. | n (log(n))2 | 1 | No | | -| **계수 정렬** | n + r | n + r | n + r | n + r | Yes | r - 배열내 가장 큰 수 | -| **기수 정렬** | n * k | n * k | n * k | n + k | Yes | k - 키값의 최대 길이 | +| **계수 정렬** | n + r | n + r | n + r | n + r | Yes | r - 배열내 가장 큰 수 | +| **기수 정렬** | n * k | n * k | n * k | n + k | Yes | k - 키값의 최대 길이 | diff --git a/README.pl-PL.md b/README.pl-PL.md index 3694dba1..88078e8c 100644 --- a/README.pl-PL.md +++ b/README.pl-PL.md @@ -14,7 +14,8 @@ _Read this in other languages:_ [_English_](https://github.com/trekhleb/javascript-algorithms/) [_简体中文_](README.zh-CN.md), [_繁體中文_](README.zh-TW.md), -[_한국어_](README.ko-KR.md) +[_한국어_](README.ko-KR.md), +[_Français_](README.fr-FR.md) > Jesteśmy w trakcie pisania książki, która w jasny i specyficzny sposób, wyjaśni główne algorytmy. Jeżeli chcesz dostać powiadomienie o tym kiedy @@ -245,7 +246,7 @@ Kolejność wzrastania algorytmów według Big O notacji. Poniżej umieszczamy listę najbardziej używanych Big O notacji i ich porównania wydajności do róznych rozmiarów z wprowadzonych danych. -| Big O notacja | Obliczenia na 10 elementów | Obliczenia na 100 elementów | Obliczenia na 1000 elementów | +| Big O notacja | Obliczenia na 10 elementów | Obliczenia na 100 elementów | Obliczenia na 1000 elementów | | -------------- | ---------------------------- | ----------------------------- | ------------------------------- | | **O(1)** | 1 | 1 | 1 | | **O(log N)** | 3 | 6 | 9 | @@ -257,29 +258,29 @@ Poniżej umieszczamy listę najbardziej używanych Big O notacji i ich porównan ### Złożoność operacji struktury danych -| Struktura Danych | Dostęp | Szukaj | Umieszczanie | Usuwanie | Komentarze | -| ------------------------------- | :-------: | :-------: | :-------: | :-------: | :-------- | -| **Szereg** | 1 | n | n | n | | -| **Sterta** | n | n | 1 | 1 | | -| **Kolejka** | n | n | 1 | 1 | | -| **Lista Powiązana** | n | n | 1 | 1 | | -| **Tablica funkcji mieszanej** | - | n | n | n | W wypadku idealnej funkcji skrótu koszt mógłby sie równać O(1) | -| **Binarne Drzewo Poszukiwań** | n | n | n | n | W przypadku zrównoważonych kosztów drzew byłoby O(log(n)) | -| **B-Drzewo** | log(n) | log(n) | log(n) | log(n) | | -| **Drzewa czerwono-czarne** | log(n) | log(n) | log(n) | log(n) | | -| **AVL Drzewo** | log(n) | log(n) | log(n) | log(n) | | -| **Filtr Blooma** | - | 1 | 1 | - | Fałszywe dotatnie są możliwe podczas wyszukiwania | +| Struktura Danych | Dostęp | Szukaj | Umieszczanie | Usuwanie | Komentarze | +| ------------------------------- | :-------: | :-------: | :----------: | :-------: | :----------- | +| **Szereg** | 1 | n | n | n | | +| **Sterta** | n | n | 1 | 1 | | +| **Kolejka** | n | n | 1 | 1 | | +| **Lista Powiązana** | n | n | 1 | 1 | | +| **Tablica funkcji mieszanej** | - | n | n | n | W wypadku idealnej funkcji skrótu koszt mógłby sie równać O(1) | +| **Binarne Drzewo Poszukiwań** | n | n | n | n | W przypadku zrównoważonych kosztów drzew byłoby O(log(n)) | +| **B-Drzewo** | log(n) | log(n) | log(n) | log(n) | | +| **Drzewa czerwono-czarne** | log(n) | log(n) | log(n) | log(n) | | +| **AVL Drzewo** | log(n) | log(n) | log(n) | log(n) | | +| **Filtr Blooma** | - | 1 | 1 | - | Fałszywe dotatnie są możliwe podczas wyszukiwania | ### Sortowanie Tablic Złożoności Algorytmów -| Nazwa | Najlepszy | Średni | Najgorszy | Pamięć | Stabilność | Komentarze | -| ----------------------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :-------: | :-------- | -| **Sortowanie bąbelkowe** | n | n2 | n2 | 1 | Yes | | -| **Sortowanie przez wstawianie** | n | n2 | n2 | 1 | Yes | | -| **Sortowanie przez wybieranie** | n2 | n2 | n2 | 1 | No | | -| **Sortowanie przez kopcowanie** | n log(n) | n log(n) | n log(n) | 1 | No | | -| **Sortowanie przez scalanie** | n log(n) | n log(n) | n log(n) | n | Yes | | -| **Szybkie sortowanie** | n log(n) | n log(n) | n2 | log(n) | No | Szybkie sortowanie jest zazwyczaj robione w miejsce O(log(n)) stosu przestrzeni | +| Nazwa | Najlepszy | Średni | Najgorszy | Pamięć | Stabilność | Komentarze | +| ----------------------------------- | :-------------: | :-----------------: | :-----------------: | :-------: | :---------: | :---------- | +| **Sortowanie bąbelkowe** | n | n2 | n2 | 1 | Yes | | +| **Sortowanie przez wstawianie** | n | n2 | n2 | 1 | Yes | | +| **Sortowanie przez wybieranie** | n2 | n2 | n2 | 1 | No | | +| **Sortowanie przez kopcowanie** | n log(n) | n log(n) | n log(n) | 1 | No | | +| **Sortowanie przez scalanie** | n log(n) | n log(n) | n log(n) | n | Yes | | +| **Szybkie sortowanie** | n log(n) | n log(n) | n2 | log(n) | No | Szybkie sortowanie jest zazwyczaj robione w miejsce O(log(n)) stosu przestrzeni | | **Sortowanie Shella** | n log(n) | zależy od luki w układzie | n (log(n))2 | 1 | No | | -| **Sortowanie przez zliczanie** | n + r | n + r | n + r | n + r | Yes | r - największy numer w tablicy| -| **Sortowanie Radix** | n * k | n * k | n * k | n + k | Yes | k -długość najdłuższego klucza | +| **Sortowanie przez zliczanie** | n + r | n + r | n + r | n + r | Yes | r - największy numer w tablicy| +| **Sortowanie Radix** | n * k | n * k | n * k | n + k | Yes | k -długość najdłuższego klucza | diff --git a/README.zh-CN.md b/README.zh-CN.md index 583f6b71..d3f3a362 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -11,7 +11,8 @@ _Read this in other languages:_ [_English_](https://github.com/trekhleb/javascript-algorithms/), [_繁體中文_](README.zh-TW.md), [_한국어_](README.ko-KR.md), -[_Polski_](README.pl-PL.md) +[_Polski_](README.pl-PL.md), +[_Français_](README.fr-FR.md) > We’re writing a book that will clearly explain, in detail, the main algorithms. If you’d like to be notified when the “JavaScript Algorithms” book @@ -184,12 +185,12 @@ npm test -- 'playground' 以下是一些最常用的 大O标记法 列表以及它们与不同大小输入数据的性能比较。 -| 大O标记法 | 计算10个元素 | 计算100个元素 | 计算1000个元素 | +| 大O标记法 | 计算10个元素 | 计算100个元素 | 计算1000个元素 | | -------------- | ---------------------------- | ----------------------------- | ------------------------------- | | **O(1)** | 1 | 1 | 1 | | **O(log N)** | 3 | 6 | 9 | | **O(N)** | 10 | 100 | 1000 | -| **O(N log N)** | 30 | 600 | 9000 | +| **O(N 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 | diff --git a/README.zh-TW.md b/README.zh-TW.md index 65a24c39..49c28566 100644 --- a/README.zh-TW.md +++ b/README.zh-TW.md @@ -10,7 +10,8 @@ _Read this in other languages:_ [_English_](https://github.com/trekhleb/javascript-algorithms/), [_简体中文_](README.zh-CN.md), [_한국어_](README.ko-KR.md), -[_Polski_](README.pl-PL.md) +[_Polski_](README.pl-PL.md), +[_Français_](README.fr-FR.md) > We’re writing a book that will clearly explain, in detail, the main algorithms. If you’d like to be notified when the “JavaScript Algorithms” book @@ -180,7 +181,7 @@ npm test -- 'playground' 下列列出幾個常用的 Big O 標記以及其不同大小資料量輸入後的運算效能比較。 -| Big O 標記 | 10個資料量需花費的時間 | 100個資料量需花費的時間 | 1000個資料量需花費的時間 | +| Big O 標記 | 10個資料量需花費的時間 | 100個資料量需花費的時間 | 1000個資料量需花費的時間 | | -------------- | ---------------------------- | ----------------------------- | ------------------------------- | | **O(1)** | 1 | 1 | 1 | | **O(log N)** | 3 | 6 | 9 |