Cómo escribir un algoritmo

Como dijeron, tu pregunta es un poco vaga. Pero haré todo lo posible para responder a su pregunta tal como la entiendo.

Por lo general, se considera que un algoritmo es la idea, o diseño, que crea antes de realizar cualquier programación. Aquí creas los nombres de tus variables, creas el flujo básico de todo el programa, etc. Lo mejor de crear un algoritmo es que te ayuda a ver algunos problemas que podrías tener al crear tu programa antes de comenzar a escribirlo. Entonces, en lugar de tener que escribir un programa completamente nuevo si se equivoca, es posible que ya haya visto venir el problema y haya cambiado su algoritmo para resolver este problema exacto.

Por ejemplo, supongamos que va a escribir un programa que actúa como una calculadora básica. Su algoritmo puede contener cosas como:

1) el usuario verá la pantalla de bienvenida
2) se le pedirá al usuario que ingrese un número
2a) esta entrada se llamará variable1
3) se preguntará al usuario si desea sumar, restar, multiplicar o dividir
3a) esta entrada se llamará userSelect
4) se le pedirá al usuario que ingrese el segundo número
4a) esta entrada se llamará variable2
5) se mostrará el resultado
6) el programa terminará

Este no es el mejor algoritmo, pero espero que entiendas la idea.

La pregunta es demasiado vaga para dar una respuesta específica. Debe especificar exactamente lo que está dispuesto a hacer cuando dice un algoritmo.

Hablando demasiado general, un algoritmo no es más que un procedimiento paso a paso que debe seguir la computadora para resolver un problema específico. Puede ser simple o complejo según el problema que intente resolver. Usaría un conjunto de comandos definidos por un software de computadora como un lenguaje de programación para alimentar su algoritmo a la computadora.

Un algoritmo típico se ve así.

Paso 1: declarar preprocesadores y validables.
Paso 2: lee la entrada
Paso 3: procese la entrada según sea necesario para resolver su problema
Paso 4: muestra la salida
Paso 5: Fin

Esto es muy genérico ya que la pregunta es genérica. Podrá dar una respuesta específica si se proporcionan detalles 🙂

¿Un algoritmo para qué ?

Esa es la pregunta realmente importante. Descubra exactamente lo que hay que hacer. Descubra lo que puede asumir con seguridad. ¿Cuáles son las entradas? ¿Qué sabes sobre la entrada? ¿Qué salida necesitas?

Luego, intente dividir en partes pequeñas lo que hay que hacer. Para cada una de las partes, trate de pensar en una forma de lograr esto. Estudia muchos algoritmos existentes, pueden inspirarte para otras tareas.

¿Necesita algunas estructuras de datos específicas para almacenar la entrada? ¿Para almacenar datos temporales? Para la salida?

Luego, átalo todo junto.

Una vez que tenga un algoritmo de trabajo, respire. Lo estás haciendo bien. El siguiente bit muy importante: ¿cómo maneja su algoritmo los “casos límite”? Estas son entradas que son “especiales”. Por ejemplo, para un algoritmo de ordenación, ¿qué sucede si le da una lista vacía ? ¿Qué sucede con una lista con un solo elemento? ¿O si todos los elementos son iguales? ¿Su algoritmo todavía funciona?

A medida que adquieras más experiencia, comenzarás a ocuparte de estos casos mientras creas tu solución original. No se preocupe demasiado si ese no es el caso todavía: necesitará práctica y con la práctica mejorará en esto.

El siguiente paso es donde debes ser creativo. ¿Puedes pensar en una mejor manera de hacerlo? Para esto, podría ser útil analizar cuál es la “complejidad de tiempo” de su solución. Si le das una entrada que es el doble de grande, ¿tomará el doble de tiempo? ¿Cuatro veces más? ¿Puedes dar una explicación de por qué no se puede hacer más rápido?

¿Quizás podría usar una estructura de datos diferente y eso podría ayudar? Por ejemplo, dada una lista, descubrir si algún elemento aparece dos veces puede llevar tiempo cuadrático si solo mira el primer elemento, verifica si ocurre en algún otro lugar de la lista; luego verifique el segundo elemento, y así sucesivamente. Pero, puede ordenar la entrada (lo que lleva [math] n \ log (n) [/ math] tiempo usando un método de clasificación inteligente) y luego puede ir a través de la lista, verificando si dos elementos uno al lado del otro son mismo. ¡Mucho mas rápido!

Este tipo de cosas necesita más práctica. Estudie varios algoritmos y estructuras de datos.

¡Buena suerte!

Cuando se encuentra en el proceso de aprendizaje de algoritmos, la mejor manera es escribir código real (lo más común probablemente sea usar C ++ en estilo C, es decir, sin OOP, pero C ++ es aún mejor que C debido a STL). digamos, pero si prefieres otro idioma, elige ese) porque es la única forma de saber si realmente hiciste todo bien: puedes enviar la solución a un juez en línea y si te encuentras bien, entonces te conoces [casi seguro 😉] ha escrito el código correcto, lo que significa que realmente entendió los detalles del algoritmo. Si no escribe el código real de lo que a menudo puede suceder, está absolutamente seguro de que sabe cómo lo habría implementado, pero solo cuando realmente intenta la implementación, ve algún pequeño problema que pasó por alto y que requiere repensar una gran parte de concepto.

A medida que avanza en el aprendizaje, en algún momento, implementar demasiado comienza a tener menos sentido debido a tomar demasiado tiempo, ya que definitivamente es mejor pasar el mismo tiempo para aprender más cosas o resolver (en el nivel conceptual) más ejercicios en lugar de dedicarlos. también escribe implementaciones reales de todo lo que estás aprendiendo. Entonces, el mejor enfoque es el que más le guste, si siente que no está seguro de los detalles, puede intentar escribir un pseudocódigo, si no ve problemas, tal vez solo tenga la prueba de corrección pensada en tu cabeza sin escribir nada es suficiente para gastar en la tarea y pasar a la siguiente.