Dart va bene per algoritmi e strutture dati?
Sì. È tipizzato e basato su classi, simile a Java o C# nella forma, quindi una classe Node<T> con un next nullable è esattamente ciò che sembra, e dart:collection copre più della maggior parte delle librerie standard. Due cose vanno sapute: l'SDK di base non ha una coda di priorità, e un letterale Map o Set è una LinkedHashMap o un LinkedHashSet, che ricorda l'ordine di inserimento: comodo per l'output, ma non è la stessa garanzia di una mappa ordinata.
Quali classi di Dart corrispondono a quali strutture dati?
List è un array dinamico e la tua pila; Map e Set sono tabelle hash, ordinate per inserimento per impostazione predefinita; dart:collection aggiunge Queue (una ListQueue, un buffer circolare, a meno che tu non scelga DoubleLinkedQueue), LinkedList per elementi che estendono LinkedListEntry, e SplayTreeMap e SplayTreeSet, alberi ordinati autoregolanti. Per un heap, il package:collection del team di Dart fornisce PriorityQueue. Trie e grafi li scrivi tu.
Dart ha una coda di priorità?
Non nell'SDK di base. dart:collection si ferma a code, liste concatenate e splay tree, e PriorityQueue si trova in package:collection, un pacchetto mantenuto dal team di Dart ma che aggiungi tu. Per questo un heap è una richiesta legittima in un colloquio su Dart, e nel secondo passaggio ne scrivi uno.
Cos'è uno splay tree, e quando usare SplayTreeMap?
Uno splay tree è un albero binario di ricerca autoregolante: ogni accesso sposta alla radice il nodo toccato, quindi le chiavi usate di recente si raggiungono di nuovo in fretta, e le operazioni costano O(log n) ammortizzato, non garantito su ogni singola chiamata. Usa SplayTreeMap quando ti servono le chiavi in ordine, la chiave più piccola o più grande, o la chiave più vicina da entrambi i lati di un valore, tramite firstKeyAfter e lastKeyBefore. L'albero AVL che costruisci nel secondo passaggio segue l'approccio opposto: si ribilancia a ogni modifica per mantenere l'altezza rigorosamente limitata.
Quali corsi di questo percorso non sono insegnati in Dart?
Tre: la programmazione dinamica e la serie di colloqui in Python, insegnate in Python, e la manipolazione dei bit, insegnata in C++. Sono elencati dopo i passaggi, ognuno con un link che lo apre nel suo linguaggio. Una memoizzazione in Dart è una List o una Map, e toRadixString(2) stampa un int in binario, il modo più rapido per verificare cosa contiene davvero una maschera.
Devo conoscere Dart prima di iniziare questo percorso?
Almeno classi, generics, liste, mappe e null safety. Se sono argomenti nuovi, il corso di Dart di Coddy ti porta prima a quel punto, gratis, e questo percorso riprende da dove finisce.