Você está na página 1de 13

Anlisis de algoritmos Como medida de la eficiencia de un algoritmo, se suelen estudiar los recursos (memoria y tiempo) que consume el algoritmo.

El anlisis de algoritmos se ha desarrollado para obtener valores que de alguna forma indiquen (o especifiquen) la evolucin del gasto de tiempo y memoria en funcin del tamao de los valores de entrada. El anlisis y estudio de los algoritmos es una disciplina de las ciencias de la computacin y, en la mayora de los casos, su estudio es completamente abstracto sin usar ningn tipo de lenguaje de programacin ni cualquier otra implementacin; por eso, en ese sentido, comparte las caractersticas de las disciplinas matemticas. As, el anlisis de los algoritmos se centra en los principios bsicos del algoritmo, no en los de la implementacin particular. Una forma de plasmar (o algunas veces "codificar") un algoritmo es escribirlo en pseudocdigo o utilizar un lenguaje muy simple tal como Lexico, cuyos cdigos pueden estar en el idioma del programador. Algunos escritores restringen la definicin de algoritmo a procedimientos que deben acabar en algn momento, mientras que otros consideran procedimientos que podran ejecutarse eternamente sin pararse, suponiendo el caso en el que existiera algn dispositivo fsico que fuera capaz de funcionar eternamente. En este ltimo caso, la finalizacin con xito del algoritmo no se podra definir como la terminacin de ste con una salida satisfactoria, sino que el xito estara definido en funcin de las secuencias de salidas dadas durante un periodo de vida de la ejecucin del algoritmo. Por ejemplo, un algoritmo que verifica que hay ms ceros que unos en una secuencia binaria infinita debe ejecutarse siempre para que pueda devolver un valor til. Si se implementa correctamente, el valor devuelto por el algoritmo ser vlido, hasta que evale el siguiente dgito binario. De esta forma, mientras evala la siguiente secuencia podrn leerse dos tipos de seales: una seal positiva (en el caso de que el nmero de ceros sea mayor que el de unos) y una negativa en caso contrario. Finalmente, la salida de este algoritmo se define como la devolucin de valores exclusivamente positivos si hay ms ceros que unos en la secuencia y, en cualquier otro caso, devolver una mezcla de seales positivas y negativas. La resolucin de un problema mediante un ordenador consiste en el proceso que a partir de la descripcin de un problema, expresado habitualmente en lenguaje natural y en trminos propios del dominio del problema, permite desarrollar un programa que resuelva dicho problema. Este proceso exige los siguientes pasos: Anlisis del problema. Diseo o desarrollo de un algoritmo. Transformacin del algoritmo en un programa (codificacin). Ejecucin y validacin del programa.

Los dos primeros pasos son los ms difciles del proceso. Una vez analizado el problema y obtenido un algoritmo que lo resuelva, su transformacin a un programa de ordenador es una tarea de mera traduccin al lenguaje de programacin deseado.

Anlisis del problema Cuando un usuario plantea a un programador un problema que resolver mediante su ordenador, por lo general ese usuario tendr conocimientos ms o menos amplios sobre el dominio del problema, pero no es habitual que tenga conocimientos de informtica. Por ejemplo, un contable que necesita un programa para llevar la contabilidad de una empresa ser un experto en contabilidad (dominio del problema), pero no tiene por qu ser experto en programacin. Del mismo modo, el informtico que va a resolver un determinado problema puede ser un experto programador, pero en principio no tiene por qu conocer el dominio del problema; siguiendo el ejemplo anterior, el informtico que hace un programa no tiene por qu ser un experto en contabilidad. Por ello, al abordar un problema que se quiere resolver mediante un ordenador, el programador necesita de la experiencia del experto del dominio para entender el problema. Al final, si se quiere llegar a una solucin satisfactoria es necesario que: El problema est bien definido con el mximo detalle Las especificaciones de las entradas y salidas del problema, deben ser descritas tambin en detalle: Qu datos son necesarios para resolver el problema? Qu informacin debe proporcionar la resolucin del problema?

[editar]Diseo del algoritmo Un algoritmo consiste en una especificacin clara y concisa de los pasos necesarios para resolver un determinado problema, pero para poder disear algoritmos es necesario disponer de una notacin, que llamaremos notacin algortmica, que permita: Describir las operaciones puestas en juego (acciones, instrucciones, comandos,...) Describir los objetos manipulados por el algoritmo (datos/informaciones) Controlar la realizacin de las acciones descritas, indicando la forma en que estas se organizan en el tiempo Para poder describir cualquier tipo de accin de las que intervienen en un algoritmo, diversos autores proponen el uso de un conjunto de construcciones lgicas (secuencia, decisin e iteracin) con las que es

posible escribir cualquierprograma. Lo que sigue a continuacin es la descripcin de las diferentes construcciones disponibles para el diseo de algoritmos. [editar]Acciones elementales Se entiende por acciones elementales aquellas que el ordenador es capaz de realizar y que sern de dos tipos: Aritmtico lgicas: Operaciones que, a partir de unos determinados datos, realizan un clculo aritmtico (suma, resta, multiplicacin,...) o un clculo lgico (mayor que, menor que, igual que,...).Las primeras devuelven un valor numrico (4, -5.67,...) y las segundas un valor lgico (verdadero o falso). De entrada salida: Acciones que permiten capturar datos para su posterior tratamiento (las de entrada) y guardar los resultados de dicho tratamiento (las de salida).

Secuencia de acciones elementales Cuando en un algoritmo se deben ejecutar varias acciones sucesivamente, stas se describen una detrs de otra segn el orden en que deban ejecutarse. Si se desea se puede emplear algn tipo de smbolo para separar dos acciones consecutivas. En el siguiente ejemplo se nuestra la descripcin de n acciones separadas por punto y coma (smbolo que habitualmente se emplea como separador). Accin 1; Accin 2; Accin n; Composicin condicional mltiple Tambin es posible que a la hora de especificar la ejecucin de una accin haya que escoger sta entre varias dependiendo del valor de una determinada variable (o indicador). Este caso se expresa del siguiente modo: Seleccionar Indicador Caso Valor 1: Accin 1; Caso Valor 2: Accin 2; FinCaso En esta construccin Indicador debe tener un determinado valor que en caso de coincidir con alguno de los n valores provocar la ejecucin de la accin asociada a dicho valor. Si el valor del Indicador no coincidiera

con ninguno de los especificados se ejecutar la Accin X. No tiene por qu haber una Accin X para cuando el Indicador' no coincida con ninguno de los n valores; en ese caso, si el Indicador' no coincide con ningn valor no se ejecutara ninguna accin. Al igual que en los casos anteriores, todas las acciones que aparecen en esta estructura (Accin 1, Accin 2,..., Accin n y Accin X) pueden referirse a una nica accin o a un conjunto de ellas. Composicin iterativa o bucle Cuando una accin o conjunto de acciones debe ejecutarse varias veces se recurre a una estructura iterativa o bucle. En este tipo de estructuras se necesita una condicin que determine cuando terminan las iteraciones. Dependiendo de si esa condicin se evala al principio o al final de la estructura y de si la condicin para que las iteraciones continen debe ser verdadera o falsa, se pueden definir cuatro construcciones iterativas distintas: La condicin de terminacin ha de ser FALSA Condicin al principio de la estructura Mientras Condicin Hacer Accin; FinMientras (Estructura 2) Hasta Condicin Hacer Accin; FinHasta Condicin al final de la estructura (Estructura 3) Hacer Accin; Mientras Condicin; (Estructura 4) Hacer Accin; Hasta Condicin; Sobre las cuatro construcciones que se acaban de presentar cabe hacer las siguientes observaciones: La condicin de terminacin ha de ser VERDADERA

(Estructura 1)

Si en las estructuras 1 y 2, cuando se evala la Condicin, sta toma por primera vez un valor tal que no permita ejecutar la Accin (FALSO en la 1 y VERDADERO en la 2), sta no se ejecutar ninguna vez. Es decir, puede ocurrir que la Accin, en las estructuras 1 y 2, no se ejecute nunca. En las estructuras 3 y 4, al estar la Condicin de terminacin al final, la Accin se ejecutar antes de que la condicin se evale por primera vez, por lo que aunque la Condicin tome un valor tal que no se permita realizar ms iteraciones, la Accin se ejecutar al menos una vez. Si las Condiciones de las estructuras 1 y 2 son complementarias, es decir, que siempre que una es verdadera la otra es falsa y viceversa (ejemplo: *a > b+ y *a b+ son condiciones complementarias), entonces ambas estructuras son equivalentes ya que en ambas la Accin se ejecutar el mismo nmero de veces. De forma anloga, si las Condiciones de las estructuras 3 y 4 son complementarias tambin ambas estructuras sern equivalentes. Existe una construccin especial para indicar una repeticin de acciones que se suele emplear cuando se quiere que dicha repeticin se realice un nmero determinado de veces: Para i = 1 Hasta n Hacer Accin; FinPara En este caso la Accin se repetir n veces e i ser una variable que tomar todos los valores entre 1 y n (ambos inclusive) en cada una de las sucesivas repeticiones. Esta construccin, aunque de apariencia diferente a las anteriores, se podra expresar como un caso particular de la estructura 1 del siguiente modo: i = 1; Mientras i <= n Hacer Accin; i = i + 1; FinMientras En este caso la condicin de finalizacin del bucle es que la variable i sea mayor que n y siempre, al finalizar la ejecucin de la Accin, i se incrementa en una unidad antes de volver a evaluar la Condicin para el nuevo valor de i. ALGORITMOS Y PROGRAMAS Resolucin de problemas por computadoras La principal razn para que las personas aprendan lenguajes de programacin es utilizar un ordenador como una herramienta para la resolucin de problemas. Tres fases pueden ser identificadas en el proceso de resolucin : - Fase de Identificacin (qu nos plantean)

- Fase de resolucin del problema - Fase de implementacin (realizacin) en un lenguaje de programacin Fase de resolucin del problema Esta fase incluye, a su vez, el anlisis del problema as como el diseo y posterior verificacin del algoritmo. Anlisis del problema El primer paso para encontrar la solucin a un problema es el anlisis del mismo. Se debe examinar cuidadosamente el problema a fin de obtener una idea clara sobre lo que se solicita y determinar los datos necesarios para conseguirlo. Diseo del algoritmo Un algoritmo puede ser definido como la secuencia ordenada de pasos, sin ambigedades, que conducen a la resolucin de un problema dado y expresado en lenguaje natural, por ejemplo el castellano, Todo algoritmo debe ser:Metodologa de Programacin, Programacin en C, Aplicaciones electrnicas 2 / 47 Tcnicas de Programacin 1 Parte: Metodologa de Programacin - Preciso: Indicando el orden de realizacin de cada uno de los pasos. - Definido: Si se sigue el algoritmo varias veces proporcionndole ( consistente ) los mismos datos, se deben obtener siempre los mismos resultados. - Finito: Al seguir el algoritmo, este debe terminar en algn momento, es decir tener un nmero finito de pasos. Para disear un algoritmo se debe comenzar por identificar las tareas ms importantes para resolver el problema y disponerlas en el orden en el que han de ser ejecutadas. Los pasos en esta primera descripcin pueden requerir una revisin adicional antes de que podamos obtener un algoritmo claro, preciso y completo. Este mtodo de diseo de algoritmos en etapas, yendo de los conceptos generales a los de detalle, se conoce como mtodo descendente (top-down). En un algoritmo se deben de considerar tres partes: - Entrada: Informacin dada al algoritmo. - Proceso:Operaciones o clculos necesarios para encontrar la solucin del problema. - Salida: Respuestas dadas por el algoritmo o resultados finales de los procesos realizados. Definicin de lenguaje Un lenguaje de programacin es aquel que se utiliza para escribir programas de computadora que puedan ser entendidos por ellas. Estos lenguajes se clasifican en tres grandes categoras:

Lenguaje Mquina. Lenguaje de Bajo Nivel (Ensamblador) Lenguaje de Alto Nivel. Se puede definir tambin como cualquier lenguaje artificial que puede utilizarse para definir una secuencia de instrucciones para su procesamiento por un ordenador o computadora. Definicin de algoritmo Un algoritmo es una secuencia finita de instrucciones; cada una de estas instrucciones tiene un significado preciso y se puede ejecutar con una cantidad finita de esfuerzo en un tiempo finito. Un algoritmo se define como un mtodo que se realiza paso a paso para la solucin de un problema que termina en un nmero finito de pasos. -Las caractersticas fundamentales que debe cumplir un algoritmo son: Debe ser preciso e indicar el orden. Diseo del algoritmo que describe la secuencia ordenada de pasos, sin ambigedades, que conducen a la solucin de un problema dado (Anlisis del problema y desarrollo del algoritmo). Debe ser definido. Si se sigue un algoritmo dos veces se debe obtener el mismo resultado cada vez. Expresar el algoritmo como un programa en un lenguaje de programacin adecuado (Fase de codificacin). Debe ser finito. Si se sigue un algoritmo, se debe terminar en algn momento; osea debe tener un nmero finito de pasos. Ejecucin y validacin del programa por la computadora. La definicin de un Algoritmo debe describir tres partes: Algoritmos cotidianos Se refiere a todos aquellos algoritmos que nos ayudan a resolver problemas diarios, y que hacemos casi sin darnos cuenta que estamos siguiendo una metodologa para resolverlos. -Algunos ejemplos son: *Disear un algoritmo para cambiar una llanta de un coche: 1.- Inicio. 2.- Traer gato. 3.- Levantar el coche con el gato. 4.- Aflojar tornillos de las llantas. 5.- Sacar los tornillos de las llantas. 6.- Quitar la llanta. 7.- Poner la llanta de repuesto. 8.- Poner los tornillos. 9.- Apretar tornillos. 10.- Bajar el gato. 11.- Fin. *Un cliente ejecuta un pedido a una fbrica; la fbrica examina en su banco de datos la ficha del cliente, si el cliente es solvente entonces la empresa acepta el pedido, en caso contrarios rechazar el pedido. Inicio Leer pedido Examinar ficha del cliente Si el cliente es solvente aceptar el pedido; en caso contrario rechazar el pedido, FIN.

Definicin de lenguajes algortmicos Los algoritmos pueden describirse utilizando muchos lenguajes. Cada lenguaje permite describir los pasos con mayor o menor detalle. La clasificacin de los lenguajes algortmicos es la siguiente: Lenguaje Natural. Lenguaje de Diagrama de Flujo. Lenguaje Natural de Programacin. Lenguaje de Programacin de Algoritmos. Lenguaje Natural.- Es aquel que describe los pasos a seguir utilizando un vocabulario cotidiano. Se le conoce como lenguaje jerga cuando se utiliza en trminos especializados de una determinada ciencia, profesin o grupo. Lenguaje de Diagrama de Flujo.- Es aquel que se vale de diversos smbolos para representar las ideas o acciones a desarrollar. Es til para organizar las acciones o pasos de un algoritmo pero requiere de etapas posteriores para implementarse en un sistema de cmputo. Lenguaje Natural de Programacin.- Son aquellos que estn orientados a la solucin de problemas que se definen de una manera precisa. Generalmente son aplicados para la elaboracin de frmulas o mtodos cientficos. Tienen las siguientes caractersticas: Evita la ambigedad (algo confuso que se puede interpretar de varias maneras). Son precisos y bien definidos. Utilizan trminos familiares al sentido comn. Elimina instrucciones innecesarias. Lenguaje de programacin.- Es un conjunto de palabras, smbolos y reglas sintticas mediante los cuales puede indicarse a la computadora los pasos a seguir para resolver un problema. Los principales tipos de lenguajes utilizados son tres: Lenguaje Mquina. Lenguaje de Bajo Nivel ( Ensamblador). Lenguajes de Alto nivel. Lenguaje Mquina.- Este lenguaje es el que entiende directamente a la computadora, utiliza el alfabeto binario que consta de dos nicos smbolos 0 y 1, denominados bits( abreviatura inglesa de nmeros binarios). El lenguaje mquina fue el primer lenguaje utilizado para programar computadoras, pero ste fue sustituido por su dificultad y complicacin.

Lenguaje de bajo nivel (Ensamblador).- En este lenguaje cada instruccin equivale a una instruccin en lenguaje mquina, utilizando para su escritura palabras nemotcnicas en lugar de cadenas de bits. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotcnicas, por ejemplo, nemotcnicos tpicos de operaciones aritmticas son:(en ingls)ADD, SUB, DIV, etc; (en espaol) SUM, RES, DIV, etc. Lenguaje de Alto nivel.- Estos lenguajes son los ms utilizados por los programadores. Un programa escrito en un lenguaje de alto nivel es independiente de la mquina (las instrucciones no dependen del diseo del hardware o de una computadora en particular), por lo que estos programas son portables o transportables. Los programas escritos en lenguaje de alto nivel pueden ser ejecutados con poca o ninguna modificacin en diferentes tipos de computadoras. Historia y aplicacin de los lenguajes algortmicos Los lenguajes permiten expresar los programas o el conjunto de instrucciones que el operador humano desea que la computadora ejecute. Los lenguajes de las primeras computadoras como la ENAC y la EDSAC se componan en el lenguaje real de las mquinas mismas; de esta manera limitaba drsticamente la utilidad de las mismas. Los primeros lenguajes de programacin se conocieron como lenguajes ensambladores. En los lenguajes ensambladores se define un cdigo especial llamado mnemnico para cada una de las operaciones de la mquina y se introduce una notacin especial para especificar el dato con el cual debe realizarse la operacin. En los aos 60's aparecieron los primeros lenguajes de propsito general como COBOL, PASCAL, C, C++, etc., pero el desarrollo de nuevas tecnologas, tanto en la arquitectura de computadoras, como en lenguajes de programacin contina a paso acelerado. Los lenguajes de programacin actuales son conocidos como lenguajes visuales, como por ejemplo: Visual Fox, Visual Basic, Visual C, etc. 2.1 Definicin de problema La definicin del problema est dada en s por el enunciado del problema, el cul debe ser claro y complejo. Es importante que conozcamos exactamente que se desea obtener al final del proceso. 2.2 Anlisis de los datos Para que un problema se pueda definir con precisin se requiere que las especificaciones de entrada y salida sean descritas con detalle ya que esto es un requisito para lograr una solucin. Una vez que el problema se ha definido y comprendido, deben analizarse los siguientes aspectos: Los resultados esperados. Los datos de entrada disponibles.

Para facilitar esta etapa debemos de ponernos en lugar de la computadora deduciendo los elementos que se necesitarn para alcanzar el resultado. 2.3 Diseo de la solucin Las computadoras solo pueden solucionar problemas siempre y cuando se le proporcionen los pasos sucesivos que tiene que realizar, esto se refiere a un algoritmo que resuelva correctamente el problema. -Esta etapa incluye la descripcin del algoritmo resultante en un lenguaje natural de diagrama de flujo o natural de programacin. 2.4 Codificacin La codificacin se refiere a la obtencin de un programa definitivo que pueda ser comprensible para la mquina. Incluye una etapa que se reconoce como compilacin. Programa Fuente.- Est escrito en un lenguaje de programacin y es entendido por el programador. Programa Ejecutable.- Est en lenguaje mquina y es entendido por la mquina. 2.5 Prueba y depuracin Cuando se obtiene el programa ejecutable, este se somete a una prueba con el fin de determinar si resuelve de forma satisfactoria o no el problema planteado. Son muchas las pruebas que se le aplican al programa y por lo general dependen del tipo de problema que se est resolviendo. Generalmente se inicia la prueba de un programa introduciendo datos vlidos, invlidos e incongruentes y se observa como reacciona en cada ocasin. La depuracin consiste en que si existen errores en el programa localizarlos y corregirlos. Si no existen errores, se puede entender al proceso de depuracin como la etapa de refinamiento, en la que se ajustan detalles para optimizar el programa. 2.6 Documentacin En esta etapa se procede a la utilizacin para resolver problemas del tipo que dio origen al diseo del programa. Esta utilizacin no podr ser siempre supervisada por el programador, por tal motivo debe crearse un manual o una gua de operacin de los pasos de la utilizacin del programa. 2.5 Mantenimiento Esta etapa se refiere a las actualizaciones que deban aplicase al programa cuando las circunstancias as lo requieran. Cualquier cambio en el programa se debe reflejar en su documentacin. Los programas deben ser mantenidos mientras dure su ciclo de vida.

Pseudocdigo Mezcla de lenguaje de programacin y espaol (o ingles o cualquier otro idioma) que se emplea, dentro de la programacin estructurada, para realizar el diseo de un programa. En esencial, el Pseudocdigo se puede definir como un lenguaje de especificaciones de algoritmos. En esencial, el Pseudocdigo se puede definir como un lenguaje de especificaciones de algoritmos. Es la representacin narrativa de los pasos que debe seguir un algoritmo para dar solucin a un problema determinado. El Pseudocdigo utiliza palabras que indican el proceso a realizar. Ventajas de utilizar un Pseudocdigo a un Diagrama de Flujo

Ocupa menos espacio en una hoja de papel Permite representar en forma fcil operaciones repetitivas complejas Es muy fcil pasar de Pseudocdigo a un programa en algn lenguaje de programacin. Si se siguen las reglas se puede observar claramente los niveles que tiene cada operacin.

Diagramas estructurados (Nassi-Schneiderman) El diagrama estructurado N-S tambin conocido como diagrama de chapin es como un diagrama de flujo en el que se omiten las flechas de unin y las cajas son contiguas. Las acciones sucesivas se pueden escribir en cajas sucesivas y como en los diagramas de flujo, se pueden escribir diferentes acciones en una caja. Un algoritmo se represente en la siguiente forma:

Estructuras Algortmicas Las estructuras de operacin de programas son un grupo de formas de trabajo, que permiten,

mediante la manipulacin de variables, realizar ciertos procesos especficos que nos lleven a la solucin de problemas. Estas estructuras se clasifican de acuerdo con su complejidad en:

DIAGRAMAS DE FLUJO Se basan en la utilizacin de diversos smbolos para representar operaciones especficas. Se les llama diagramas de flujo porque los smbolos utilizados se conectan por medio de flechas para indicar la secuencia de operacin. La simbologa utilizada para la elaboracin de diagramas de flujo es variable y debe ajustarse a un patrn definido previamente.