Dsa.js-data-structures-algorithms-javascript
Il s'agit des implémentations de codage du livre DSA.js et de la repo pour le paquet NPM. Dans ce dépôt, vous pouvez trouver l'implémentation d'algorithmes et...
Choisir une liste...

Structures de données et algorithmes en JavaScript
Il s'agit des implémentations de codage de laDSA.js booket la remise pour le paquet NPM.
Dans ce dépôt, vous pouvez trouver l'implémentation d'algorithmes et de structures de données dans JavaScript. Ce matériel peut être utilisé comme manuel de référence pour les développeurs, ou vous pouvez rafraîchir des sujets spécifiques avant une entrevue. En outre, vous pouvez trouver des idées pour résoudre les problèmes plus efficacement.

Sommaire
Installation
Vous pouvez cloner la repo ou installer le code à partir de NPM:
npm install dsa.js
puis vous pouvez l'importer dans vos programmes ou CLI
const { LinkedList, Queue, Stack } = require('dsa.js');
Pour une liste de toutes les structures et algorithmes de données disponibles,see index.js.
Caractéristiques
Les algorithmes sont une boîte à outils essentielle pour chaque programmeur.
Vous devrez penser aux algorithmes d'exécution lorsque vous devez trier les données, rechercher une valeur dans un ensemble de données volumineuses, transformer les données, tailler votre code à de nombreux utilisateurs, pour n'en nommer que quelques-uns. Les algorithmes sont juste l'étape que vous suivez pour résoudre un problème, tandis que les structures de données sont là où vous stockez les données pour la manipulation ultérieure. Les deux combinés créent des programmes.
Algorithmes + Structures de données = Programmes.
La plupart des langages de programmation et des bibliothèques fournissent en effet des implémentations pour les structures de données de base et les algorithmes. Cependant, pour utiliser correctement les structures de données, vous devez connaître les compromis pour choisir le meilleur outil pour le travail.
Ce matériel va vous apprendre à:
- Appliquer des stratégies pour aborder les questions d'algorithme. Ne plus jamais être coincé. Ace ces interviews !
- Construire des algorithmes efficaces. Apprenez à décomposer les problèmes en morceaux gérables.
- Améliorer vos compétences en résolution de problèmes et devenir un développeur bien arrondi en comprenant les concepts informatiques fondamentaux.
- Couverture des sujets essentiels, tels que le grand temps O, les structures de données, et les algorithmes à connaître. Implémenter 10+ structures de données à partir de zéro.
Ce qui est à l'intérieur
Tous les codes et explications sont disponibles sur cette demande. Vous pouvez creuser à travers les liens et les exemples de code de la (src folder). Cependant, les exemples de code en ligne ne sont pas élargis (en raison des limitations d'asciidoc de Github), mais vous pouvez suivre le chemin et voir l'implémentation.
Note: Si vous préférez consommer l'information de façon plus linéaire, alors lebook formatserait plus approprié pour vous.
Les sujets sont divisés en quatre grandes catégories, comme vous pouvez le voir ci-dessous:
*Algorithms Analysis
Les pépites de l'informatique sans tous les mombo-jumbo.(Cliquez pour agrandir)
Computer Science nuggets without all the mumbo-jumbo
Apprendre à calculer le temps d'exécution à partir d'exemples de code

Apprenez à comparer les algorithmes en utilisant la notation Big O.(Cliquez pour agrandir)
Learn how to compare algorithms using Big O notation.
Comparaison des algorithmes utilisant la notation Big O
Disons que vous voulez trouver les duplicatas sur un tableau. En utilisant la notation Big O, nous pouvons comparer différentes solutions qui résolvent le même problème mais a une différence massive dans le temps qu'il faut pour le faire.
8 exemples pour expliquer avec le code comment calculer la complexité du temps.(Cliquez pour agrandir)
8 examples to explain with code how to calculate time complexity
Les complexités temporelles les plus courantes
Graphique de complexité temporelle

(en milliers de dollars)Linear Data Structures
Comprendre les points forts des structures de données les plus courantes.(Cliquez pour agrandir)
Understand the ins and outs of the most common data structures
-
Arrays: Intégré dans la plupart des langues donc pas implémenté ici.Array Time complexity
-
Linked List: chaque noeud de données a un lien vers le suivant (et précédent). .CodeAutres Linked List Time Complexity
-
Queue: flux de données d'une manière "première sortie". .CodeAutres Queue Time Complexity
-
Stack: flux de données d'une manière "dernière, première sortie" (LIFO). .CodeAutres Stack Time Complexity
Quand utiliser un tableau ou une liste liée. Connaître les compromis.(Cliquez pour agrandir)
When to use an Array or Linked List. Know the tradeoffs
Utiliser des tableaux quand..
- Vous devez accéder aux données en ordre aléatoire rapidement (en utilisant un index).
- Vos données sont multidimensionnelles (p. ex., matrice, tenseur).
Utiliser les listes liées lorsque :
- Vous accéderez successivement à vos données.
- Vous voulez enregistrer la mémoire et n'attribuer la mémoire que si vous en avez besoin.
- Vous voulez un temps constant pour supprimer/ajouter des extrêmes de la liste.
- lorsque l'exigence de taille est inconnue - avantage de taille dynamique
Construisez une liste, une pile et une file d'attente.(Cliquez pour agrandir)
Build a List, Stack and a Queue from scratch
Construisez l'une de ces structures de données à partir de zéro:
(en milliers de dollars)Non-Linear Data Structures
Comprendre l'une des structures de données les plus polyvalentes de tous : Hash Maps.(Cliquez pour agrandir)
HashMaps
Découvrez comment mettre en œuvre différents types de cartes comme :
Aussi,learn the difference between the different Maps implementations:
HashMapest plus efficace dans le temps. ATreeMapest plus efficace dans l'espace.TreeMapla complexité de la recherche estO(log n), tout en optimisantHashMapestO(1)en moyenne.HashMaples touches sont en ordre d'insertion (ou aléatoire selon l'implémentation).TreeMaples clés sont toujours triées.TreeMapoffre quelques données statistiques gratuitement comme: obtenir minimum, obtenir maximum, médiane, trouver des plages de clés.HashMappas du tout.TreeMapa toujours une garantieO(log n), pendantHashMaps a un temps amorti deO(1)mais dans le cas rare d'un rehash, il faudraitO(n).
Connaître les propriétés des graphiques et des arbres.(Cliquez pour agrandir)
Know the properties of Graphs and Trees
GraphsConnaître toutes les propriétés des graphiques avec de nombreuses images et illustrations.

Graphiques: donnéesnoeudsqui peuvent avoir une connexion oubordà 0 noeuds adjacents ou plus. Contrairement aux arbres, les nœuds peuvent avoir plusieurs parents, boucles. .CodeAutres Graph Time Complexity
Trees
Apprenez tous les types d'arbres et leurs propriétés.

-
Arbres: les nœuds de données ont zéro ou plus de nœuds adjacents a.k.a. les enfants. Chaque noeud ne peut avoir qu'un seul noeud parent autrement est un graphique, pas un arbre. .CodeAutres Docs
-
Arbres binaires: comme un arbre mais seulement peut avoir deux enfants à la plupart. .CodeAutres Docs
-
Arbres de recherche binaires(BST): comme un arbre binaire, mais le valeur noeuds garder cet ordre
left < parent < right. .CodeAutres BST Time complexity -
Arbres AVL: Auto-équilibré BST pour maximiser le temps de recherche. .CodeAutres AVL Tree docsAutres Self-balancing & tree rotations docs
-
Arbres rouges-noirs: Auto-équilibré BST plus lâche que AVL à maximiser la vitesse d'insertion. .Code
-
Implémenter un arbre de recherche binaire pour des recherches rapides. .
Implement a binary search tree for fast lookups
-
Apprenez comment ajouter/supprimer/mise à jour des valeurs dans un arbre :

De la TVB déséquilibrée à la TVB équilibrée
1 2
\ / \
2 => 1 3
\
3
(en milliers de dollars)Algorithmic Toolbox
Ne jamais être coincé à résoudre un problème avec 7 étapes simples.(Cliquez pour agrandir)
Never get stuck solving a problem with 8 simple steps
- Comprendre le problème
- Construire un exemple simple (pas encore de cas bord)
- Solutions de remue-méninges (algorithme d'algorithme, Diviser et Conquerer, Backtracking, force brute)
- Testez votre réponse sur l'exemple simple (mentalement)
- Optimiser la solution
- Ecrivez un code. Oui, maintenant vous pouvez coder.
- Testez votre code écrit
- Analysez la complexité, tant l'espace que le temps, et assurez-vous d'optimiser davantage.
Détails completshere
Maîtriser les algorithmes de tri les plus populaires (barrage de fusion, tri rapide, etc.)(Cliquez pour agrandir)
Master the most popular sorting algorithms
Nous allons explorer trois algorithmes de tri essentiels O(n^2), qui ont peu de frais généraux:
et ensuite discuter des algorithmes de tri efficaces O(n log n) tels que:
Apprenez différentes approches pour résoudre des problèmes tels que la division et la conquête, la programmation dynamique, les algorithmes gourmands, et le rétrovirement.(Cliquez pour agrandir)
Learn different approaches to solve algorithmic problems
Nous allons discuter des techniques suivantes pour résoudre les problèmes d'algorithmes:
- Greedy Algorithms: fait des choix gourmands en utilisant l'heuristique pour trouver la meilleure solution sans regarder en arrière.
- Dynamic Programming: une technique pour accélérer les algorithmes récursifs quand il y a beaucoupsous-problèmes se chevauchant. Il utilisemémorisationéviter les doubles emplois.
- Divide and Conquer:diviserproblèmes en petits morceaux,conquérirchaque sous-problème, et puisjoindreles résultats.
- Backtracking: recherchetous (ou certains)chemins possibles. Cependant, il s'arrête, etretournezdès que la solution actuelle ne fonctionne pas.
- Force brute: générer toutes les solutions possibles et essayer toutes. (Utilisez-le en dernier recours ou comme point de départ).
FAQ
Comment les appliquer à mon travail quotidien?(Cliquez pour agrandir)
En tant que programmeur, nous devons résoudre les problèmes chaque jour. Si vous voulez bien résoudre les problèmes, il est bon de connaître un large éventail de solutions. Souvent, il est plus efficace d'apprendre les ressources existantes que de tomber sur la réponse vous-même. Plus vous avez d'outils et de pratiques, mieux c'est. Ce livre vous aide à comprendre les compromis entre les structures de données et la raison sur la performance des algorithmes. .
Pourquoi avez-vous créé ce livre? ?
Il n'y a pas beaucoup de livres sur les Algorithmes dans JavaScript. Ce matériau comble l'écart. En outre, c'est une bonne pratique :)
Est-ce que je peux contacter quelqu'un si j'ai des questions sur quelque chose en particulier? ?
Oui, ouvrez un problème ou posez des questions sur le canal [slack] (https://dsajs-slackin.herokuapp.com). .
Livre
Ce projet est également disponible enbook. Vous obtiendrez un PDF bien formaté avec 180 pages + version ePub et Mobi.
Appui
Prenez contact avec moi à l'un des endroits suivants !
- Twitter à
@iAmAdrianMejia - Clavardage
dsajs.slack.com

