Rust é bom para estruturas de dados e algoritmos?
Para usá-las, muito: as coleções padrão são rápidas e bem documentadas, sort é estável, e o Rust seguro elimina ponteiros pendentes e data races em tempo de compilação, sem coletor de lixo. Para escrever estruturas baseadas em ponteiros, ele é mais difícil do que C ou Java, porque o ownership proíbe ligações compartilhadas e mutáveis, a menos que você opte por Rc e RefCell, e uma lista duplamente ligada ou uma árvore com ponteiros para o pai é feita exatamente disso. Essa dificuldade também é a lição: quando você consegue escrevê-las em Rust, sabe exatamente quem é dono de quê.
Quais coleções do Rust correspondem a quais estruturas de dados?
Vec<T> é um array dinâmico e a sua pilha, VecDeque<T> é um buffer circular e a sua fila, HashMap e HashSet são tabelas hash (SipHash por padrão, que resiste a colisões deliberadas ao custo de alguma velocidade), BTreeMap e BTreeSet são B-trees ordenadas, BinaryHeap<T> é um max-heap, e LinkedList<T> é uma lista duplamente ligada que você raramente vai preferir a um Vec ou a um VecDeque. Não existe tipo de trie nem de grafo; esses você constrói.
Por que é tão difícil escrever uma lista ligada em Rust?
Porque todo valor tem exatamente um dono. Uma lista simplesmente ligada cabe nessa regra: cada nó é dono do próximo por meio de Option<Box<Node>>. Uma lista duplamente ligada ou uma árvore com ligações para o pai não cabe, já que dois ponteiros levam a cada nó, então você recorre a Rc<RefCell<Node>> com Weak para as ligações de volta, ou mantém os nós em um Vec e os liga por índice. Learning Rust With Entirely Too Many Linked Lists existe porque muita gente trava exatamente aqui.
Como ter um min-heap em Rust?
BinaryHeap<T> é um max-heap, então envolva cada item em std::cmp::Reverse: insira Reverse(x) e o menor x sai primeiro. Para o Dijkstra, insira Reverse((distance, node)), e a tupla é comparada primeiro pela distância. Depois que você mesmo escreveu um heap no passo dois, inverter a ordem dele é óbvio.
Quais cursos desta trilha não são ensinados em Rust?
Três: programação dinâmica e a série de entrevistas em Python, ensinadas em Python, e manipulação de bits, ensinada em C++. Eles aparecem listados depois dos passos, cada um com um link que o abre na própria linguagem. Uma tabela de memoização em Rust é um Vec ou um HashMap, e o overflow de inteiros gera um panic em um build de debug, então um truque com bits que depende de o valor dar a volta deixa isso explícito com wrapping_add ou wrapping_mul.
Preciso saber Rust antes de começar esta trilha?
Ownership, borrowing, structs, enums e Option, no mínimo; Box e traits ajudam. Se isso for novidade, o curso de Rust da Coddy te leva até esse ponto primeiro, de graça, e esta trilha continua de onde ele termina.