Introducción al análisis de algoritmos

Análisis de algoritmos
Julia
Recuperación de Información
Multiplicación de matrices dispersas
Reseña del Curso Introductorio de Análisis de Algoritmos, del Dr. Sadit Téllez
Autor/a

Santiago Botero Sierra

Fecha de publicación

24 de mayo de 2025

Fecha de modificación

3 de junio de 2025

El Curso Introductorio de Análisis de Algoritmos con Julia (Téllez Avila 2025) de Eric Sadit Téllez Avila presenta una introducción a algoritmos básicos de ordenamiento y búsqueda de información, que constituyen la base de los sistemas de búsqueda. El libro desarrolla los conceptos de una forma incremental y fácil de seguir, incluso para una persona con un nivel inicial básico en la materia, como fue mi caso. Aunque la exposición del material no requiere el uso de un lenguaje de programación específico, los ejemplos se presentan en Julia, lo que constituye una oportunidad de aprender este lenguaje para una persona que maneje lenguajes similares como R o Python, aunque también plantea desafíos en lo que respecta a la facilidad de uso de este lenguaje con otros programas.

El Dr. Téllez es investigador del Sistema Nacional de Investigadores, nivel 2, adscrito al Centro de Investigación e Innovación en Tecnologías de la Información y Comunicación desde 2014. Sus líneas de investigación son la similitud en espacios métricos, la categorización automática de texto y la inteligencia computacional. Sobre estos temas, ha publicado al menos 23 artículos en revistas indexadas y participado en diversos congresos especializados.1

Aunque los algoritmos que se analizan en el Curso tratan sobre sus líneas de investigación, no es claro para un estudiante cuál es el enfoque del curso sino hasta el final del material. En efecto, en el último video del último capítulo del libro, plantea que los algoritmos se insertan dentro del área de Recuperación de Información y permiten realizar eficientemente multiplicación de matrices dispersas, útiles en el cálculo de distancias en espacios métricos como los obtenidos mediante encajes vectoriales de un corpus y un texto de búsqueda. Si bien este conocimiento no es relevante para entender los algoritmos desarrollados a lo largo del curso, presenta una aplicación práctica que puede ser motivacional al momento de estudiarlos (Téllez Avila 2025, sec. 6.1).

De cualquier modo, conocer esta aplicación al final permite obtener perspectiva sobre el desarrollo del libro, que resulta bastante útil para el aprendizaje. Esta perspectiva no se observa durante el camino, que es así:

Aunque el libro no continúa con el desarrollo del problema, el capítulo 6 es importante porque sienta las bases necesarias para realizar la multiplicación de matrices dispersas. Como se analizó en el post sobre operaciones matriciales, si \(A = (a_{ij}), \, B = (b_{ij})\) son matrices conformables, entonces \(AB = C = (c_{ij}) = \left(\sum_k a_{ik} b_{kj}\right)\). Sin embargo, los elementos de la sumatoria en el último paréntesis solo resultan relevantes para esta cuando \(a_{ik} \neq 0\) y \(b_{kj} \neq 0\). Esta última condición se puede verificar a partir de los algoritmos señalados en el último capítulo si se representan la k-ésima fila de \(A\) como un conjunto de tuplas \(\{(k, a_{ik}): a_{ik} \neq 0\}\) y la k-ésima columna de \(B\) de forma similar como \(\{ (k, b_{kj}): b_{kj} \neq 0 \}\), en cuyo caso los elementos de la sumatoria son los que corresponden a la intersección, respecto al primer elemento ordenado de la tupla, de ambos conjuntos. A partir de este resultado, se simplifica enormemente el cómputo de multiplicaciones de matrices que contienen encajes vectoriales de un corpus sobre el que se desea localizar información, con otras que contienen los encajes de las búsquedas que se desean realizar. Este último, es un problema básico para encontrar la distancia coseno entre los textos, que es la base de los motores de búsqueda modernos.

El uso de Julia resulta interesante, pero no es necesario para el curso. Es interesante, pues se trata de un lenguaje de alto nivel pero de alto rendimiento, al ser compilado. En este sentido, combina la facilidad de uso de lenguajes como R, al que se parece mucho, con la rapidez de otros más complejos como C. Sin embargo, puede resultar muy complejo utilizarlo con otro tipo de software, pues hay fallas en su integración con VSCode o Quarto que no se encuentran completamente solucionadas. Por ejemplo, en mi trabajo me encontré ocasionalmente con problemas de kernel muerto que no pude solucionar fácilmente en Windows, por lo que debía renderizar los documentos generados en Ubuntu; este tipo de problemas resultan frustrantes y pueden hacer más lento el proceso de aprendizaje.

En resumen, se puede decir que el curso de Téllez Avila (2025) es una introducción al análisis de algoritmos útil en el campo de la recuperación de información. Incluso si el estudiante no tiene experiencia previa con esta clase de algoritmos, el enfoque incremental del material permite que puedan desarrollarse las habilidades necesarias para continuar hasta el final. Sin embargo, un área de oportunidad para el libro es plantear con mayor claridad la motivación del orden en que se desarrolla el material: la forma en que los algoritmos se insertan en el área general de recuperación de información.

1 Referencias

Referencias

Downey, Allen. 2024. Think Python. How to Think Like a Computer Scientist. Tercera Edición. O’Reilly. https://allendowney.github.io/ThinkPython/.
Downey, Allen, y Ben Lauwens. 2018. Think Python. How to Think Like a Computer Scientist. https://benlauwens.github.io/ThinkJulia.jl/latest/book.html.
Téllez Avila, Eric Sadit. 2025. Curso Introductorio al Análisis de Algoritmos con Julia. https://sadit.github.io/ALGO-IR/.

Notas

  1. Más información disponible aquí.↩︎

  2. Este significado es diferente de otros usos del término búsqueda, en los que se retorna el elemento buscado si existe en el arreglo o un valor nulo.↩︎