Eignet sich Swift für Datenstrukturen und Algorithmen?
Ja. Generics, Protokolle wie Comparable und Hashable und Optionals machen einen Knoten, dessen next nil sein kann, in seinem Typ explizit, und der Compiler prüft jede Verwendung. Zwei Dinge solltest du früh wissen: Die Standardbibliothek ist dünn, also schreibst du deine eigene Queue und deinen eigenen Heap; und Collections sind Werte, sodass das Original unberührt bleibt, wenn du ein Array einer neuen Variablen zuweist und diese änderst, was Umsteiger von Java oder JavaScript überrascht.
Welche Swift-Typen entsprechen welchen Datenstrukturen?
Array ist ein dynamisches Array und mit append und popLast() ein Stack; Dictionary und Set sind Hashtabellen. Das ist die ganze Standardbibliothek. Apples Open-Source-Paket swift-collections ergänzt Deque, Heap, OrderedSet und OrderedDictionary; die verkettete Liste, den Baum, den Trie und den Graphen schreibst du selbst, in den Schritten eins und zwei.
Warum muss ein Baumknoten in Swift eine Klasse sein?
Weil ein Struct ein Wert ist. Es kann keine gespeicherte Eigenschaft seines eigenen Typs haben, nicht einmal eine optionale, und wo Kopien davon liegen, etwa in einem Array, lässt eine Änderung an einer Kopie das Original unberührt. Eine Klasseninstanz ist eine Referenz, also können Knoten aufeinander zeigen; ein indirect enum funktioniert auch, für Bäume, die du nie an Ort und Stelle änderst. Der Haken ist ARC: Ein Elternzeiger muss weak sein, sonst halten sich Eltern- und Kindknoten gegenseitig am Leben, und der Baum wird nie freigegeben.
Wie schreibe ich in Swift eine schnelle Queue?
Nicht mit removeFirst(): Auf einem Array verschiebt es jedes verbleibende Element, also kostet jedes Entnehmen O(n). Führe einen Kopfindex mit und schiebe ihn weiter, oder nimm zwei Arrays: Neue Elemente kommen in ein Eingangs-Array, entnommen wird aus einem Ausgangs-Array, und wenn das Ausgangs-Array leer ist, füllst du es mit dem umgedrehten Eingangs-Array auf. Beides macht das Entnehmen amortisiert O(1). Das Deque aus swift-collections erledigt das für dich, und in Schritt eins baust du selbst eine Queue.
Welche Kurse auf diesem Pfad werden nicht in Swift 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. Ein Memo ist in Swift ein Array oder ein Dictionary, und Swift-Ganzzahlen haben nonzeroBitCount und trailingZeroBitCount, die mit einer einzigen Eigenschaft erledigen, was ein Bit-Trick in C++ von Hand macht.
Muss ich Swift können, bevor ich mit diesem Pfad anfange?
Mindestens Structs, Klassen, Optionals, Generics und Protokolle. Wenn das neu für dich ist, behandelt Coddys Swift-Kurs es zuerst, kostenlos, und dieser Pfad setzt dort an, wo er endet.