Sunteți pe pagina 1din 15

E.E.M.

N 19
Ao 2009

Itinerario Formativo
Asistente en Informtica

3er Ao

Algoritmos y estructuras de datos


Prof. Alejandro Tourn

Apunte N 1

Martes de 13 a 16 horas Carga horaria semanal 3 horas Carga horaria total 115 horas

Algoritmo En matemticas, ciencias de la computacin, y disciplinas relacionadas, un algoritmo (del latn, dixit algorithmus y ste a su vez del matemtico persa al-Jwarizmi) es una lista bien definida, ordenada y finita de operaciones que permite hallar la solucin a un problema. Dado un estado inicial y una entrada, a travs de pasos sucesivos y bien definidos se llega a un estado final, obteniendo una solucin. Los algoritmos son objeto de estudio de la algoritmia. En la vida cotidiana se emplean algoritmos en multitud de ocasiones para resolver diversos problemas. Algunos ejemplos se encuentran en los instructivos (manuales de usuario), los cuales muestran algoritmos para usar el aparato en cuestin o inclusive en las instrucciones que recibe un trabajador por parte de su superior. Tambin existen ejemplos de ndole matemtico, como el algoritmo de la divisin para calcular el cociente de dos nmeros, el algoritmo de Euclides para calcular el mximo comn divisor de dos enteros positivos, o el mtodo de Gauss para resolver un Sistema lineal de ecuaciones. Cuando escribimos un programa de computadora, generalmente estamos llevando a cabo un mtodo que se ha inventado para resolver algn problema previamente. Este mtodo es a menudo independiente de la computadora y es probable que sea igualmente apropiado para muchos tipos de computadoras y muchos lenguajes de computadora. Es el mtodo, en el programa de computacin, el que nosotros debemos estudiar para aprender cmo se est tratando de resolver el problema. El trmino algoritmo se usa en la informtica para describir un mtodo problema-solucin conveniente para la aplicacin en un programa de computadora. Los algoritmos son los materiales de informtica, son los objetos centrales de estudio para muchos, si no la mayora, de las reas de campo. La importancia de un algoritmo radica en mostrar la manera de llevar a cabo procesos y resolver mecnicamente problemas matemticos o de otro tipo. Al igual que las funciones matemticas, los algoritmos reciben una entrada y la transforman en una salida, comportndose como una caja negra. Sin embargo, no toda caja negra que convierta una entrada en una salida se puede considerar un algoritmo: para que un algoritmo pueda ser considerado como tal, debe ser una secuencia ordenada, finita y definida (formalizacin de su comportamiento) de instrucciones. De este modo se puede seguir y predecir el comportamiento del algoritmo para cualquier entrada posible (salvo algoritmos probabilistas, que tiene usualmente una salida distinta), a partir del seguimiento de esa secuencia de instrucciones, que como es ordenada y definida, no da lugar a ambigedades y puede seguirse su traza.

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

El concepto de algoritmo, aunque similar y obviamente relacionado, no debe confundirse con el concepto de programa. Mientras el primero es la especificacin de un conjunto de pasos (operaciones, instrucciones, rdenes,...) orientados a la resolucin de un problema (mtodo), el segundo es ese conjunto de operaciones especificadas en un determinado lenguaje de programacin y para un computador concreto, susceptible de ser ejecutado (o compilado o interpretado). Un algoritmo, estrictamente hablando, no puede ejecutarse hasta que se implementa, ya sea en un lenguaje de programacin, en un circuito elctrico, en un aparato mecnico, usando papel y lpiz, o en algn otro modelo de computacin. La mayora de los algoritmos involucran mtodos para organizar los datos que intervienen en el cmputo. Estos objetos creados son llamados, de esta manera la estructura de los datos, y tambin son objetos centrales del estudio en la informtica. De esta forma, los algoritmos y estructuras de los datos van siempre de la mano. Los algoritmos simples pueden dar lugar a una estructura de datos complicada y, recprocamente, los algoritmos complicados pueden usar estructuras de los datos simples. Caractersticas de los algoritmos El cientfico de computacin Donald Knuth ofreci una lista de cinco propiedades, que son ampliamente aceptadas como requisitos para un algoritmo: 1. Carcter finito. "Un algoritmo siempre debe terminar despus de un nmero finito de pasos". 2. Precisin. "Cada paso de un algoritmo debe estar precisamente definido; las operaciones a llevar a cabo deben ser especificadas de manera rigurosa y no ambigua para cada caso". 3. Entrada. "Un algoritmo tiene cero o ms entradas: cantidades que le son dadas antes de que el algoritmo comience, o dinmicamente mientras el algoritmo corre. Estas entradas son tomadas de conjuntos especficos de objetos". 4. Salida. "Un algoritmo tiene una o ms salidas: cantidades que tienen una relacin especfica con las entradas". 5. Eficacia. "Tambin se espera que un algoritmo sea eficaz, en el sentido de que todas las operaciones a realizar en un algoritmo deben ser suficientemente bsicas como para que en principio puedan ser hechas de manera exacta y en un tiempo finito por un hombre usando lpiz y papel".

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

Knuth admite que, aunque su descripcin pueda ser intuitivamente clara, carece de rigor formal, puesto que no est exactamente claro qu significa "precisamente definido", "de manera rigurosa y no confusa", o "suficientemente bsicas", y as sucesivamente. A partir del carcter finito y de la salida se deduce que ante una misma situacin inicial (o valores de entrada) un algoritmo debe proporcionar siempre el mismo resultado (o salida), con excepcin de los algoritmos probabilistas. Medios de expresin de un algoritmo Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocdigo, diagramas de flujo y lenguajes de programacin entre otros. Las descripciones en lenguaje natural tienden a ser confusas y extensas. El usar pseudocdigo y diagramas de flujo evita muchas imprecisiones del lenguaje natural. Dichas expresiones son formas ms estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programacin especfico. La descripcin de un algoritmo usualmente se hace en tres niveles: 1. Descripcin de alto nivel. Se establece el problema, se selecciona un modelo matemtico y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles. 2. Descripcin formal. Se usa pseudocdigo para describir la secuencia de pasos que encuentran la solucin. 3. Implementacin. Se muestra el algoritmo expresado en un lenguaje de programacin especfico. Ejemplo de algoritmo El problema consiste en encontrar el mximo de un conjunto de nmeros. Para un ejemplo ms complejo vase Algoritmo de Euclides. Descripcin de alto nivel Dado un conjunto finito C de nmeros, se tiene el problema de encontrar el nmero ms grande. Sin prdida de generalidad se puede asumir que dicho conjunto no es vaco y que sus elementos estn numerados como Es decir, dado un conjunto mento x que pertenece al conjunto C. . se pide encontrar m tal que para todo ele-

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

Para encontrar el elemento mximo, se asume que el primer elemento (c 0) es el mximo; luego, se recorre el conjunto y se compara cada valor con el valor del mximo nmero encontrado hasta ese momento. En el caso que un elemento sea mayor que el mximo, se asigna su valor al mximo. Cuando se termina de recorrer la lista, el mximo nmero que se ha encontrado es el mximo de todo el conjunto. Descripcin formal El algoritmo escrito de una manera ms formal, en pseudocdigo tendra el siguiente aspecto: Algoritmo Encontrar el mximo de un conjunto funcin //C es un conjunto no vaco de nmeros// // | C | es el nmero de elementos de C//

para si

hasta entonces

hacer

devolver Sobre la notacin:

"

" representa la asignacin entre dos objetos. Por ejemplo,

significa que el objeto

m cambia su valor por el de x

"devolver" termina el algoritmo y devuelve el valor a su derecha (en este caso, el mximo de C)

Implementacin En lenguaje Visual Basic 8 (2005): Public Function max(C As Integer()) As Integer Dim n As Integer = C.GetLength(0) Dim m As Integer = C(0)

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

For i As Integer = 1 To n If C(i) > m Then m = C(i) End If Next Return m End Function Tipos de algoritmos segn su funcin

Algoritmo de ordenamiento Algoritmo de bsqueda

Tcnicas de diseo de algoritmos

Algoritmos voraces (greedy): seleccionan los elementos ms prometedores del conjunto de candidatos hasta encontrar una solucin. En la mayora de los casos la solucin no es ptima.

Algoritmos paralelos: permiten la divisin de un problema en subproblemas de forma que se puedan ejecutar de forma simultnea en varios procesadores.

Algoritmos probabilsticos: algunos de los pasos de este tipo de algoritmos estn en funcin de valores pseudoaleatorios

Algoritmos determinsticos: El comportamiento del algoritmo es lineal: cada paso del algoritmo tiene nicamente un paso sucesor y otro ancesor.

Algoritmos no determinsticos: El comportamiento del algoritmo tiene forma de rbol y a cada paso del algoritmo puede bifurcarse a cualquier nmero de pasos inmediatamente posteriores, adems todas las ramas se ejecutan simultneamente.

Divide y vencers: dividen el problema en subconjuntos disjuntos obteniendo una solucin de cada uno de ellos para despus unirlas, logrando as la solucin al problema completo.

Metaheursticas: encuentran soluciones aproximadas (no ptimas) a problemas basndose en un conocimiento anterior (a veces llamado experiencia) de los mismos.

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

Programacin dinmica: intenta resolver problemas disminuyendo su coste computacional aumentando el coste espacial.

Ramificacin y acotacin: se basa en la construccin de las soluciones al problema mediante un rbol implcito que se recorre de forma controlada encontrando las mejores soluciones.

Vuelta Atrs (Backtracking): se construye el espacio de soluciones del problema en un rbol que se examina completamente, almacenando las soluciones menos costosas. Tipo de dato

Concepto propio de la informtica, ms especficamente de los lenguajes de programacin, aunque tambin se encuentra relacionado con nociones similares de las matemticas y la lgica. En lenguajes de programacin un tipo de dato es un atributo de una parte de los datos que indica al ordenador (y/o el programador) algo sobre la clase de datos sobre los que se va a procesar. Esto incluye imponer restricciones en los datos, como qu valores pueden tomar y qu operaciones se pueden realizar. Tipos de datos comunes son: enteros, nmeros de coma flotante (decimales), cadenas alfanumricas, fechas, horas, colores, coches o cualquier cosa que se nos ocurra. En un sentido amplio, un tipo de datos define un conjunto de valores y las operaciones sobre estos valores. Casi todos los lenguajes de programacin explcitamente incluyen la notacin del tipo de datos, aunque lenguajes diferentes pueden usar terminologa diferente. La mayor parte de los lenguajes de programacin permiten al programador definir tipos de datos adicionales, normalmente combinando mltiples elementos de otros tipos y definiendo las operaciones del nuevo tipo de dato. Por ejemplo, un programador puede crear un nuevo tipo de dato llamado "Persona" que especifica que el dato interpretado como Persona incluir un nombre y una fecha de nacimiento. Un tipo de dato puede ser tambin visto como una limitacin impuesta en la interpretacin de los datos en un sistema de tipificacin, describiendo la representacin, interpretacin y la estructura de los valores u objetos almacenados en la memoria del ordenador. El sistema de tipificacin usa informacin de los tipos de datos para comprobar la verificacin de los programas que acceden o manipulan los datos.

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

Tipos de datos elementales

Binarios
o

Bit Mientras que en el sistema de numeracin decimal se usan diez dgitos, en el binario se usan slo dos dgitos, el 0 y el 1. Un bit o dgito binario puede representar uno de esos dos valores, 0 1. El bit es la unidad mnima de almacenamiento empleada en informtica, en cualquier dispositivo digital, o en la teora de la informacin. Con l, podemos representar dos valores cuales quiera, como verdadero o falso, abierto o cerrado, blanco o negro, norte o sur, masculino o femenino, rojo o azul, etc. Basta con asignar uno de esos valores al estado de "apagado" (0), y el otro al estado de "encendido" (1).

Byte Es un tipo de dato o un sinnimo en ciertos lenguajes de programacin. En C el tipo de datos unsigned char tiene que al menos ser capaz de representar 256 valores distintos.

Numricos
o

Entero Un tipo de dato entero en computacin es un tipo de dato que puede representar un subconjunto finito de los nmeros enteros. El nmero mayor que puede representar depende del tamao del espacio usado por el dato y la posibilidad (o no) de representar nmeros negativos. Los tipos de dato entero disponibles y su tamao dependen del lenguaje de programacin usado as como la arquitectura en cuestin. Por ejemplo, si para almacenar un nmero entero disponemos de 4 bytes de memoria tememos que: 4 Bytes = 4x8 = 32 bits Con 32 bits se pueden representar 232=4294967296 valores:

Slo positivos: del 0 al 4294967295 Positivos y negativos: del -2147483648 al 2147483647

Operaciones con enteros: Las tpicas operaciones aritmticas: suma, resta, multiplicacin y divisin se pueden realizar con datos de tipo entero. En el caso de la divisin, el resultado podra ser un valor real, en ese

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

caso, si el resultado se ha de almacenar como entero la parte decimal del resultado deber ser eliminada, en principio hay dos mtodos para hacerlo:
o

El redondeo: Aproximar el valor real al entero ms cercano (Ej: 3,8-->4 / 3,2-->3) El truncamiento: Eliminar del valor real la parte decimal (Ej: 3,8-->3 / 3,2-->3)

Real El tipo de dato real define un conjunto de nmeros que pueden ser representados con la notacin de coma flotante. Al igual que los nmeros enteros, el tipo real est limitado superior e inferiormente segn la cantidad de memoria que haya disponible para almacenarlo. Otro elemento importante a tener en cuenta en este tipo de datos es la precisin con que pueden representar nmero con decimales (cuantos decimales se pueden representar), esta caracterstica tambin est directamente relacionada con la cantidad de memoria disponible para almacenar un valor real.

Coma fija Con un sistema numrico posicional es posible representar nmeros reales. La posicin de la coma (coma decimal en base diez) es la que fija la potencia de la base por la que hay que multiplicar el dgito correspondiente. Por ejemplo, el valor de los siguientes nmeros, todos ellos representados con 8 bits: 10101,110 = 124 + 02 + 12 + 02 + 120 + 12-1 + 12-2 + 02-3 = 21,7510 01001,011 = 024 + 12 + 02 + 02 + 120 + 02-1 + 12-2 + 12-3 = 9,37510 La representacin anterior recibe el nombre de coma fija, ya que con los 8 bits hemos fijado y reservado 5 para la parte entera y 3 para la fraccionaria. En los anteriores ejemplos la coma est fija y sirve para separar la parte entera de la parte fraccionaria. Al usar la notacin en coma fija, queda muy limitado el nmero de cantidades a representar y todas ellas deben tener la misma resolucin. En el caso anterior no podremos representar nmeros enteros mayores o iguales que 32 (25) ni nmeros ms pequeos que 0,125 (2-3).

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

Coma flotante es un mtodo de representacin de nmeros reales que se puede adaptar al orden de magnitud del valor a representar, usualmente trasladando la coma decimal mediante un exponente hacia la posicin de la primera cifra significativa del valor. De esta forma, con un nmero dado de dgitos representativos se obtiene mayor precisin que con la coma fija, debido a que el valor de estos dgitos es siempre significativo sea el que sea el orden de magnitud del nmero a representar. Debido a esta adaptacin, permite representar un rango mucho mayor de nmeros (determinado por los valores lmite que puede tomar el exponente). Su uso es especialmente interesante en la informtica pues permite trabajar con nmeros decimales en rangos amplios, aunque tambin se usa el truncado de decimales.

Alfanumricos
o

Carcter Es un smbolo que representa cada carcter de un lenguaje natural.

Cadena Es una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que pertenecen a un cierto alfabeto. En general, una cadena de caracteres es una sucesin de caracteres (letras, nmeros u otros signos o smbolos).

Booleanos La lgica binaria trabaja con variables binarias y operaciones lgicas. As, las variables slo tomarn dos valores discretos: V (verdadero) y F (falso); aunque tambin se pueden denotar como s y no, 1 y 0 respectivamente. Estructura de datos

En programacin, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulacin. Un dato elemental es la mnima informacin que se tiene en un sistema. Una estructura de datos define la organizacin e interrelacin de stos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones bsicas son:

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

10

Alta, adicionar un nuevo valor a la estructura. Baja, borrar un valor de la estructura. Bsqueda, encontrar un determinado valor en la estructura para realizar una operacin con este valor, en forma SECUENCIAL o BINARIO (siempre y cuando los datos estn ordenados)...

Otras operaciones que se pueden realizar son:


Ordenamiento, de los elementos pertenecientes a la estructura. Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.

Cada estructura ofrece ventajas y desventajas en relacin a la simplicidad y eficiencia para la realizacin de cada operacin. De esta forma, la eleccin de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operacin sobre los datos. Estructuras de datos

Vectores (matriz o array) En programacin, un vector, matriz, array, arreglo o alineacin es un conjunto o agrupacin de variables del mismo tipo cuyo acceso se realiza por ndices. Los vectores o arreglos (array en ingls) de dos o ms dimensiones se denominan con frecuencia matrices, y pueden tener tantas dimensiones como se desee; aunque para evitar confusiones con el concepto matemtico de matriz numrica (que normalmente slo tiene dos dimensiones), se suele utilizar el termino array (o arreglo) para referirse de forma genrica a matrices de cualquier nmero de dimensiones.

ndices Todo vector se compone de un determinado nmero de elementos. Cada elemento es referenciado por la posicin que ocupa dentro del vector. Dichas posiciones son llamadas ndice y siempre son correlativos. Existen tres formas de de indexar los elementos de un array:

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

11

Indexacin base-cero (0): En este modo el primer elemento del vector ser la componente cero ('0') del mismo, es decir, tendr el indice '0'. En consecuencia, si el vector tiene 'n' componentes la ltima tendr como ndice el valor 'n-1'.

Indexacin base-uno (1): En esta forma de indexacin, el primer elemento del array tiene el indice '1' y el ltimo tiene el ndice 'n' (para un array de 'n' componentes).

Indexacin base-n (n): Este es un modo verstil de indexacin en la que el ndice del primer elemento puede ser elegido libremente, en algunos lenguajes de programacin se permite que los ndices puedan ser negativos e incluso de cualquier tipo escalar (tambin cadenas de caracteres).

Registro Un registro, en programacin, es un tipo de dato estructurado formado por la unin de varios elementos bajo una misma estructura. Estos elementos pueden ser, o bien datos elementales (entero, real, carcter,...), o bien otras estructuras de datos. A cada uno de esos elementos se le llama campo. Un registro se diferencia de un vector en que ste es una coleccin de datos iguales, es decir, todos del mismo tipo, mientras que en una estructura los elementos que la componen, aunque podran serlo, no tiene porque ser del mismo tipo.

Tipo de datos algebraico En matemticas discretas es usual introducir definiciones de estructuras recursivas dando los casos de definicin y un axioma de clausura indicando que ninguna otra cosa forma parte de lo definido. Por ejemplo, los rboles con informacin en los nodos pueden definirse como sigue: Sea T un conjunto. Los rboles con informacin en los nodos son todos los valores que se pueden construir con las reglas siguientes. 1. El rbol vaco es un rbol y es representado con la constante AVacio. 2. Si t1 y t2 son rboles, y x es un elemento de T, entonces Nodo(t1,x,t2) es un rbol. 3. Los rboles son nicamente los valores que se construyen utilizando las reglas 1 y 2. La construccin correspondiente en los lenguajes de programacin se llama Tipo de datos algebraico. Sus reglas de tipo polimrficas fueron introducidas por Robin Milner junto con

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

12

la definicin del lenguaje Standard ML y han sido adoptadas desde entonces en diversos lenguajes de programacin, sobre todo en los lenguajes de programacin funcionales. Pseudocdigo Un pseudocdigo (falso lenguaje), es una serie de normas lxicas y gramaticales parecidas a la mayora de los lenguajes de programacin, pero sin llegar a la rigidez de sintaxis de estos ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor agilidad que en cualquier lenguaje de programacin, con la misma validez semntica, normalmente se utiliza en las fases de anlisis o diseo de Software, o en el estudio de un algoritmo. Forma parte de las distintas herramientas de la ingeniera de software. El pseudocdigo describe un algoritmo utilizando una mezcla de frases en lenguaje comn, instrucciones de programacin y palabras clave que definen las estructuras bsicas. Su objetivo es permitir que el programador se centre en los aspectos lgicos de la solucin a un problema. No siendo el pseudocdigo un lenguaje formal, varan de un programador a otro, es decir, no hay una estructura semntica ni arquitectura estndar. Es una herramienta gil para el estudio y diseo de aplicaciones, veamos un ejemplo, que podramos definir como: lenguaje imperativo, de tercera generacin, segn el mtodo de programacin estructurada. Definicin de estructuras de control Como se haba mencionado antes, cada autor usa su propio pseudocdigo con sus respectivas convenciones. Por ejemplo, considere la instruccin "Reemplace el valor de la variable x por el valor de la variable y"; algunas de las posibles sintaxis para indicar lo anterior podran ser:

asigne a el valor de

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

13

Diagrama de flujo

Diagrama de flujo sencillo con los pasos a seguir Diagrama de flujo que expresa un algoritmo para si una lmpara no funciona. calcular la raz cuadrada de un nmero x

Un diagrama de flujo es la forma ms tradicional de especificar los detalles algortmicos de un proceso y constituye la representacin grfica de un proceso multifactorial. Se utiliza principalmente en programacin, economa y procesos industriales, pasando tambin a partir de estas disciplinas a formar parte fundamental de otras, como la psicologa cognitiva; estos diagramas utilizan una serie de smbolos con significados especiales. Son la representacin grfica de los pasos de un proceso, que se realiza para entenderlo mejor. Son modelos tecnolgicos utilizados para comprender los rudimentos de la programacin lineal. Smbolos utilizados Se utilizan los smbolos indicados a continuacin, estandarizados segn la norma ISO 5807:

Flecha. Indica el sentido y trayectoria del proceso de informacin o tarea. Rectngulo. Se usa para representar un evento o proceso determinado. ste es controlado dentro del diagrama de flujo en que se encuentra. Es el smbolo ms comnmente utilizado. Se usa para representar un evento que ocurre de forma automtica y del cual generalmente se sigue una secuencia determinada.

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

14

Rombo. Se utiliza para representar una condicin. Normalmente el flujo de informacin entra por arriba y sale por un lado si la condicin se cumple o sale por el lado opuesto si la condicin no se cumple. El rombo adems especifica que hay una bifurcacin.

Crculo. Representa un punto de conexin entre procesos. Se utiliza cuando es necesario dividir un diagrama de flujo en varias partes, por ejemplo por razones de espacio o simplicidad. Una referencia debe darse dentro para distinguirlo de otros. La mayora de las veces se utilizan nmeros en los mismos.

Existen adems un sin fin de formas especiales para denotar las entradas, las salidas, los almacenamientos, etctera. Algunos ejemplos: Nombre Pseudocdigo Diagrama de flujo

Selectiva

si P entonces Instrucciones1 fin si

si P entonces Instrucciones1 Selectiva Doble si no Instrucciones2 fin si

mientras P hacer Iterativa Instrucciones fin mientras

Algoritmos y estructuras de datos EEM N 19 Prof. Alejandro Tourn

15

S-ar putea să vă placă și