jueves, 30 de abril de 2015

Algoritmo

Un algoritmo  es un conjunto prescrito de instrucciones 

reglas bien definidas, ordenadas y finitas que permite 

realizar una actividad mediante pasos sucesivos que no 

generen dudas a quien deba realizar dicha actividad. Dados 

un estado inicial y una entrada, siguiendo los pasos 

sucesivos se llega a un estado final y se obtiene una 

solución. Los algoritmos son el objeto de estudio de 

la algoritmia.



DEFINICIÓN  FORMAL

En general, no existe ningún consenso definitivo en cuanto a

la definición formal de algoritmo. Muchos autores los 

señalan 

como listas de instrucciones para resolver un cálculo o 

un problema abstracto, es decir, que un número finito de 

pasos convierten los datos de un problema (entrada) en una 

solución (salida). Sin embargo cabe notar que algunos 

algoritmos no necesariamente tienen que terminar o 

resolver 

un problema en particular. Por ejemplo, una versión 

modificada de la criba de Eratóstenes que nunca termine de 

calcular números primos no deja de ser un algoritmo.








TIEMPO SECUENCIAL

Un algoritmo funciona en tiempo discretizado –paso a 

paso–, 

definiendo así una secuencia de estados "computacionales

por cada entrada válida (la entrada son los datos que se le 

suministran al algoritmo antes de comenzar).



ESTADO ABSTRACTO

Cada estado computacional puede ser descrito formalmente 

utilizando una estructura de primer orden y cada algoritmo 

es 

independiente de su implementación (los algoritmos son 

objetos abstractos) de manera que en un algoritmo las 

estructuras de primer orden son invariantes bajo 

isomorfismo.


EXPLORACIÓN ACOTADA

 La transición de un estado al siguiente queda 

completamente determinada por una descripción fija y finita; 

es decir, entre cada estado y el siguiente solamente se 

puede tomar en cuenta una cantidad fija y limitada de 

términos del estado actual.


TIPOS DE ALGORITMOS

CUALITATIVOS

Son aquellos en los que se describen los pasos utilizando palabras.

CUANTITATIVOS

Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso.

  

MEDIOS DE EXPRESIÓN DE UN 

ALGORITMO


Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje 

natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones 

en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo 

evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas 

para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de 

programación específico.

La descripción de un algoritmo usualmente se hace en tres niveles:


DESCRIPCIÓN DE ALTO NIVEL

Se establece el problema, se selecciona un modelo 

matemático y se explica el algoritmo de manera 

verbal, posiblemente con ilustraciones y omitiendo detalles.


DESCRIPCIÓN NORMAL

Se usa pseudocódigo para describir la secuencia de pasos 

que encuentran la solución.


IMPLEMENTACIÓN

Se muestra el algoritmo expresado en un lenguaje de 

programación específico o algún objeto capaz de llevar a 

cabo instrucciones.




DISEÑO DEL ALGORITMO


Las características de un buen algoritmo son:

- Debe tener un punto particular de inicio.

- Debe ser definido, no debe permitir dobles interpretaciones.

- Debe ser general, es decir, soportar la mayoria de las variantes que se puedan presentar en la definición del problema.

- Debe ser finito en tamaño y tiempo de ejecución.











DIAGRAMAS DE FLUJO


El diagrama de flujo o diagrama de actividades es 
la representación gráfica del algoritmo o proceso. Se utiliza 
en disciplinas como programacióneconomíaprocesos 
industriales y psicología cognitiva.

En Lenguaje Unificado de Modelado (UML), un diagrama de 
actividades representa los flujos de trabajo paso a paso de 
negocio y operacionales de los componentes en un sistema. 
Un diagrama de actividades muestra el flujo de control 
general.

En SysML el diagrama ha sido extendido para indicar flujos 
entre pasos que mueven elementos físicos (p.ej., gasolina) o 
energía (p.ej., presión). Los cambios adicionales permiten al 
diagrama soportar mejor flujos de comportamiento y datos 
continuos.

Estos diagramas utilizan símbolos con significados definidos 
que representan los pasos del algoritmo, y representan el 
flujo de ejecución mediante flechas que conectan los puntos 
de inicio y de fin de proceso.


NORMAS DE TRABAJO

Un diagrama de flujo presenta generalmente un único punto 
de inicio y un único punto de cierre, aunque puede tener 
más, siempre que cumpla con la lógica requerida.

Las siguientes son acciones previas a la realización del 
diagrama de flujo:

  • Identificar las ideas principales al ser incluidas en el diagrama de flujo. Deben estar presentes el autor o responsable del proceso, los autores o responsables del proceso anterior y posterior y de otros procesos interrelacionados, así como las terceras partes interesadas.
  • Definir qué se espera obtener del diagrama de flujo.
  • Identificar quién lo empleará y cómo.
  • Establecer el nivel de detalle requerido.
  • Determinar los límites del proceso a describir.
Los pasos a seguir para construir el diagrama de flujo son:
  • Establecer el alcance del proceso a describir. De esta manera quedará fijado el comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del proceso previo y el final la entrada al proceso siguiente.
  • Identificar y listar las principales actividades/subprocesos que están incluidos en el proceso a describir y su orden cronológico.
  • Si el nivel de detalle definido incluye actividades menores, listarlas también.
  • Identificar y listar los puntos de decisión.
  • Construir el diagrama respetando la secuencia cronológica y asignando los correspondientes símbolos.
  • Asignar un título al diagrama y verificar que esté completo y describa con exactitud el proceso elegido.



TIPOS DE DIAGRAMA DE FLUJO

  • Formato vertical: En él, el flujo y la secuencia de las operaciones, va de arriba hacia abajo. Es una lista ordenada de las operaciones de un proceso con toda la información que se considere necesaria, según su propósito.

  • Formato horizontal: En él, el flujo o la secuencia de las operaciones, va de izquierda a derecha.

  • Formato panorámico: El proceso entero está representado en una sola carta y puede apreciarse de una sola mirada mucho más rápido que leyendo el texto, lo que facilita su comprensión, aun para personas no familiarizadas. Registra no solo en línea vertical, sino también horizontal, distintas acciones simultáneas y la participación de más de un puesto o departamento que el formato vertical no registra.

  • Formato Arquitectónico: Describe el itinerario de ruta de una forma o persona sobre el plano arquitectónico del área de trabajo. El primero de los flujogramas es eminentemente descriptivo, mientras que los utilizados son fundamentalmente representativos.


SIMBOLOGÌA Y SIGNIFICADO

  • Óvalo o Elipse: Inicio y término (Abre y cierra el diagrama).

  • Rectángulo: Actividad (Representa la ejecución de una o más actividades o procedimientos).

  • Rombo: Decisión (Formula una pregunta o cuestión).

  • Círculo: Conector (Representa el enlace de actividades con otra dentro de un procedimiento).

  • Triángulo boca abajo: Archivo definitivo (Guarda un documento en forma permanente).

  • Triángulo boca arriba: Archivo temporal (Proporciona un tiempo para el almacenamiento del documento).





SOFTWARE PARA DISEÑO DE DIAGRAMA DE FLUJO


Actualmente existe una gran cantidad de software para la elaboración de diagramas de flujo:

  • Microsoft Office ofrece 3 herramientas útiles para la elaboración de diagramas. Uno de ellos es Microsoft Office Word, que nos permite crear diagramas de flujo básicos a través de la opción "Formas" que tiene un apartado especial para diagramas de flujo. De igual manera Microsoft Office Power Point ofrece las mismas opciones para crear los diseños de diagramas de flujo. Otra herramienta un poco más sofisticada es Microsoft Office Visio, que además de la simbología básica de los diagramas de flujo cuenta con una variedad de herramientas para elaborar otros tipos de diagramas como es el caso diagramas UML entre otros tipos de diagramas de flujo.

  • Otro programa eficiente y muy fácil de usar es el programa "Dia" que brinda una solución rápida para la creación de diagramas de flujo además de otro tipo de diagramas usados en el ambiente informático. Es considerado la versión no comercial de Microsoft Visio.





PSEUDOCODIGOS

En ciencias de la computación, y análisis numérico
el pseudocódigo (o falso lenguaje) es una descripción 
de alto nivel compacta e informal del principio operativo de 
unprograma informático u otro algoritmo.

Utiliza las convenciones estructurales de un lenguaje de 
programación real, pero está diseñado para la lectura 
humana en lugar de la lectura mediante máquina, y con 
independencia de cualquier otro lenguaje de programación. 

Normalmente, el pseudocódigo omite detalles que no son 
esenciales para la comprensión humana del algoritmo, tales 
como declaraciones de variables, código específico del 
sistema y algunas subrutinas. El lenguaje de programación 
se complementa, donde sea conveniente, con descripciones 
detalladas en lenguaje natural, o con notación matemática 
compacta. Se utiliza pseudocódigo pues este es más fácil de 
entender para las personas que el código del lenguaje de 
programación convencional, ya que es una descripción 
eficiente y con un entorno independiente de los principios 
fundamentales de un algoritmo. Se utiliza comúnmente en 
los libros de texto y publicaciones científicas que se 
documentan varios algoritmos, y también en la planificación 
del desarrollo de programas informáticos, para esbozar la 
estructura del programa antes de realizar la efectiva 
is estándar para el pseudocódigo, aunque los ocho IDE's 
que manejan pseudocódigo tengan su sintaxis propia. 
Aunque sea parecido, el pseudocódigo no debe confundirse 
con los programas esqueleto que incluyen código ficticio, 
que pueden ser compilados sin errores. Los diagramas de 
flujo y UML pueden ser considerados como una alternativa 
gráfica al pseudocódigo, aunque sean más amplios en papel.


APLICACIONES

Generalmente se utiliza pseudocódigo en los libros de texto 
y publicaciones científicas relacionadas con la informática y 
la computación numérica, para la descripción de algoritmos, 
de manera que todos los programadores puedan entenderlo, 
aunque no todos conozcan el mismo lenguaje de 
programación. Generalmente, en los libros de texto se 
adjunta una explicación que acompaña a la introducción y 
que explica las convenciones particulares en uso. El nivel de 
detalle del pseudocódigo puede, en algunos casos, 
acercarse a la de formalizar los idiomas de propósito 
general.

Un programador que tiene que aplicar un algoritmo 
específico, sobre todo uno desfamiliarizado, generalmente 
comienza con una descripción en pseudocódigo, y luego 
"traduce" esa descripción en el lenguaje de programación 
meta y lo modifica para que interactúe correctamente con el 
resto del programa. Los programadores también pueden 
iniciar un proyecto describiendo la forma del código en 
pseudocódigo en el papel antes de escribirlo en su lenguaje 
de programación, como ocurre en la estructuración de un 
enfoque de Top-down y Bottom-up arriba hacia abajo.


SINTAXIS

En la actualidad y por lo general, el pseudocódigo, como su 
nombre lo indica, no obedece a las reglas de sintaxis de 
ningún idioma en particular ni es de forma estándar 
sistemática, a pesar de que cualquier escritor en particular 
vaya a pedir prestado las estructuras de control general, la 
sintaxis y el estilo, por ejemplo, de algún lenguaje de 
programación convencional. Pero en caso de que se quiera 
ejecutar, se debe llevar a forma tipo, para que no genere 
mensajes de error. Las fuentes populares incluyen la sintaxis 
de PascalBASICCC++JavaLisp, y ALGOL. Por lo 
general, se omiten las declaraciones de variables. A veces, 
las llamadas a funciones, los bloques de código y el código 
contenido dentro de un loop se remplazan por una sentencia 
de una línea en lenguaje natural.

Dependiendo del escritor, el pseudocódigo puede variar 
mucho en su estilo, yendo desde en un extremo, una 
imitación casi exacta de un lenguaje de programación real, 
hasta al acercarse a una descripción en prosa de formato de 
pseudocódigo en el otro extremo.

FUNCIONES Y OPERACIONES

Cada autor usa su propio pseudocódigo con sus respectivas 
convenciones. Por ejemplo, la instrucción "reemplace el 
valor 
de la variable x por el valor de la variable y" puede ser 
representado como:

  • asigne a x\, el valor de y\,



   { \color{OliveGreen} \mathit{ x }} \;
   { \color{BlueViolet}  \mathit{ \gets }} \;
   { \color{OliveGreen} \mathit{ y; }}

   { \color{OliveGreen} \mathit{ x }} \;
   { \color{BlueViolet}  \mathit{ := }} \;
   { \color{OliveGreen} \mathit{ y; }}

   { \color{OliveGreen} \mathit{ x }} \;
   { \color{BlueViolet}  \mathit{ = }} \;
   { \color{OliveGreen} \mathit{ y; }}

Las operaciones aritméticas se representan de la forma 
usual en matemáticas.


   { \color{Gray}  \mathit{ \{ Esto \; es \; un \; comentario \; normalmente \; matem \acute{a} tico \} }}

   { \color{OliveGreen} \mathit{ volumen }} \;
   { \color{BlueViolet}  \mathit{ \gets }} \;
   { \color{Red}  \mathit{ \pi }}
   { \color{OliveGreen} \mathit{ r }} {}^2
   { \color{OliveGreen} \mathit{ h }}

   { \color{Gray}  \mathit{ // y \; este \; es \; otro \; comentario \; normalmente \; de \; texto // }}

   { \color{OliveGreen} \mathit{ hipotenusa }} \;
   { \color{BlueViolet}  \mathit{ \gets }} \;
   \sqrt{
      { \color{OliveGreen} \mathit{ a }} {}^2 \;
      { \color{BlueViolet}  \mathit{ + }} \;
      { \color{OliveGreen} \mathit{ b }} {}^2 \;
   }

   { \color{OliveGreen} \mathit{ resultado }} \;
   { \color{BlueViolet}  \mathit{ \gets }} \;
   { \color{Tan}   \mathit{ sin }}
   (
      { \color{OliveGreen} \mathit{ a }}
   )



DESARROLLO DE ALGORITMOS

Con este pseudocódigo se puede desarrollar cualquier algoritmo que:

  • Tenga un único punto de inicio.

  • Tenga un número finito de posibles puntos de término.

  • Haya un número finito de caminos, entre el punto de inicio y los posibles puntos de término.