¿Es Ruby bueno para estructuras de datos y algoritmos?
Sí, para aprender y para entrevistas en empresas que usan Rails: el código es tan corto como el de Python, y los bloques hacen que los recorridos se lean como el algoritmo. Conviene conocer dos carencias. La biblioteca estándar no tiene heap, cola de prioridad, lista enlazada ni árbol, así que los escribes tú; y Array#sort no garantiza la estabilidad, así que cuando los elementos iguales deben conservar su orden, ordena por un par: sort_by.with_index { |x, i| [x, i] }.
¿Qué clases de Ruby corresponden a qué estructuras de datos?
Array es un array dinámico que sirve de pila (push, pop) y de cola (push, shift); Hash es una tabla hash que recuerda el orden de inserción; y Set, en la biblioteca estándar, es un conjunto basado en hash. Esa es la lista. No hay heap, cola de prioridad, lista enlazada, árbol, trie ni grafo, así que esos los construyes tú, en los pasos uno y dos.
¿Cómo escribo una cola de prioridad en Ruby?
Ruby nunca ha traído una, así que hay tres respuestas honestas: ordenar el array después de cada inserción, O(n log n) por inserción; mantenerlo ordenado con bsearch_index e insert, O(n) por inserción; o escribir un heap binario sobre un Array, O(log n) tanto para insertar como para extraer. La tercera es la que busca un entrevistador, y el paso dos te pide construirla.
¿Por qué importa en los algoritmos el orden de inserción de un Hash de Ruby?
Porque convierte algunos diseños clásicos en unas pocas líneas. Una caché LRU, un problema de entrevista muy popular, es un Hash en el que una lectura borra y vuelve a insertar la clave para moverla al final, y el desalojo es shift, que elimina la entrada más antigua. En la mayoría de los lenguajes eso requiere una tabla hash más una lista doblemente enlazada, las estructuras que construyes en los pasos uno y dos, así que puedes explicar lo que Ruby hace por ti.
¿Qué cursos de esta ruta no se enseñan en Ruby?
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. En Ruby, la memoización puede ser un Hash con un bloque por defecto, como Hash.new { |h, n| h[n] = n < 2 ? n : h[n - 1] + h[n - 2] }, y n[i] lee directamente el bit i de un entero, donde C++ escribe (n >> i) & 1.
¿Necesito saber Ruby antes de empezar esta ruta?
Como mínimo, métodos, bloques, arrays, hashes y clases. Si son nuevos para ti, el curso de Ruby de Coddy te lleva hasta ahí primero, gratis, y esta ruta continúa donde él termina.