¿Es Rust bueno para estructuras de datos y algoritmos?
Para usarlas, mucho: las colecciones estándar son rápidas y están bien documentadas, sort es estable, y el Rust seguro descarta los punteros colgantes y las carreras de datos en tiempo de compilación, sin recolector de basura. Para escribir estructuras basadas en punteros es más difícil que C o Java, porque el ownership impide los enlaces compartidos y mutables salvo que optes por Rc y RefCell, y una lista doblemente enlazada o un árbol con punteros al padre están hechos justo de eso. Esa dificultad también es la lección: cuando sabes escribirlas en Rust, sabes exactamente quién es dueño de qué.
¿Qué colecciones de Rust corresponden a qué estructuras de datos?
Vec<T> es un array dinámico y tu pila, VecDeque<T> es un búfer circular y tu cola, HashMap y HashSet son tablas hash (SipHash por defecto, que resiste las colisiones provocadas a costa de algo de velocidad), BTreeMap y BTreeSet son árboles B ordenados, BinaryHeap<T> es un max-heap, y LinkedList<T> es una lista doblemente enlazada que rara vez preferirás a un Vec o un VecDeque. No hay tipo trie ni grafo; esos los construyes tú.
¿Por qué es tan difícil escribir una lista enlazada en Rust?
Porque cada valor tiene exactamente un dueño. Una lista simplemente enlazada encaja en esa regla: cada nodo es dueño del siguiente a través de Option<Box<Node>>. Una lista doblemente enlazada o un árbol con enlaces al padre no encaja, porque a cada nodo llegan dos punteros, así que recurres a Rc<RefCell<Node>> con Weak para los enlaces hacia atrás, o guardas los nodos en un Vec y los enlazas por índice. Learning Rust With Entirely Too Many Linked Lists existe porque muchísima gente se atasca justo aquí.
¿Cómo obtengo un min-heap en Rust?
BinaryHeap<T> es un max-heap, así que envuelve cada elemento en std::cmp::Reverse: inserta Reverse(x) y el x más pequeño sale primero. Para Dijkstra, inserta Reverse((distance, node)), y la tupla se compara primero por la distancia. Cuando ya has escrito un heap tú mismo en el paso dos, invertir su orden es evidente.
¿Qué cursos de esta ruta no se enseñan en Rust?
Tres: la programación dinámica y la serie de entrevistas en Python, que se enseñan en Python, y la manipulación de bits, que se enseña en C++. Aparecen después de los pasos, cada uno con un enlace que lo abre en su propio lenguaje. Una tabla de memoización en Rust es un Vec o un HashMap, y el desbordamiento de enteros provoca un panic en una compilación de depuración, así que un truco de bits que cuenta con que el valor dé la vuelta lo hace explícito con wrapping_add o wrapping_mul.
¿Necesito saber Rust antes de empezar esta ruta?
Como mínimo, ownership, borrowing, structs, enums y Option; Box y los traits ayudan. Si son nuevos para ti, el curso de Rust de Coddy te lleva hasta ahí primero, gratis, y esta ruta continúa donde él termina.