Ruby veri yapıları ve algoritmalar için iyi mi?
Evet, hem öğrenmek hem de Rails şirketlerindeki mülakatlar için: kod Python'ınki kadar kısadır ve bloklar sayesinde dolaşmalar algoritmanın kendisi gibi okunur. Bilmeye değer iki eksik var. Standart kütüphanede heap, öncelik kuyruğu, bağlı liste ya da ağaç yok, bu yüzden onları sen yazarsın; Array#sort da kararlılık sözü vermez, bu yüzden eşit elemanların sırasını koruması gerektiğinde bir çifte göre sırala: sort_by.with_index { |x, i| [x, i] }.
Hangi Ruby sınıfı hangi veri yapısına karşılık gelir?
Array, stack (push, pop) ve kuyruk (push, shift) işlevi gören dinamik bir dizidir; Hash ekleme sırasını hatırlayan bir hash tablosudur; standart kütüphanedeki Set ise hash tabanlı bir kümedir. Liste bu kadar. Heap, öncelik kuyruğu, bağlı liste, ağaç, trie ya da graf yok; onları birinci ve ikinci adımlarda kendin kurarsın.
Ruby'de öncelik kuyruğu nasıl yazılır?
Ruby hiçbir zaman bir öncelik kuyruğu sunmadı, bu yüzden üç dürüst cevap var: her eklemeden sonra diziyi sırala, ekleme başına O(n log n); bsearch_index ve insert ile sıralı tut, ekleme başına O(n); ya da bir Array üzerinde ikili bir heap yaz, hem ekleme hem çıkarma için O(log n). Bir mülakatçının aradığı üçüncüsüdür ve ikinci adımda onu kurarsın.
Ruby'de bir Hash'in ekleme sırası algoritmalar için neden önemli?
Çünkü bazı klasik tasarımları birkaç satıra indirir. Sevilen bir mülakat sorusu olan LRU önbelleği, bir okumanın anahtarı silip yeniden ekleyerek sona taşıdığı bir Hash'tir; önbellekten çıkarma da en eski girdiyi silen shift ile yapılır. Çoğu dilde bu, bir hash tablosu artı çift yönlü bir bağlı liste gerektirir, yani birinci ve ikinci adımlarda kurduğun yapılar; böylece Ruby'nin senin için ne yaptığını açıklayabilirsin.
Bu yoldaki hangi kurslar Ruby ile anlatılmıyor?
Üç kurs: Python ile anlatılan dinamik programlama ve Python mülakat serisi, C++ ile anlatılan bit işlemleri. Adımlardan sonra listelenirler ve her birinin bağlantısı onu kendi dilinde açar. Ruby'de bir memo, varsayılan bloğu olan bir Hash olabilir, örneğin Hash.new { |h, n| h[n] = n < 2 ? n : h[n - 1] + h[n - 2] }; n[i] de bir tam sayının i numaralı bitini doğrudan okur, C++ ise bunu (n >> i) & 1 diye yazar.
Bu yola başlamadan önce Ruby bilmem gerekiyor mu?
En azından metotlar, bloklar, diziler, hash'ler ve sınıflar. Bunlar sana yeniyse, Coddy'nin Ruby kursu seni önce oraya ücretsiz olarak getirir ve bu yol onun bittiği yerden devam eder.