Vivimos en un mundo altamente tecnológico el cual se sustenta cada día más en sistemas electrónicos. Desde brazos robóticos utilizados en la manufactura y supercomputadoras para resolver los problemas científicos actuales, a sistemas de entretenimiento como televisiones o videojuegos y aparatos electrodomésticos, es difícil escapar al uso de estos aparatos. Independientemente de cual sea su uso, para que uno de estos sistemas sea útil debe "saber" que hacer, es decir, para una entrada válida debe obtener la respuesta. Los pasos a seguir para esta respuesta es precisamente lo que estudia la algoritmia.
El uso de algoritmos, la forma de pensar y estructurar una solución, es fundamental en la programación. Estos principios para racionalizar una solución se pueden extender para resolver problemas que van más allá de esta disciplina, aunque ese enfoque no se va a utilizar aquí.
Este escrito se enfoca principalmente al estudio de algoritmos que comúnmente se utilizan dentro del
Concurso Internacional de Programación para Universidades (ICPC, por sus siglas en inglés) en sus fases regionales que organiza cada año la
Asociación para Maquinaria de Computación (ACM, ídem). Estos mismos algoritmos pueden ser utilizados para otros concursos similares como las
Olimpiadas de Informática o
TopCoder, y desde luego, en aplicaciones prácticas.
Cada algoritmo es presentado con una base teórica, además de una implementación en Pascal y C. Lo primero que nos interesa conocer es el porque de la elección de este tema y del enfoque que le damos.
Dentro de este tipo de concursos se presentan una gran colección de problemas, y esto exige tener preparación en una extensa variedad de temas. Es por eso que los participantes serios de este tipo de concursos tienen un gran conocimiento y una amplia visión en muchas áreas de algoritmia y estructura de datos.
Otra característica que presentan los concursos es el fomento del trabajo en equipo en un ambiente competitivo y bajo presión. Esto es benéfico ya que este tipo de escenario se presenta de manera regular en el ámbito laboral de muchos campos de la tecnología.
A pesar de que el uso del lenguaje de programación Pascal quedó eliminado a partir del 2007 en los concursos mundiales del ICPC y desde el 2005 en el Regional México – Centro América, Pascal es un lenguaje muy similar al pseudocódigo por lo que puede ser “traducido” de manera relativamente fácil a casi cualquier otro lenguaje de programación estructurada. Y a diferencia del pseudocódigo, en Pascal se pueden apreciar los detalles finos de la implementación.
Otros lenguajes, como es el caso de C, pueden ofrecer una implementación más eficiente, pero esto a cambio de tener un código más complejo y críptico, por lo que no resulta tan útil para un estudio introductorio. Aún así se decidió incluirlo, aunque no con el mismo énfasis se le dio a Pascal, ya que muchos otros lenguajes basan su sintaxis en este (como es el caso de C++, C# y Java).