Dart est-il adapté aux structures de données et aux algorithmes ?
Oui. Il est typé et orienté classes, proche de Java ou de C# dans sa forme, donc une classe Node<T> avec un next nullable est exactement ce qu'elle a l'air d'être, et dart:collection couvre plus que la plupart des bibliothèques standard. Deux points sont à connaître : le SDK de base n'a pas de file de priorité, et un littéral Map ou Set est une LinkedHashMap ou un LinkedHashSet, qui se souvient de l'ordre d'insertion : pratique pour l'affichage, mais ce n'est pas la même promesse qu'une map triée.
Quelles classes Dart correspondent à quelles structures de données ?
List est un tableau dynamique et ta pile ; Map et Set sont des tables de hachage, ordonnées par insertion par défaut ; dart:collection ajoute Queue (une ListQueue, un tampon circulaire, sauf si tu choisis DoubleLinkedQueue), LinkedList pour les entrées qui étendent LinkedListEntry, et SplayTreeMap et SplayTreeSet, des arbres ordonnés auto-ajustables. Pour un tas, le package:collection de l'équipe Dart fournit PriorityQueue. Les tries et les graphes, tu les écris toi-même.
Dart a-t-il une file de priorité ?
Pas dans le SDK de base. dart:collection s'arrête aux files, aux listes chaînées et aux arbres splay, et PriorityQueue se trouve dans package:collection, un package que maintient l'équipe Dart mais que tu ajoutes toi-même. Un entretien Dart peut donc légitimement te demander d'écrire un tas, et c'est à l'étape deux que tu en écris un.
Qu'est-ce qu'un arbre splay, et quand utiliser SplayTreeMap ?
Un arbre splay est un arbre binaire de recherche auto-ajustable : chaque accès remonte à la racine le nœud qu'il a touché, si bien que les clés utilisées récemment sont rapides à retrouver, et les opérations coûtent O(log n) amorti, sans garantie sur chaque appel pris isolément. Utilise SplayTreeMap quand tu as besoin des clés dans l'ordre trié, de la plus petite ou de la plus grande clé, ou de la clé la plus proche de part et d'autre d'une valeur, grâce à firstKeyAfter et lastKeyBefore. L'arbre AVL que tu construis à l'étape deux adopte l'approche inverse : il se rééquilibre à chaque modification pour garder une hauteur strictement bornée.
Quels cours de ce parcours ne sont pas enseignés en Dart ?
Trois : la programmation dynamique et la série d'entretiens en Python, enseignées en Python, et la manipulation de bits, enseignée en C++. Ces trois cours figurent après les étapes, chacun avec un lien qui l'ouvre dans son propre langage. En Dart, une table de mémoïsation est une List ou une Map, et toRadixString(2) affiche un int en binaire, le moyen le plus rapide de vérifier ce que contient vraiment un masque.
Faut-il connaître Dart avant de commencer ce parcours ?
Au minimum les classes, les génériques, les listes, les maps et la null safety. Si c'est nouveau pour toi, le cours Dart de Coddy t'y amène d'abord, gratuitement, et ce parcours prend le relais là où il s'arrête.