¿Por qué estudiamos diferentes algoritmos para la misma tarea?

Puede haber varias razones (no considero esta lista completa):

  • Eficiencia : ciertos algoritmos son más eficientes que otros; algunos algoritmos pueden superar a otros algoritmos en ciertas situaciones; Otras razones de este tipo.
  • Histórico y teórico : algunos algoritmos preceden a otros algoritmos en su descubrimiento, y dado que algunos algoritmos más nuevos se basan en algoritmos más antiguos en cualquier concepto o literalmente lo usan como base para construir el más nuevo, tiene mucho sentido mostrar el algoritmo posiblemente más simple antes pasar al más avanzado (o uno que es una extensión trivial del mismo). Por ejemplo, tiene mucho sentido mostrar el algoritmo Ford – Fulkerson – Wikipedia antes del algoritmo Edmonds – Karp – Wikipedia, ya que toda la teoría que sustenta el primero es útil para descubrir por qué funciona el segundo.
  • Amplitud : por lo general, el diseño de algoritmos puede ser una empresa muy rigurosa, por lo que saber demostrar la corrección de un algoritmo o un problema tiene cierta propiedad es un objetivo pedagógico de muchos profesores / instructores. Ver cuántos algoritmos diferentes funcionan de diferentes técnicas le permite comprender cómo puede usarlos o aplicarlos para resolver otros problemas.

Debe recordar que el diseño de algoritmos es una tarea centrada en problemas en la investigación. Entonces, a veces es una buena idea ver cómo se puede explotar las propiedades de un problema para diseñar diferentes algoritmos o emplear diferentes técnicas algorítmicas.

Hay múltiples formas de resolver un problema, por lo tanto, múltiples algoritmos. cada algoritmo tiene su propia importancia y belleza en términos de espacio (espacio RAM) utilizado por él (denominado complejidad espacial), tiempo que tarda en ejecutarse (denominado complejidad temporal), complejidad para implementarlo, etc., etc. utilizamos diferentes algos para el mismo problema dependiendo de nuestro requisito

por ejemplo, algoritmos de clasificación:

Hay muchos algoritmos de clasificación, por ejemplo, clasificación rápida, clasificación de fusión, clasificación de burbuja, clasificación de cubeta, clasificación de inserción, clasificación de selección, etc.

solo piense en el momento en que alguien enfrentó este problema por primera vez, lo que quería era lograr el resultado e implementarlo como un tipo de burbuja (escriba dos bucles, un bucle está anidado en otro). su complejidad es n ^ 2. no consume espacio adicional de RAM. Funcionará la mayor parte del tiempo.

De hecho, cuando no tenía idea de ordenar, lo hice de esta manera sin siquiera saber de este algo.

después de un tiempo, alguien tuvo que ordenar una gran variedad. en ese momento Él quería algo de clasificación que funcionara bien pero que debería ser más rápido. De esta manera, el tipo de fusión entró en escena.

después de que en algún momento la gente se dio cuenta de que la ordenación por fusión toma mucha memoria (tiene que hacer múltiples matrices duplicadas en el medio), se descubrió la ordenación rápida, aunque no siempre fue tan eficiente como la ordenación por fusión, pero las personas se dieron cuenta del tipo de datos / número que usan rápidamente sort le da complejidad a nlogn, que es tan bueno como merge sort.

entonces alguien se dio cuenta de que sus datos de entrada siempre contienen 0 o 1 O un pequeño conjunto de números, luego se dieron cuenta de que se puede hacer usando la clasificación de cubetas, solo cuente la ocurrencia de cada dato en la lista.

En la actualidad, está familiarizado con todos los algos, pero déjenos decir que solo tiene que clasificar el número 10, ¿por qué usaría la fusión o la clasificación rápida (un poco difícil de implementar en comparación con la burbuja o la inserción)? su tipo de burbuja también hará bien en este caso.

Por lo tanto, para resumir, depende de la aplicación a la aplicación qué algo tiene que usar y cuando los algos existentes no son suficientes en términos de memoria, tiempo o complejidad de implementación, se descubren nuevos algos.

Es necesario explorar diferentes técnicas de resolución de problemas para un problema en particular, tal como lo hacemos en nuestra vida real, donde aprendemos de los errores de los demás. Cada técnica de resolución de problemas tiene sus propias restricciones y, por lo tanto, solo se puede implementar bajo una condición adecuada. Al considerar una serie de algoritmos diferentes, podemos comenzar a desarrollar el reconocimiento de patrones para que la próxima vez que surja un problema similar, podamos resolverlo mejor.

Considere el ejemplo de la función de potencia pow . Es completamente posible que haya muchas formas diferentes de calcular la función pow . Los recursos utilizados por un algo pueden variar con otro. Un algoritmo puede tardar 10 veces más en devolver el resultado que el otro.

Definitivamente tenemos alguna forma de comparar estas dos soluciones. Ambos pueden producir resultados, pero uno quizás produzca un resultado más eficiente que el otro en esa situación particular. En última instancia, se demuestra que uno es más eficiente o que simplemente funciona más rápido o usa menos memoria.

Diferentes algoritmos proporcionan un enfoque diferente para resolver el mismo problema. Estudiamos diferentes algoritmos para poder proporcionar una solución al usuario según sus requisitos (complejidad de espacio y tiempo).

Porque es muy interesante que se puedan usar diferentes enfoques para resolver el mismo problema. También es interesante que diferentes algoritmos se comporten de manera diferente en el tiempo y el espacio en diferentes tamaños de entrada. También pueden tener diferentes restricciones en los datos de entrada.

More Interesting

¿Existe un algoritmo informático para detectar 'noticias falsas'?

¿Cómo se puede hacer un sistema como Google AdWords y AdSense?

¿Qué debo hacer para mejorar el pensamiento algorítmico, especialmente para la programación dinámica?

¿Cuáles son las diferentes formas en que puede obtener la longitud de una matriz en C ++?

¿Qué es un algoritmo en términos simples?

¿Se puede ordenar una lista de números en un número menor de pases que el indicado por la notación Big-O?

Algoritmos: ¿Cuáles son los detalles en la implementación de un algoritmo de ancestro común más bajo O (N log N)?

¿Cuáles son los buenos canales en YouTube para aprender algoritmos y estructuras de datos para la preparación de Google Code Jam o Facebook Hacker Cup?

¿Cuál es el mejor libro para aprender algoritmos y estructuras de datos en Java para principiantes?

¿Cuál es la mayor complejidad de tiempo que cualquier juez en línea puede aceptar como O (10 ^ 9) o algo en términos de números?

¿Cuál es la prueba del algoritmo KMP?

¿Existen buenos libros o recursos para resolver problemas y algoritmos en C #, para la preparación de entrevistas SDET?

La solución de este problema Problema - C - Codeforces es este Ideone.com pero ¿qué está sucediendo dentro con los punteros, especialmente las líneas 27, 28, 36?

¿El conocimiento de algoritmos codiciosos a veces influye en la forma de tomar decisiones?

¿Las personas en la industria realmente usan el algoritmo K-Nearest Neighbour en la práctica?