ALGORITMO
¿Qué
es un algoritmo?
Por
algoritmo, se
entiende a un conjunto finito de instrucciones que se deben
seguir para resolver un problema. No obstante, desde el punto de vista de la
programación de ordenadores, la definición del algoritmo como la especificación
de una serie de pasos, es incompleta. Debe observarse que los ordenadores son
equipos que tienen limitaciones físicas en cuanto a capacidad de almacenamiento
y procesamiento. Por consiguiente debemos refinar un poco más nuestra
definición de algoritmo para hacerla aplicable de manera efectiva en el ámbito
de la informática.
El algoritmo es un
conjunto de pasos, instrucciones o acciones que se deben seguir para resolver
un problema. Existen una gran cantidad de algoritmos, hay que escoger el más
efectivo. Hay dos tipos de algoritmos que son los cualitativos y cuantitativos, cualitativos son
todos aquellos pasos o instrucciones descritos por medio de palabras que sirven
para llegar a la obtención de una respuesta o solución de un problema, y cuantitativos son
todos aquellos pasos o instrucciones que involucran cálculos numéricos para
llegar a un resultado satisfactorio.
·
Tiene que ser preciso.
·
Tiene que estar bien definido.
·
Tiene que ser finito.
·
La programación es adaptar el algoritmo al ordenador.
·
El algoritmo es independiente según donde lo implemente.
Definición: Un algoritmo se entiende como una sucesión finita de pasos
que debe cumplir las siguientes especificaciones:
·
Cada paso del algoritmo debe estar bien definido: Esto significa
que la definición de un paso debe ser suficientemente clara, para que una
persona pueda entenderla y realizarla. Si bien no se puede dar un criterio
determinístico para decidir si un paso está bien definido, debemos apelar al
sentido común para decidir que un paso está especificado sin ambigüedades.
·
Un algoritmo debe tener un principio y un fin: Un programa es
un algoritmo escrito con un objetivo: conseguir un resultado. No tiene sentido
crear un programa que espere ~ segundos (infinitos segundos) y luego escriba en
pantalla "Hola Mundo!", del mismo modo que un algoritmo debe tener un
principio bien definido (tampoco tiene sentido el algoritmo "haz nada, y
luego escribe Hola Mundo!")
Un modelo
computacional es un modelo matemático en las ciencias de la computación que
requiere extensos recursos computacionales para estudiar el comportamiento de
un sistema complejo por medio de la simulación por computadora. El sistema bajo
estudio es a menudo un sistema complejo no lineal para el cual las soluciones
analíticas simples e intuitivas no están fácilmente disponibles. En lugar de
derivar una solución analítica matemática para el problema, la experimentación
es hecha con el modelo cambiando los parámetros del sistema en la computadora,
y se estudian las diferencias en el resultado de los experimentos. Las teorías
de la operación del modelo se pueden derivar/deducir de estos experimentos de
computacionales.
Ejemplos de modelos de
computacionales comunes son modelos de el pronóstico del tiempo, modelos del
Earth Simulator, modelos de simulador de vuelo, modelos de plegamiento
molecular de proteínas, y modelos de red neuronal.
Se considera a los
algoritmos al conjunto de pasos ordenados, que permiten resolver un problema
bajo una secuencia lógica, es decir, que tenga inicio y fin (sentido concreto).
Programas:
Algoritmos para ser ejecutados por un ordenador
Un ordenador o computadora está, desde que se enciende hasta que se apaga
totalmente, ejecutando un algoritmo. Por lo general, estos algoritmos, escritos
para que los entienda una máquina, terminan siendo vagos y confusos para la
mayoría de quienes no han estudiado programación. Una máquina no puede entender
"escribe Hola Mundo!" porque no sabe lo que es "escribe" ni
lo que es una letra o un espacio, ni lo que es una pantalla. En cambio, puede
entender "mov eax, 0x23afb31" (escribir en el registro eax el número
0x23afb31), aunque nosotros no. Un ordenador es solo un circuito electrónico,
no funciona a base de magia ni nada por el estilo.
Debido a lo dificil
que es escribir en lenguaje máquina, e incluso en ensamblador, se crearon
diferentes lenguajes de programación, más o menos parecidos al inglés actual y
a cómo se redacta un algoritmo. Estos lenguajes proveen de cosas tan complejas
para una máquina como los bucles for. Los compiladores se encargan de traducir
esos ficheros al lenguaje ensamblador que corresponda, el ensamblador de
traducirlos a lenguaje. máquina y el enlazador de juntar todo ese código
máquina en un solo archivo, el programa. Y el microprocesador, se encarga de ir
encendiendo o apagando transistores según lo que le diga el código máquina. Es
facil entender el lenguaje de alto nivel en comparacion al lenguaje maquina
pero de la evolucion surgieron
¿Qué
instrucciones ejecuta un ordenador?
Lenguaje de máquina
Cada tipo de
microprocesador contiene un conjunto de instrucciones que realizan ciertas
operaciones sobre una o más palabras de bits; las instrucciones van también
codificadas en bits. No queremos hacer aquí una discusión sobre arquitectura de
ordenadores, por lo que con esto debe valer por ahora.
Se entiende que
escribir sólo con dos teclas, el 0 y el 1, es incómodo. Históricamente, a la
hora de diseñar un algoritmo para que el ordenador ejecutara, se escribía
mediante unas etiquetas memotécnicas; éste fue el origen del lenguaje ensamblador.
Por ejemplo quizás en
una cierta arquitectura la instrucción de borrado de memoria (Memory Clear, en
inglés) corresponda al código 010. Pronto surgieron programas que leían,
siguiendo el ejemplo, MC, y lo sustituían por 010.
Lenguaje ensamblador
El código máquina
tenía dos grandes inconvenientes para los programadores:
·
las instrucciones eran difíciles de recordar, ya que no guardaban relación
con la operación que se está realizando.
·
puede haber, y de hecho hay, diferencias entre las instrucciones de un
procesador a otro.
Todo esto ha llevado a
"poner nombre" a las instrucciones de código máquina de manera que a
una secuencia concreta de bits que realiza una operación se le pone un nombre
sencillo que identifique la operación. Esta traducción a un lenguaje más sencillo
para las personas resulta en una mayor comodidad para el programador, además el
proceso de traducción inverso de lenguaje ensamblador a código máquina puede
ser realizado por un sencillo programa.