Eignet sich Rust für Datenstrukturen und Algorithmen?
Zum Benutzen sehr gut: Die Standard-Collections sind schnell und gut dokumentiert, sort ist stabil, und sicheres Rust schließt hängende Zeiger und Data Races schon zur Kompilierzeit aus, ohne Garbage Collector. Zum Schreiben zeigerbasierter Strukturen ist es schwerer als C oder Java, denn Ownership verbietet geteilte, veränderliche Verweise, solange du nicht bewusst zu Rc und RefCell greifst, und eine doppelt verkettete Liste oder ein Baum mit Elternzeigern besteht genau daraus. Diese Schwierigkeit ist zugleich die Lektion: Sobald du sie in Rust schreiben kannst, weißt du genau, wem was gehört.
Welche Rust-Collections entsprechen welchen Datenstrukturen?
Vec<T> ist ein dynamisches Array und dein Stack, VecDeque<T> ist ein Ringpuffer und deine Queue, HashMap und HashSet sind Hashtabellen (standardmäßig mit SipHash, das absichtlichen Kollisionen standhält, auf Kosten von etwas Geschwindigkeit), BTreeMap und BTreeSet sind geordnete B-Bäume, BinaryHeap<T> ist ein Max-Heap, und LinkedList<T> ist eine doppelt verkettete Liste, die du einem Vec oder einer VecDeque selten vorziehen wirst. Einen Trie- oder Graph-Typ gibt es nicht; die baust du selbst.
Warum ist eine verkettete Liste in Rust so schwer zu schreiben?
Weil jeder Wert genau einen Besitzer hat. Eine einfach verkettete Liste passt zu dieser Regel: Jeder Knoten besitzt den nächsten über Option<Box<Node>>. Eine doppelt verkettete Liste oder ein Baum mit Elternverweisen passt nicht, weil zu jedem Knoten zwei Zeiger führen, also greifst du zu Rc<RefCell<Node>> mit Weak für die Rückverweise oder hältst die Knoten in einem Vec und verknüpfst sie über Indizes. Learning Rust With Entirely Too Many Linked Lists gibt es, weil so viele genau hier hängen bleiben.
Wie bekomme ich in Rust einen Min-Heap?
BinaryHeap<T> ist ein Max-Heap, also verpackst du jedes Element in std::cmp::Reverse: Füge Reverse(x) ein, und das kleinste x kommt zuerst heraus. Für Dijkstra fügst du Reverse((distance, node)) ein, und das Tupel wird zuerst nach der Distanz verglichen. Wenn du in Schritt zwei selbst einen Heap geschrieben hast, ist das Umdrehen seiner Reihenfolge offensichtlich.
Welche Kurse auf diesem Pfad werden nicht in Rust unterrichtet?
Drei: Dynamische Programmierung und die Python-Interviewreihe werden in Python unterrichtet, Bitmanipulation in C++. Sie sind nach den Schritten aufgeführt, jeweils mit einem Link, der den Kurs in seiner eigenen Sprache öffnet. Eine Memo-Tabelle ist in Rust ein Vec oder eine HashMap, und ein Ganzzahlüberlauf löst im Debug-Build eine Panic aus, deshalb macht ein Bit-Trick, der auf Wrapping setzt, das mit wrapping_add oder wrapping_mul explizit.
Muss ich Rust können, bevor ich mit diesem Pfad anfange?
Mindestens Ownership, Borrowing, Structs, Enums und Option; Box und Traits helfen. Wenn das neu für dich ist, bringt dich Coddys Rust-Kurs zuerst dorthin, kostenlos, und dieser Pfad setzt dort an, wo er endet.