You are on page 1of 14

ALGORITMO

:
Etimología: Proviene del nombre del matemático persa Mohammed Al-khowanzmi, cuyo apellido traducido al latín es Algorismus. Un algoritmo es un método para resolver un problema, debe presentarse como una secuencia ordenada de instrucciones que siempre se ejecutan en un tiempo finito y con una cantidad de esfuerzo también finito. En un algoritmo siempre debe haber un punto de inicio y un punto de terminación, estos deben ser únicos y deben ser fácilmente identificables. En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos en matemática son el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver un sistema lineal de ecuaciones. En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin ambigüedad y sin hacer referencia a una computadora en particular, y además tiene un límite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en un solo paso. Esta amplia definición abarca tanto a algoritmos prácticos como aquellos que solo funcionan en teoría, por ejemplo el método de Newton y la eliminación de Gauss-Jordan funcionan, al menos en principio, con números de precisión infinita; sin embargo no es posible programar la precisión infinita en una computadora, y no por ello dejan de ser algoritmos. En particular es posible considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda función calculable se puede programar en una máquina de Turing (o equivalentemente, en un lenguaje de programación suficientemente general). A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos matemáticos como maquinas de Turing entre otros. Sin embargo, estos modelos están sujetos a un tipo particular de datos como son números, símbolos o graficas mientras que, en general, los algoritmos funcionan sobre una vasta cantidad de estructuras de datos. En general, la parte común en todas las definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos paralelos:

   . el cual deberá finalizar al completarlos. Estado abstracto. Existen muchos otros mecanismos susceptibles de programación que no cuentan con una salida de resultados de esta forma. Aritmetizabilidad. Características: Las características fundamentales que debe cumplir todo algoritmo son:  Ser definido: Sin ambigüedad. El devolver un resultado no debe ser considerado como únicamente “verlos” en forma impresa o en pantalla. Tener una o más salidas: Debe siempre devolver un resultado. Por salida de resultados debe entenderse todo medio o canal por el cual es posible apreciar los efectos de las acciones del algoritmo.. es decir..Tiempo secuencial. cada paso del algoritmo debe indicar la acción a realizar sin criterios de interpretación.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.Un algoritmo funciona en tiempo discretizado – paso a paso–.. de nada sirve un algoritmo que hace algo y nunca sabemos que fue. 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). entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de términos del estado actual.Solamente operaciones innegablemente calculables están disponibles en el paso inicial. Tener cero o más entradas: Datos son proporcionados a un algoritmo como insumo (o estos son generados de alguna forma) para llevar a cabo las operaciones que comprende.. Ser finito: Un número específico y numerable de pasos debe componer al algoritmo. Exploración acotada.La transición de un estado al siguiente queda completamente determinada por una descripción fija y finita. como ocurre con las computadoras.

En resumen un algoritmo debe ser finito. Por ejemplo: Constante PI 3. aquí se adoptarán las siguientes normas: A. definido. La decisión de constantes se identificará con la palabra clave constantes. sin embargo el lenguaje natural no siempre es lo suficientemente preciso. pero con una precisión mayor. no usando nada más ni nada menos que aquello que se requiera para y en su ejecución. Por ejemplo: . no ambiguo y preciso. Como alternativa tenemos el Pseudocódigo. Por ejemplo: Algoritmo EJEMPLO Algoritmo Ganancia B. Todos los algoritmos comenzarán con una sentencia algoritmo. Existen muchas variantes de pseudocódigo. Representación de Algoritmos: Existen varias maneras de representar algoritmos. Después de la sentencia algoritmo se declararán las constantes que se requieran en el programa. Pseudocódigo: El pseudocódigo es una forma de representar un algoritmo. una de las más evidentes es el lenguaje natural. Dicho desarrollo se encontrará entre las palabras clave inicio y fin. eficiente. mediante sentencias similares al lenguaje natural. una línea con la palabra clave algoritmo seguida por el nombre del algoritmo. Estas palabras clave limitarán un bloque de instrucciones siempre que se requieran. legible. Efectividad: El tiempo y esfuerzo por cada paso realizado debe ser preciso. concreto.1416 Constante UNO 1 C. Esto es. A continuación aparecerá el desarrollo del algoritmo. al cual nombraremos PRINCIPAL.

K E. usan símbolos conectados con flechas para indicar la secuencia de instrucciones y están regidos por. A continuación de la palabra clave inicio se declaran las variables. separadas por comas (. Los comentarios aparecerán encerrados entre /*y*/.PRINCIPAL Inicio . En cualquier parte del algoritmo podrán colocarse comentarios para hacer aclaraciones o comentarios relacionados con la instrucción u operación que faciliten la interpretación. J. descripción de un lenguaje y descripción de procesos a personas ajenas a la computación.. Cada lista incluirá solamente variables de mismo tipo. separada por un espacio se colocará la lista de variables... Los diagramas de flujo son usados para representar algoritmos pequeños. Diagrama de Flujo: Diagrama de flujos que expresa un algoritmo para calcular la raíz cuadrada de un número x. . Y. Los diagramas de flujo son descripciones gráficas de algoritmos.). ya que abarcan mucho espacio y su construcción es laboriosa. Las palabras clave se imprimirán en letra negrita. Ejemplo: Flotante X. Por su facilidad de lectura son usados como introducción a los algoritmos..ISO. Z Enteras I. Cuando se use letra manuscrita se sugiere subrayar las palabras clave. Fin D. Ejemplo: /* Este es un comentario*/ F. En este caso el tipo de variables se indicará al principio de la lista.

Los símbolos que utiliza son: .

Un algoritmo se represente en la siguiente forma: . preciso. evitando el uso de muchas palabras. se puede realizar utilizando los conectores. Las acciones sucesivas se pueden escribir en cajas sucesivas y como en los diagramas de flujo. No deben quedar líneas de flujo sin conectar. en caso de ser necesario separar el flujo del diagrama a un sitio distinto. Todo texto escrito dentro de un símbolo debe ser legible.Recomendaciones para los Diagramas de Flujo: • Se debe evitar el cruce de líneas. se pueden escribir diferentes acciones en una caja. Se debe tener en cuenta que solo se van a utilizar conectores cuando sea estrictamente necesario. • • Diagramas estructurados (Nassi-Schneiderman): El diagrama estructurado N-S también conocido como diagrama de chapin es como un diagrama de flujo en el que se omiten las flechas de unión y las cajas son contiguas.

.ESTRUCTURAS DE CONTROL Las estructuras de control determinan la secuencia en que deben ejecutarse las instrucciones de un algoritmo.

considérese el siguiente fragmento de un algoritmo: En este fragmento se indica que se ejecute la operación 1 y a continuación la operación 2. Esta estructura permite que las instrucciones que la constituyen se ejecuten una tras otra en el orden en que se listan. Estas estructuras primitivas son: la secuencia. Por ejemplo. Véase el siguiente fragmento de algoritmo: . dependiente del resultado obtenido al evaluar la condición. b) BIFURCACIÓN CONDICIONAL La estructura de bifurcación condicional permite elegir una de dos opciones en una alternativa. a) SECUENCIA La estructura de control más simple es la secuencia. la bifurcación condicional y el ciclo.Existen tres Estructuras de control básicas ó primitivas y combinándolas se puede escribir cualquier algoritmo.

La condición se verifica antes de ejecutar la operación.La palabra clave si indica que estamos en una sentencia de bifurcación condicional. señala que se trata de un ciclo mientras. Si la condición es verdadera se ejecuta la operación 1. mientras se cumpla una cierta condición. Existen varios tipos de ciclos:  Ciclo Mientras (WHILE) Este ciclo repite una operación. c) CICLOS Los ciclos son estructuras de control que permiten ejecutar varias veces una operación. Por ejemplo: La palabra clave mientras. Si es verdadera. y así sucesivamente. la operación se evalúa de nuevo. de otra manera se ejecutará la operación 2.  Ciclo Hacer-mientras (DO-WHILE) En este ciclo la operación se ejecuta y después se evalúa la condición. .

Por ejemplo: . desde un Valor Inicial hasta un Valor Final que marcará la condición de salida del ciclo.Cuando la condición se hace falsa el ciclo termina. especificando en un contador el incremento unitario.  Ciclo Desde (FOR) En este ciclo se ejecuta una operación un cierto número de veces.

preguntar si el elemento buscado es igual al primero. dé una sensación de libertad de acción. Uno de los requisitos antes de ejecutar la búsqueda binaria. Entonces este algoritmo tiene una complejidad de O(n). es que el conjunto de elementos debe de estar ordenado. La variante más simple del problema es la búsqueda de un número en un vector. . o el mejor movimiento en una partida de ajedrez. tercero y así sucesivamente hasta encontrar el deseado. Existen 2 tipos de algoritmos que son los más usados para encontrar elementos en una estructura de datos:  Algoritmo de Búsqueda Lineal: Es sencilla de implementar e intuitiva. por ejemplo. es decir. Este algoritmo reduce el tiempo de búsqueda considerablemente. ubicar el registro correspondiente a cierta persona en una base de datos. Básicamente consiste en buscar de manera secuencial un elemento. 57 53 21 37 17 36 22 3 44 97 89 26 31 47 8 17 Debemos ordenarlo 3 8 17 17 21 22 26 31 36 37 44 47 53 57 89 97 Se utiliza cuando el vector en el que queremos determinar la existencia de un elemento está previamente ordenado.  Algoritmo de Búsqueda Binaria: Utiliza la técnica divide y vencerás. Supongamos que tenemos el siguiente array. Es la sentencia ir a. tiene el terrible inconveniente de perder fácilmente el seguimiento del programa. Aunque la posibilidad de pasar a cualquier parte de un programa.d) IR A (GOTO) Existe una sentencia adicional que permite transferir la secuencia de un algoritmo a cualquier parte de él mismo. Algoritmo de Búsqueda: Un algoritmo de búsqueda es aquel que está diseñado para localizar un elemento con ciertas propiedades dentro de una estructura de datos. segundo. ya que disminuye exponencialmente el número de iteraciones necesarias.

fin. entonces debemos buscar en la otra división del array. inicio = 0. el fin ahora sería el elemento anterior al medio. Con cualquiera de estas 2 operaciones descartamos la otra mitad del array y por lo tanto reducimos notablemente el número de iteraciones. si es afirmativo ya encontramos el elemento y no hay nada más que hacer. Preguntamos si el elemento que se encuentra en la posición medio es mayor al elemento buscado. 1 2 3 } if(array[medio] > buscado){ fin = medio . 1 2 3 4 } if(buscado == array[medio]){ cout << "Se encuentra en la posicion " << medio + 1 << endl. medio = (inicio + fin) / 2. la búsqueda se reduce a la mitad del array. en cada iteración. Realizamos esto en un bucle mientras el inicio sea menor o igual . 1 2 3 } else { inicio = medio + 1. por lo tanto.1. fin = tam – 1. medio. De lo contrario quiere decir que elemento buscado es mayor al del medio. return array[medio]. Preguntamos si el elemento buscado es igual al elemento que se encuentra en la posición medio del array. Si no es así. Y por supuesto el tamaño del vector y elemento que queremos buscar. Entonces ahora solo buscaríamos en esa división del array. por lo tanto el inicio sería el elemento posterior al medio. quiere decir que elemento buscado es menor al del medio. Por lo tanto.¿Como funciona la búsqueda binaria? Necesitamos una seria de datos para realizar la búsqueda: El elemento en la posición inicio. si es afirmativo y como el array está ordenado.

. para no volver a escribirlo y así reutilizar código. comenzando por el 5. esperando ver si se cumple o no la misma condición que con el primer elemento. i++) for j=0 . vector[j] = vector[j+1]. por ejemplo. y lo compara con todos los elementos de la lista. for (i=1. estas son:  Burbuja simple: es la que compara todos con todos. i<LIMITE. Existen tres tipos o clases del método de la burbuja que se distinguen por su forma y su forma de desarrollarla. si es mayor o menor (dependiendo si el orden es ascendiente o descendiente) se intercambian de posición.al fin. ya están ordenados. #include “quicksort. Por ejemplo. Así. hasta el último elemento de la lista. con el 6. El algoritmo de búsqueda binaria tiene una complejidad de O(log n). j<LIMITE . ya que supuestamente. Luego continúa con el siguiente. seria comenzar recorriendo los valores de izquierda a derecha. Nota: Para realizar la búsqueda binaria. es tan fácil como comparar todos los elementos de una lista contra todos. vector[j+1] = temp.1.h” MÉTODO DE LA BURBUJA El método de la burbuja es uno de los más simples. sucesivamente. entonces los intercambia de posición. generando comparaciones extras. no tiene sentido que se compare con sigo mismo o que se compare con los valores anteriores a él. con el 1. si se cumple que uno es mayor o menor a otro. estoy incluyendo el archivo que contiene el algoritmo de ordenamiento quicksort. j++) if (vector[j] > vector[j+1]) temp = vector[j]. imaginemos que tenemos los siguientes valores: 5 6 1 0 3 Lo que haría una burbuja simple. con el 0 y con el 3. Lo compara con el 6.

 Burbuja mejorada: Una nueva versión del método de la burbuja seria limitando el número de comparaciones. Imaginemos si tenemos 1. dijimos que era inútil que se compare consigo misma. entonces son 10.    Burbuja optimizada .000. El metodo seria mucho mas optimo con “n” comparaciones menos (n = total de elementos). Si tenemos una lista de 10.000 comparaciones que están sobrando.000 elementos.000 de elementos.

. 4507.43/.89..0.01...3/4.1.47 3.4 80 00. .0.O3 :3 ..:9. :3.0794 32074 /0 ..   .8./4703.O3 /0 8.490723.7.4 !4700254   .47 3.O380. :3 '..408/0  #  3 0890 .3/403:3.7E .:. .43/.439../.08  0850.74 /08/0:3'.7020394:39. /0 .. 6:0 2.

.20390 080:20394/05747.47708543/0390 ..074  ..7 /02. 4.0 0 90254 /0 -86:0/.//0 3   47924/086:0/. /0 /.4397./ #  %  890:3.20390032074/0907./0  .7 :3 0020394 .//05.079.803903.438/07.6:050729097./0/.74  $0:9. 0897:. 507843. -./48 5.0897:.7.790/0:35747.:9.:03.:.80 /0 /. 9F./4 $:543. 08 .:.0/70  . /0 :3 32074 03 :3 . -86:0/..9:7.08..-86:0/. 6:0 /823:0 054303.6:0 6:0 089E /80N..2039403:3.948 40204724.5.6:075.-020390  .7. .0.7.4250/.77. &9./4 5. 03..  47924/086:0/. /0 :3 0020394 089E 570.947  8903  9548 /0 .7 0 /080.479248 6:0 843 48 2E8 :8.. :36:0.803903..43. 086:00. .20390 ./4  890 .20390.O3 903009077-03.20390 47/03.2.307.:..03.7 0020394803:3.7039:9. 08 .8J 8:. 8803.47924 9030 :3.79/.2.0. E8.2486:0903024808:0390.78 0 0020394 -:8.7. 03.8038.3... 548-/. :30020394  08 /0.390 2E8 8250 /0 574-02..80. 572074  80:3/4  907./.7.7. /.../0:3 ..30.3..08./08 /03974 /0 :3.08903.7 570:39.381077.43 .948  47924/086:0/...   0-024847/03./0.47924./4  3943.7.8  ..-3./4 08 :.430830.:03..89.3/40. 03 :3. ....//0.47924 70/:.07E8  &34 /0 48 706:8948 . 80. /F:3.3908 /0 00.43.948 547 00254  :-.O3 /0-079.7.47924 /0 -86:0/.7.43:394/000203948/0-0/0 089.43889003-:8. . &3  .8..8 57450/.4397./02502039..9:7.030390/0507/071E.08 0890 .747/03. . .7.9470306:06:070248/090723.6:075.7 0 708974 .079.790/0F2824 8.

248:3./0/.0...4  139.2  20/4 3.807.7.N4/0.-86:0/.9485.70.-3.O33.4 13 20/4 5478:5:089409.43. 4241:3.2.089.4 13 .  0.-86:0/.7.0020394 03..7  3.7.548.947  00203946:06:070248-:8.

020397. /0 089.8O3 /0 .20/4( <  $ 34 08 .:0397. 497.77.00020394.248 8 0 0020394 6:0 80 03.47.0 .172. 29.6:07.20/4(  . 03.77.:0397.0002039454890747.4.77.8O3/0.390747. 03 ./.39403.844-:8.3. /.203474:..77.248089403:3-:.2480308../4  1320/4  < 0 4 .77.76:00020394-:8.  547 4 9.172.9.4397..74 6:070 /0.:0397.4308 /08.O320/4082. 0020394 6:0 80 03. /0 20/4  03943.420/4  < 43 .480. .803./ /0 . !70:39.03.2480002039434. 497.47 ./4.089E47/03..08 /0-0248 -:8.. ..8  4507. #0.39470/:.O3 20/4 /0 .4308  !47 4 9.77.394  03 .8J  !70:39.20/4     080 3.-020390 032074/0907. 54749.08.20/4      1 .4397. /020/4 3943.7J./4 6:070/0.7 03 ..  8 08 . 548.77.2E86:0.4 .248349.  54749./40820347.4:9$003.O3  ./.77.394 013.47./4 808.. .79.77./ /0 ...248 8 0 0020394 -:8. 80 70/:.47.424 0.. 03 .7 6:0 0020394 -:8. 29...07       1 -:8./.:.. 907.807J..9./4 08 2.4320/4  03/ 709:73.4807J.548./4 08 :. -86:0/. 548.248 .20/4(-:8.0020394-:8.

47703/4 48 .89.0.4393.430 8082./0548.0.08.:250 4 34 ..089E347/03. ./070. :3. 0 9240020394/0.-3.4203.89. 282.. 08943.8:1472.-:7-:.8.O3   8903 9708 95484 ./0/08.4390300. 089.424.7.203946:.!.8  547 00254  34 9030 8039/4 6:0 80 ..425. .774.425. ..47924/0-86:0/.7..      .O3  :04.4308 097.474 20347.0..8J70:9.4 6:0.7. 8250  807.03/0390  80 3907.947(..8479 5.7-74.43 0 .43 0    4 .O3 6:0 ... 8250 08 .89.7.9030:3.0.39074708 .4397.:2506:0:34082.43 48 .-3..7.43 84 2824 4 6:0 80 .08483907.947 (9025  !4700254 2.7 70.70.94/48 880.43 0 8:0390  .808 /0 2F94/4 /0 .947(.20390  .03/0390 4 /08. 08.0.7.425.  08507.//0 4 3   49. F  .2-. 6:0 ..7.4708    4 6:0 .3/45470 4.43/.43 0 57207 0020394  8J  8:.7 94/484800203948/0:3. . -:7-:.7.47924/047/03. 94/48 ..07. 89. 6:080 /893:03 547 8: 1472.8479    A%  &#&  2F94/4/0./48  147 %  147 %   1 .3/4 .3 /0 548.4708 . .:/0 6:.7J.20390 .425.2-.43 94/48 48 00203948 /0 .425..947( .8843  O :7-:.47420347 /0503/03/48 0 47/03 08.7.4708/06:07/...-86:0/.0. 6:08:5:089.4203.7.425.4.31E.947 (  9025.70 . -:7-:.7.302486:09030248488:03908.7.13 ..O/4   3.947 ( .4250/.430 .7.425.4974 03943.08:34/0482E882508 089.:03/40..430 .70 .3/4 .34.43 94/48  0307.07 8 80 .

 396:080.3:0..&3.425.425.7. 807.2:.4384282.2047./0  00203948 03943.42.-:7-:.7.845924.08843 ./.4308 /2486:007.3/4032074/0.3/4  2.425.078O3/02F94/4/0..4592.425.3024889030248 /000203948 2094/4 807. $9030248:3.89././000203948  O  O :7-:.70. O :7-:.43086:0 089E384-7..43 3 . O                          .29...7.430820348 3 949.