Las matemáticas y la física de sentido común son suficientes para que la mayoría de las personas se muevan (como cruzar el césped toma menos tiempo que dar vueltas, etc.). Los algoritmos son útiles para algunas tareas que algunas personas podrían enfrentar a diario.
Por ejemplo:
- Trabajo administrativo
- Papeleo
Archivando papeleo todos los días? Aquí es donde los algoritmos serían útiles. Archivar es una tarea repetitiva donde pensar algorítmicamente ayudaría a ahorrar tiempo. Suponga que tiene que duplicar varias carpetas de documentos.
Esto implica sacar los papeles para fotocopiarlos, perforarlos y archivarlos en archivos nuevos. ¿Es más fácil sacar todos los papeles, luego fotocopiarlos todos juntos o tomar cada uno por separado y fotocopiar los documentos uno por uno? ¿Es más fácil perforar todos los papeles primero antes de archivarlos?
El pensamiento algorítmico le dirá que es más rápido sacar todos los papeles, fotocopiarlos todos a la vez presionando el botón grande en la máquina de fotocopias, y luego perforar todos los agujeros a la vez antes de archivarlos.
Por supuesto, uno tiene que separar esos documentos nuevamente después de hacer agujeros. Esto ayuda a mejorar la eficiencia del método de archivo. - Clasificación
¿Tener que clasificar muchos documentos / libros cada día (por ejemplo, en bibliotecas)? La mayoría de las personas no se dan cuenta, pero usualmente usamos una versión del tipo de inserción con espacios vacíos llamada tipo de biblioteca [1].
Aunque existen métodos de clasificación con un tiempo asintótico más rápido (como mergesort o quicksort), la ordenación de la biblioteca es prácticamente suficiente para hacer el trabajo. - Hojas de cálculo Excel
Las hojas de cálculo de Excel son útiles para muchas tareas administrativas relacionadas con listas y datos. Sin embargo, uno rara vez va más allá de usarlo simplemente para resumir números. De hecho, Excel se convierte en una herramienta muy poderosa cuando se combina con el pensamiento algorítmico: se pueden diseñar, por ejemplo, listas de tareas y calendarios. Dado un conjunto de datos que el jefe quería analizar, ¿sería más fácil poner todo en una hoja y analizarlo en su conjunto, o ponerlo en varias hojas y analizarlo individualmente? ¿Ayudarían los métodos gráficos? - Análisis del mejor / peor de los casos
Al tomar decisiones comerciales, a menudo es necesario observar toda la situación y considerar los escenarios que podrían surgir. El entrenamiento algorítmico ayuda a practicar la disciplina de considerar el análisis del mejor / peor de los casos, teniendo en cuenta todos los casos límite posibles. - Divide y conquistaras
Cuando se enfrenta un gran problema, es imperativo dividirlo en partes más pequeñas que se resuelvan más fácilmente. Aquí es donde entra en juego la técnica algorítmica de dividir y conquistar. Sin embargo, la división del problema en subproblemas a menudo no es trivial: a veces se necesitan ideas ingeniosas para delegar tareas de manera significativa. - Conducción
¿Qué ruta se debe tomar? ¿Los atascos en este camino serían más fáciles que la autopista? ¿Cuántos semáforos / señales de alto hay? Estas consideraciones las realizan en su mayoría los potentes sistemas GPS de los automóviles en la actualidad, pero a veces el GPS no tiene en cuenta la información en tiempo real y, a veces, puede dar direcciones incorrectas (especialmente cuando cambian las carreteras). El problema de la ruta más corta es solucionado de forma innata por muchos controladores independientes del conocimiento de algoritmos, pero sería más fácil para uno reconocer los pesos, nodos, bordes y otros factores involucrados con el conocimiento algorítmico.
Además, cuando uno llega a un lugar cercano al destino, ¿cuál debería ser una forma de buscar su ubicación exacta? Dado el conocimiento algorítmico, se podría tratar de ramificar y unir, ayudado por pistas visuales. - Programación y priorización
¿Tienes muchos eventos para asistir y no estás seguro de cuál cancelar? Si todos fueran igualmente (des) importantes, ¿cuál es la forma en que uno puede asistir a la mayoría de ellos? Este es el conocido problema de programación de eventos que puede resolverse mediante un algoritmo codicioso: en cada momento, elija el que finalice lo antes posible, hasta que se complete todo el tiempo [2]. Por supuesto, esto no es realista cuando uno considera factores de la vida real como la importancia de los eventos y el tiempo de transporte, etc., pero esto le da a uno una solución rápida que puede modificarse.
Sin embargo, en la vida real, la mayoría de los problemas no son tan fáciles. La mayoría de los problemas se encuadran en las clases NP-complete y NP-hard (por ejemplo, ¿es usted un vendedor ambulante [3]?). Aun así, existen algoritmos de aproximación y heurísticos que pueden ofrecer soluciones razonablemente buenas en un corto período de tiempo. Sorprendentemente, a veces un enfoque aleatorio o un enfoque codicioso proporcionaría una solución razonablemente aceptable rápidamente.
- ¿Cuáles son las mejores aplicaciones de algoritmos en la vida real?
- Si cada solución recursiva se puede transformar en una iterativa, ¿por qué usar la recursividad?
- Cómo resolver el problema ADDGP en SPOJ
- Para ubicarse dentro del top 3 en el próximo ICPC regional, ¿qué le sugeriría a un codificador de nivel medio que tenga suficiente conocimiento?
- ¿Podemos usar una cola en quicksort en C?
Sin embargo, la mayoría de las veces, los insumos en sí no se especifican muy bien (por ejemplo, fluctuaciones en los mercados financieros), y los factores involucrados en el problema pueden no conocerse completamente. Esto requiere los conocimientos y la experiencia de un ser humano para juzgar, aproximar y crear algún modelo de este, antes de que el conocimiento algorítmico pueda ayudar.
En conclusión, el conocimiento de algoritmos puede ser generalmente útil para que las personas resuelvan varios tipos de problemas de la vida real, aunque con algunas aproximaciones; a veces como una solución rápida que se puede modificar.
[1] Clasificación de biblioteca
[2] Algoritmos / Algoritmos codiciosos
[3] Problema de vendedor ambulante