Eignet sich Ruby für Datenstrukturen und Algorithmen?
Ja, zum Lernen und für Interviews bei Unternehmen, die Rails einsetzen: Der Code ist so kurz wie in Python, und mit Blocks lesen sich Traversierungen wie der Algorithmus selbst. Zwei Lücken solltest du kennen. Die Standardbibliothek hat keinen Heap, keine Prioritätswarteschlange, keine verkettete Liste und keinen Baum, also schreibst du sie selbst; und Array#sort verspricht keine Stabilität, wenn gleiche Elemente also ihre Reihenfolge behalten müssen, sortiere nach einem Paar: sort_by.with_index { |x, i| [x, i] }.
Welche Ruby-Klassen entsprechen welchen Datenstrukturen?
Array ist ein dynamisches Array, das als Stack (push, pop) und als Queue (push, shift) dient; Hash ist eine Hashtabelle, die sich die Einfügereihenfolge merkt; und Set aus der Standardbibliothek ist ein hashbasiertes Set. Das ist die ganze Liste. Einen Heap, eine Prioritätswarteschlange, eine verkettete Liste, einen Baum, einen Trie oder einen Graphen gibt es nicht, die baust du also selbst, in den Schritten eins und zwei.
Wie schreibe ich in Ruby eine Prioritätswarteschlange?
Ruby hat nie eine mitgeliefert, also gibt es drei ehrliche Antworten: das Array nach jedem Einfügen sortieren, O(n log n) pro Push; es mit bsearch_index und insert sortiert halten, O(n) pro Push; oder einen binären Heap auf einem Array schreiben, O(log n) für Push und Pop. Die dritte ist die, die ein Interviewer sehen will, und in Schritt zwei baust du sie.
Warum ist die Einfügereihenfolge in einem Hash von Ruby für Algorithmen wichtig?
Weil sie manche klassischen Entwürfe auf ein paar Zeilen schrumpfen lässt. Ein LRU-Cache, eine beliebte Interviewaufgabe, ist ein Hash, in dem ein Lesezugriff den Schlüssel löscht und neu einfügt, um ihn ans Ende zu verschieben, und das Verdrängen ist shift, das den ältesten Eintrag entfernt. In den meisten Sprachen braucht das eine Hashtabelle plus eine doppelt verkettete Liste, die Strukturen, die du in den Schritten eins und zwei baust, also kannst du erklären, was Ruby für dich erledigt.
Welche Kurse auf diesem Pfad werden nicht in Ruby 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 kann in Ruby ein Hash mit Default-Block sein, wie in Hash.new { |h, n| h[n] = n < 2 ? n : h[n - 1] + h[n - 2] }, und n[i] liest Bit i einer Ganzzahl direkt, wo C++ (n >> i) & 1 schreibt.
Muss ich Ruby können, bevor ich mit diesem Pfad anfange?
Mindestens Methoden, Blocks, Arrays, Hashes und Klassen. Wenn das neu für dich ist, bringt dich Coddys Ruby-Kurs zuerst dorthin, kostenlos, und dieser Pfad setzt dort an, wo er endet.