
Mastering Algorithms with C
Kyle Loudon
- Editorial
- O'Reilly
- Año
- 1999
- Páginas
- ~562
- Nivel
- Avanzado
De qué trata
Obra de referencia clásica escrita por Kyle Loudon y publicada por O'Reilly Media en 1999, enfocada en el diseño y la implementación rigurosa de estructuras de datos y algoritmos en lenguaje C (estándar ANSI C / C89). Aunque introduce los conceptos desde sus bases teóricas, está orientada a desarrolladores de nivel intermedio a avanzado y estudiantes de ciencias de la computación que ya conocen la sintaxis de C, pero necesitan dominar la gestión manual de memoria dinámica y el uso avanzado de punteros para construir soluciones robustas y eficientes.
El temario se organiza en tres bloques: fundamentos, estructuras de datos y algoritmos aplicados. En la sección inicial profundiza en aritmética de punteros, punteros genéricos (`void*`), punteros a funciones, recursión, recursión de cola (*tail recursion*) y análisis de complejidad asintótica mediante notación Big-O. Luego implementa tipos abstractos de datos modulares: listas enlazadas (simples, dobles y circulares), pilas, colas, conjuntos, tablas hash (por encadenamiento y direccionamiento abierto), árboles binarios de búsqueda, árboles AVL balanceados, montículos binarios (*heaps*), colas de prioridad y grafos con recorridos BFS y DFS. Por último, cubre algoritmos de ordenación (Quicksort, Mergesort, Insertion Sort, Radix Sort, Counting Sort), búsqueda binaria, métodos numéricos (interpolación polinómica, estimación por mínimos cuadrados, aproximación de raíces), compresión de datos con codificación de Huffman y LZ77 mediante manipulación a nivel de bits, criptografía elemental con DES y RSA, algoritmos sobre grafos (Prim para árboles de expansión mínima, Dijkstra para caminos más cortos y aproximación al viajante de comercio) y geometría computacional (intersección de segmentos y cálculo de envolvente convexa).
Cada estructura y algoritmo se presenta con una interfaz formal en cabeceras C (`.h`) y su implementación completa (`.c`), lista para integrarse como biblioteca en proyectos reales, acompañada de una sección final de preguntas y respuestas que examina sutilezas de diseño, fugas de memoria y compensaciones de rendimiento. Destaca por su enfoque de ingeniería de software, ya que enseña a desacoplar el tipo abstracto de los datos almacenados mediante funciones de comparación y punteros genéricos, una técnica poco habitual en manuales elementales. Quedan fuera paradigmas modernos como la concurrencia o la programación genérica de C++, por lo que su valor reside en afianzar las bases sólidas de bajo nivel indispensables antes de abordar el desarrollo de sistemas operativos, motores o sistemas embebidos.
- ANSI C
- Punteros y memoria dinámica
- Notación Big-O
- Listas enlazadas
- Árboles AVL
- Tablas hash
- Algoritmos de ordenación
- Compresión Huffman y LZ77
- Criptografía DES y RSA
- Algoritmos de grafos
- Geometría computacional
¿Cómo enseña?
Teoría + práctica
- ✗ Sin ejercicios
- ✗ Sin proyectos

