You are on page 1of 62

Corporativo Internacional

Nombre: Edwin Gonzlez Castaeda

Profesor: Gabriel flores Gonzlez

Materia: Organizacin de estructura de datos

Tema: Algoritmos

2do semestre

ndice

Algoritmo 1 Caractersticas2 Clasificacin de algoritmos.3 Notacin o-grande..4 Definicin de rbol.5 Formas de representacin6 Nomenclatura sobre rboles7 Declaracin de rbol binario.8 Recorridos en profundidad...........................................................................9 Recorrido en amplitud..10 Borrado..11 Ficheros relacionados12 El tipo de dato abstracto ..13 rbol binario..14 Operaciones bsicas15 Clasificacin de arboles binarios.16

Algoritmo Podemos encontrar muchas definiciones de algoritmo en los textos de programacin, todas ellas muy similares: Conjunto ordenado y finito de pasos que permite hallar la solucin de un problema. Una secuencia de pasos que conducen a la realizacin de una tarea. Descripcin exacta de la secuencia en que se ha de realizar un conjunto de actividades tendientes a resolver un determinado tipo de problema o procedimiento. Conjunto de sentencias / instrucciones en lenguaje nativo, los cuales expresan la lgica de un programa. Es un sistema por el cual se llega a una solucin, teniendo en cuenta que debe de ser definido, finito y preciso. Toda receta, proceso, rutina, mtodo, procedimiento, tcnica, formula que resuelven un determinado problema. Conjunto de instrucciones concretas y detalladas mediante el cual se consigue una accin determinada. Conjunto de reglas que permiten obtener un resultado determinado a partir de ciertas reglas definidas. Descripcin precisa de una sucesin de instrucciones que permite llevar a cabo un trabajo en un nmero finito de pasos. Un conjunto de smbolos y procedimientos usados en la realizacin de un clculo. Caractersticas: Las caractersticas fundamentales que debe cumplir todo algoritmo son: Ser definido: sin ambigedad, cada paso del algoritmo debe indicar la accin a realizar sin criterios de interpretacin. Ser finito: un nmero especfico y numerable de pasos debe componer al algoritmo, el cual deber finalizar al completarlos. Tener cero o ms entradas: datos son proporcionados a un algoritmo como insumo (o estos son generados de alguna forma) para llevar a cabo las operaciones que comprende.

Tener una o ms salidas: debe siempre devolver un resultado; de nada sirve un algoritmo que hace algo y nunca sabemos que fue. el devolver un resultado no debe ser considerado como nicamente verlos en forma impresa o en pantalla, como ocurre con las computadoras. existen muchos otros mecanismos susceptibles de programacin que no cuentan con una salida de resultados de esta forma. por salida de resultados debe entenderse todo medio o canal por el cual es posible apreciar los efectos de las acciones del algoritmo. efectividad: el tiempo y esfuerzo por cada paso realizado debe ser preciso, no usando nada ms ni nada menos que aquello que se requiera para y en su ejecucin. Clasificacin de algoritmos * Algoritmo determinista: en cada paso del algoritmo se determina de forma nica el siguiente paso. * Algoritmo no determinista: deben decidir en cada paso de la ejecucin entre varias alternativas y agotarlas todas antes de encontrar la solucin. Todo algoritmo tiene una serie de caractersticas, entre otras que requiere una serie de recursos, algo que es fundamental considerar a la hora de implementarlos en una mquina. Estos recursos son principalmente: el tiempo: perodo transcurrido entre el inicio y la finalizacin del algoritmo. la memoria: la cantidad (la medida vara segn la mquina) que necesita el algoritmo para su ejecucin. Obviamente, la capacidad y el diseo de la mquina pueden afectar al diseo del algoritmo. en general, la mayora de los problemas tienen un parmetro de entrada que es el nmero de datos que hay que tratar, esto es, n. la cantidad de recursos del algoritmo es tratada como una funcin de n. de esta manera puede establecerse un tiempo de ejecucin del algoritmo que suele ser proporcional a una de las siguientes funciones: Tiempo de ejecucin constante. significa que la mayora de las instrucciones se ejecutan una vez o muy pocas. 1. Logn : tiempo de ejecucin logartmico. se puede considerar como una gran constante. la base del logaritmo (en informtica la ms comn es la base 2) cambia la constante, pero no demasiado. el programa es ms lento cuanto ms crezca n, pero es inapreciable, pues logn no se duplica hasta que n llegue a n

2. N: tiempo de ejecucin lineal. un caso en el que n valga 40, tardar el doble que otro en que n valga 20. un ejemplo sera un algoritmo que lee n nmeros enteros y devuelve la media aritmtica. nlogn : el tiempo de ejecucin es nlogn. es comn encontrarlo en algoritmos como quick sort y otros del estilo divide y vencers. si n se duplica, el tiempo de ejecucin es ligeramente mayor del doble. n2: tiempo de ejecucin cuadrtico. suele ser habitual cuando se tratan pares de elementos de datos, como por ejemplo un bucle anidado doble. si n se duplica, el tiempo de ejecucin aumenta cuatro veces. el peor caso de entrada del algoritmo quick sort se ejecuta en este tiempo. n3: tiempo de ejecucin cbico. como ejemplo se puede dar el de un bucle anidado triple. si n se duplica, el tiempo de ejecucin se multiplica por ocho. 2n: tiempo de ejecucin exponencial. no suelen ser muy tiles en la prctica por el elevadsimo tiempo de ejecucin. el problema de la mochila resuelto por un algoritmo de fuerza bruta -simple vuelta atrs- es un ejemplo. si n se duplica, el tiempo de ejecucin se eleva al cuadrado. * algoritmos polinomiales: aquellos que son proporcionales a nk. son en general factibles. * algoritmos exponenciales: aquellos que son proporcionales a kn. en general son infactibles salvo un tamao de entrada muy reducido. Notacin o-grande En general, el tiempo de ejecucin es proporcional, esto es, multiplica por una constante a alguno de los tiempos de ejecucin anteriormente propuestos, adems de la suma de algunos trminos ms pequeos. as, un algoritmo cuyo tiempo de ejecucin sea t = 3n2 + 6n se puede considerar proporcional a n2 . En este caso se dira que el algoritmo es del orden de n2, y se escribe o(n2) los grafos definidos por matriz de adyacencia ocupan un espacio o(n2), siendo n el nmero de vrtices de ste. La notacin o-grande ignora los factores constantes, es decir, ignora si se hace una mejor o peor implementacin del algoritmo, adems de ser independiente de los datos de entrada del algoritmo. es decir, la utilidad de aplicar esta notacin a un algoritmo es encontrar un lmite superior del tiempo de ejecucin, es decir, el peor caso. A veces ocurre que no hay que prestar demasiada atencin a esto. conviene diferenciar entre el peor caso y el esperado. por ejemplo, el tiempo de ejecucin

del algoritmo quick sort es de o(n2). sin embargo, en la prctica este caso no se da casi nunca y la mayora de los casos son proporcionales a nlogn. es por ello que se utiliza esta ltima expresin para este mtodo de ordenacin. Una definicin rigurosa de esta notacin es la siguiente: una funcin g(n) pertenece a o(f(n)) si y slo si existen las constantes c0 y n0 tales que: |g(n)| <= |c 0f(n)| , para todo n >= n0. Definicin de rbol Un rbol es una estructura de datos, que puede definirse de forma recursiva como: - una estructura vaca o - un elemento o clave de informacin (nodo) ms un nmero finito de estructuras tipo rbol, disjuntos, llamados subrboles. si dicho nmero de estructuras es inferior o igual a 2, se tiene un rbol binario. Es, por tanto, una estructura no secuencial.otra definicin nos da el rbol como un tipo de grafo (ver grafos): un rbol es un grafo acclico, conexo y no dirigido. es decir, es un grafo no dirigido en el que existe exactamente un camino entre todo par de nodos. esta definicin permite implementar un rbol y sus operaciones empleando las representaciones que se utilizan para los grafos. sin embargo, en esta seccin no se tratar esta implementacin. Formas de representacin - mediante un grafo:

figura 1 - mediante un diagrama encolumnado:a bd c e f

En la computacin se utiliza mucho una estructura de datos, que son los rboles binarios. estos rboles tienen 0, 1 2 descendientes como mximo. el rbol de la figura anterior es un ejemplo vlido de rbol binario.

Nomenclatura sobre rboles - raz: es aquel elemento que no tiene antecesor; ejemplo: a. - rama: arista entre dos nodos. - antecesor: un nodo x es es antecesor de un nodo y si por alguna de las ramas de x se puede llegar a y. - sucesor: un nodo x es sucesor de un nodo y si por alguna de las ramas de y se puede llegar a x. - grado de un nodo: el nmero de descendientes directos que tiene. ejemplo: c tiene grado 2, d tiene grado 0, a tiene grado 2. - hoja: nodo que no tiene descendientes: grado 0. ejemplo: d - nodo interno: aquel que tiene al menos un descendiente. - nivel: nmero de ramas que hay que recorrer para llegar de la raz a un nodo. ejemplo: el nivel del nodo a es 1 (es un convenio), el nivel del nodo e es 3. - altura: el nivel ms alto del rbol. en el ejemplo de la figura 1 la altura es 3. - anchura: es el mayor valor del nmero de nodos que hay en un nivel. en la figura, la anchura es 3. Aclaraciones: se ha denominado a a la raz, pero se puede observar segn la figura que cualquier nodo podra ser considerado raz, basta con girar el rbol. podra determinarse por ejemplo que b fuera la raz, y a y d los sucesores inmediatos de la raz b. sin embargo, en las implementaciones sobre un computador que se realizan a continuacin es necesaria una jerarqua, es decir, que haya una nica raz. Declaracin de rbol binario Se definir el rbol con una clave de tipo entero (puede ser cualquier otra tipo de datos) y dos hijos: izquierdo (izq) y derecho (der). para representar los enlaces con los hijos se utilizan punteros. el rbol vaco se representar con un puntero nulo.un rbol binario puede declararse de la siguiente manera:typedefstructtarbol { int clave; structtarbol *izq,*der; } tarbol;

Otras declaraciones tambin aaden un enlace al nodo padre, pero no se estudiarn aqu. Recorridos sobre rboles binarios se consideran dos tipos de recorrido: recorrido en profundidad y recorrido en anchura o a nivel. puesto que los rboles no son secuenciales como las listas, hay que buscar estrategias alternativas para visitar todos los nodos. Recorridos en profundidad: * recorrido en preorden: consiste en visitar el nodo actual (visitar puede ser simplemente mostrar la clave del nodo por pantalla), y despus visitar el subrbol izquierdo y una vez visitado, visitar el subrbol derecho. es un proceso recursivo por naturaleza. si se hace el recorrido en preorden del rbol de la figura 1 las visitas seran en el orden siguiente: a,b,d,c,e,f. voidpreorden(tarbol *a) { if (a != null) { visitar(a); preorden(a->izq); preorden(a->der); } } * Recorrido en inorden u orden central: se visita el subrbol izquierdo, el nodo actual, y despus se visita el subrbol derecho. en el ejemplo de la figura 1 las visitas seran en este orden: b,d,a,e,c,f. voidinorden(tarbol *a) { if (a != null) { inorden(a->izq); visitar(a);

inorden(a->der); } } * recorrido en postorden: se visitan primero el subrbol izquierdo, despus el subrbol derecho, y por ltimo el nodo actual. en el ejemplo de la figura 1 el recorrido quedara as: d,b,e,f,c,a. voidpostorden(arbol *a) { if (a != null) { postorden(a->izq); postorden(a->der); visitar(a); } } La ventaja del recorrido en postorden es que permite borrar el rbol de forma consistente. es decir, si visitar se traduce por borrar el nodo actual, al ejecutar este recorrido se borrar el rbol o subrbol que se pasa como parmetro. la razn para hacer esto es que no se debe borrar un nodo y despus sus subrboles, porque al borrarlo se pueden perder los enlaces, y aunque no se perdieran se rompe con la regla de manipular una estructura de datos inexistente. una alternativa es utilizar una variable auxiliar, pero es innecesario aplicando este recorrido. Recorrido en amplitud: Consiste en ir visitando el rbol por niveles. primero se visitan los nodos de nivel 1 (como mucho hay uno, la raz), despus los nodos de nivel 2, as hasta que ya no queden ms. si se hace el recorrido en amplitud del rbol de la figura una visitara los nodos en este orden: a,b,c,d,e,f en este caso el recorrido no se realizar de forma recursiva sino iterativa, utilizando una cola (ver colas) como estructura de datos auxiliar. el procedimiento consiste en encolar (si no estn vacos) los subrboles izquierdo y derecho del nodo extraido de la cola, y seguir desencolando y encolando hasta que la cola

est vaca. en la codificacin que viene a continuacin no se implementan las operaciones sobre colas. void amplitud(tarbol *a) { tcola cola; /* las claves de la cola sern de tipo rbol binario */ arbol *aux;

if (a != null) { crearcola(cola); encolar(cola, a); while (!colavacia(cola)) { desencolar(cola, aux); visitar(aux); if (aux->izq != null) encolar(cola, aux->izq); if (aux->der != null) encolar(cola, aux->der); } } } Por ltimo, considrese la sustitucin de la cola por una pila en el recorrido en amplitud. qu tipo de recorrido se obtiene? Construccin de un rbol binario Hasta el momento se ha visto la declaracin y recorrido de un rbol binario. sin embargo no se ha estudiado ningn mtodo para crearlos. a continuacin se estudia un mtodo para crear un rbol binario que no tenga claves repetidas partiendo de su recorrido en preorden e inorden, almacenados en sendos arrays.

Antes de explicarlo se recomienda al lector que lo intente hacer por su cuenta, es sencillo cuando uno es capaz de construir el rbol viendo sus recorridos pero sin haber visto el rbol terminado. Partiendo de los recorridos preorden e inorden del rbol de la figura 1 puede determinarse que la raz es el primer elemento del recorrido en preorden. ese elemento se busca en el arrayinorden. los elementos en el arrayinorden entre izq y la raz forman el subrbol izquierdo. asimismo los elementos entre der y la raz forman el subrbol derecho. por tanto se tiene este rbol:

A continuacin comienza un proceso recursivo. se procede a crear el subrbol izquierdo, cuyo tamao est limitado por los ndices izq y der. la siguiente posicin en el recorrido en preorden es la raz de este subrbol. queda esto:

El subrbol b tiene un subrbol derecho, que no tiene ningn descendiente, tal y como indican los ndices izq y der. se ha obtenido el subrbol izquierdo completo de la raz a, puesto que b no tiene subrbol izquierdo:

Despus seguir construyndose el subrbol derecho a partir de la raz a. La implementacin de la construccin de un rbol partiendo de los recorridos en preorden y en inorden puede consultarse aqu (en c). Arbol binario de bsqueda Un rbol binario de bsqueda es aquel que es: - una estructura vaca o - un elemento o clave de informacin (nodo) ms un nmero finito -a lo sumo dosde estructuras tipo rbol, disjuntos, llamados subrboles y adems cumplen lo siguiente: * Todas las claves del subrbol izquierdo al nodo son menores que la clave del nodo. * Todas las claves del subrbol derecho al nodo son mayores que la clave del nodo. * Ambos subrboles son rboles binarios de bsqueda. un ejemplo de rbol binario de bsqueda:

figura 5 Al definir el tipo de datos que representa la clave de un nodo dentro de un rbol binario de bsqueda es necesario que en dicho tipo se pueda establecer una relacin de orden. por ejemplo, suponer que el tipo de datos de la clave es un puntero (da igual a lo que apunte). si se codifica el rbol en pascal no se puede establecer una relacin de orden para las claves, puesto que pascal no admite determinar si un puntero es mayor o menor que otro. En el ejemplo de la figura 5 las claves son nmeros enteros. dada la raz 4, las claves del subrbol izquierdo son menores que 4, y las claves del subrbol derecho son mayores que 4. esto se cumple tambin para todos los subrboles. si se hace el recorrido de este rbol en orden central se obtiene una lista de los nmeros ordenada de menor a mayor. Cuestin: qu hay que hacer para obtener una lista de los nmeros ordenada de mayor a menor? Una ventaja fundamental de los rboles de bsqueda es que son en general mucho ms rpidos para localizar un elemento que una lista enlazada. por tanto, son ms rpidos para insertar y borrar elementos. si el rbol est perfectamente equilibrado -esto es, la diferencia entre el nmero de nodos del subrbol izquierdo y el nmero de nodos del subrbol derecho es a lo sumo 1, para todos los nodosentonces el nmero de comparaciones necesarias para localizar una clave es aproximadamente de logn en el peor caso. adems, el algoritmo de insercin en un rbol binario de bsqueda tiene la ventaja -sobre los arrays ordenados, donde se empleara bsqueda dicotmica para localizar un elemento- de que no necesita hacer una reubicacin de los elementos de la estructura para que esta siga ordenada despus de la insercin. dicho algoritmo funciona avanzando por el rbol escogiendo la rama izquierda o derecha en funcin de la clave que se inserta

y la clave del nodo actual, hasta encontrar su ubicacin; por ejemplo, insertar la clave 7 en el rbol de la figura 5 requiere avanzar por el rbol hasta llegar a la clave 8, e introducir la nueva clave en el subrbol izquierdo a 8. El algoritmo de borrado en rboles es algo ms complejo, pero ms eficiente que el de borrado en un array ordenado. Ahora bien, suponer que se tiene un rbol vaco, que admite claves de tipo entero. Suponer que se van a ir introduciendo las claves de forma ascendente. ejemplo: 1,2,3,4,5,6 se crea un rbol cuya raz tiene la clave 1. se inserta la clave 2 en el subrbol derecho de 1. a continuacin se inserta la clave 3 en el subrbol derecho de 2. Continuando las inserciones se ve que el rbol degenera en una lista secuencial, reduciendo drsticamente su eficacia para localizar un elemento. de todas formas es poco probable que se de un caso de este tipo en la prctica. si las claves a introducir llegan de forma ms o menos aleatoria entonces la implementacin de operaciones sobre un rbol binario de bsqueda que vienen a continuacin son en general suficientes. Existen variaciones sobre estos rboles, como los avl o red-black (no se tratan aqu), que sin llegar a cumplir al 100% el criterio de rbol perfectamente equilibrado, evitan problemas como el de obtener una lista degenerada. Operaciones bsicas sobre rboles binarios de bsqueda - bsqueda Si el rbol no es de bsqueda, es necesario emplear uno de los recorridos anteriores sobre el rbol para localizarlo. el resultado es idntico al de una bsqueda secuencial. aprovechando las propiedades del rbol de bsqueda se puede acelerar la localizacin. simplemente hay que descender a lo largo del rbol a izquierda o derecha dependiendo del elemento que se busca. booleanbuscar(tarbol *a, intelem) { if (a == null) return false; else if (a->clave <elem) return buscar(a->der, elem); else if (a->clave >elem) return buscar(a->izq, elem); elsereturn true; }

Insercin La insercin tampoco es complicada. es ms, resulta practicamente idntica a la bsqueda. cuando se llega a un rbol vaco se crea el nodo en el puntero que se pasa como parmetro por referencia, de esta manera los nuevos enlaces mantienen la coherencia. si el elemento a insertar ya existe entonces no se hace nada. voidinsertar(tarbol **a, intelem) { if (*a == null) { *a = (arbol *) malloc(sizeof(arbol)); (*a)->clave = elem; (*a)->izq = (*a)->der = null; } else if ((*a)->clave <elem) insertar(&(*a)->der, elem); else if ((*a)->clave >elem) insertar(&(*a)->izq, elem); } Borrado La operacin de borrado si resulta ser algo ms complicada. se recuerda que el rbol debe seguir siendo de bsqueda tras el borrado. pueden darse tres casos, una vez encontrado el nodo a borrar: 1) el nodo no tiene descendientes. simplemente se borra. 2) el nodo tiene al menos un descendiente por una sola rama. se borra dicho nodo, y su primer descendiente se asigna como hijo del padre del nodo borrado. ejemplo: en el rbol de la figura 5 se borra el nodo cuya clave es -1. el rbol resultante es:

3) El nodo tiene al menos un descendiente por cada rama. al borrar dicho nodo es necesario mantener la coherencia de los enlaces, adems de seguir manteniendo la estructura como un rbol binario de bsqueda. la solucin consiste en sustituir la informacin del nodo que se borra por el de una de las hojas, y borrar a continuacin dicha hoja. puede ser cualquier hoja? no, debe ser la que contenga una de estas dos claves: la mayor de las claves menores al nodo que se borra. suponer que se quiere borrar el nodo 4 del rbol de la figura 5. se sustituir la clave 4 por la clave 2. la menor de las claves mayores al nodo que se borra. suponer que se quiere borrar el nodo 4 del rbol de la figura 5. se sustituir la clave 4 por la clave 5. El algoritmo de borrado que se implementa a continuacin realiza la sustitucin por la mayor de las claves menores, (aunque se puede escoger la otra opcin sin prdida de generalidad). para lograr esto es necesario descender primero a la izquierda del nodo que se va a borrar, y despus avanzar siempre a la derecha hasta encontrar un nodo hoja. a continuacin se muestra grficamente el proceso de borrar el nodo de clave 4:

Codificacin: el procedimiento sustituir es el que desciende por el rbol cuando se da el caso del nodo con descencientes por ambas ramas. void borrar(tarbol **a, intelem) { void sustituir(tarbol **a, tarbol **aux); tarbol *aux;

if (*a == null) /* no existe la clave */ return; if ((*a)->clave <elem) borrar(&(*a)->der, elem); else if ((*a)->clave >elem) borrar(&(*a)->izq, elem); else if ((*a)->clave == elem) { aux = *a; if ((*a)->izq == null) *a = (*a)->der; else if ((*a)->der == null) *a = (*a)->izq; else sustituir(&(*a)->izq, &aux); /* se sustituye por la mayor de las menores */ free(aux); } } Ficheros relacionados implementacin de algunas de las operaciones sobre rboles binarios. Ejercicio resuelto Escribir una funcin que devuelva el numero de nodos de un rbol binario. una solucin recursiva puede ser la siguiente:

Funcion nodos(arbol : tipoarbol) : devuelve entero; inicio si arbol = vacio entonces devolver 0; en otro caso devolver (1 + nodos(subarbol_izq) + nodos(subarbol_der)); fin Adaptarlo para que detecte si un rbol es perfectamente equilibrado o no. Problemas propuestos Arboles binarios: oie 98. (enunciado) Aplicacin prctica de un rbol Se tiene un fichero de texto ascii. para este propsito puede servir cualquier libro electrnico de la librera gutenberg o cervantes, que suelen tener varios cientos de miles de palabras. el objetivo es clasificar todas las palabras, es decir, determinar que palabras aparecen, y cuantas veces aparece cada una. palabras como 'nio'-'nia', 'vengo'-'vienes' etc, se consideran diferentes por simplificar el problema. Escribir un programa, que recibiendo como entrada un texto, realice la clasificacin descrita anteriormente. ejemplo: texto: "a b'a c. hola, adios, hola" la salida que produce es la siguiente: a2 adios 1 b1 c1 hola 2 Ntese que el empleo de una lista enlazada ordenada no es una buena solucin. si se obtienen hasta 20.000 palabras diferentes, por decir un nmero, localizar una palabra cualquiera puede ser, y en general lo ser, muy costoso en tiempo. se puede hacer una implementacin por pura curiosidad para evaluar el tiempo de ejecucin, pero no merece la pena. La solucin pasa por emplear un rbol binario de bsqueda para insertar las claves. el valor de log(20.000) es aproximadamente de 14. eso quiere decir que localizar una palabra entre 20.000 llevara en el peor caso unos 14 accesos. el contraste con el empleo de una lista es simplemente abismal. por supuesto, como se ha comentado anteriormente el rbol no va a estar perfectamente equilibrado, pero nadie escribe novelas manteniendo el orden lexicogrfico (como un diccionario) entre las palabras, asi que no se obtendr nunca un rbol muy

degenerado. lo que est claro es que cualquier evolucin del rbol siempre ser mejor que el empleo de una lista. Por ltimo, una vez realizada la lectura de los datos, slo queda hacer un recorrido en orden central del rbol y se obtendr la solucin pedida en cuestin de segundos. Una posible definicin de la estructura rbol es la siguiente: typedefstructtarbol { char clave[maxpalabra]; int contador; /* numero de apariciones. iniciar a 0 */ structtarbol *izq, *der; } tarbol; arbol binario Un rbol binario es un conjunto finitode elementos, de nombre nodos de Forma que:el rbol binario es vaci si no tiene ningn elemento enel.el rbol binario contiene un nodo raz y los dos queparten de l, llamados nodo izquierdo y nodo derecho.los rboles tiene 3 recorridos diferentes los cuales son: re- orden p in-orden post-orden pre-orden Definicin: El recorrido pre-orden lo recorre de la siguientemanera, viaje a travs del rbol binariodesplegando el contenido en la raz, despus viaje a travs del nodo izquierdo y despus atravs del nodo derecho. Detalle: Te mp toma el valor de la raz y compara si elrbol tiene algn elemento, de otra maneradesplegara rbol vaci y terminara el mtodo.si el rbol tiene

elementos dentro de l, lorecorrer y viajara a travs de los arreglos izq yder para determinar que valor meter en la pila yen te mp para de esta manera imprimir elsiguiente elemento correspondiente. in-orden el recorrido in-orden lo recorre de la siguiente manera, viaje a travs del rbol binario desplegando el contenido en el nodo izquierdo despus la raz y finalmente viaja a travs del nodo derecho. detalle: te mp toma el valor de la raz y compara si el rbol tiene algn elemento, de otra manera desplegara rbol vaci y terminara el mtodo. si el rbol tiene elementos dentro de l, lo recorrer y viajara a travs de los arreglos izq y der para determinar que valor meter en la pila y en te mp para de esta manera imprimir el siguiente elemento correspondiente. Operaciones bsicas una tarea muy comn a realizar con un rbol esejecutar una determinada operacin con cada uno delos elementos del rbol. esta operacin se considera entonces como un parmetro de una tarea msgeneral que es la visita de todos los nodos o, como se denomina usualmente, del recorrido del rbol. si se considera la tarea como un proceso secuencial,entonces los nodos individuales se visitan en un ordenespecfico, y pueden considerarse como organizadossegn una estructura lineal. de hecho, se simplificaconsiderablemente la descripcin de muchosalgoritmos si puede hablarse del proceso del siguienteelemento en el rbol, segn un cierto ordensubyacente. bsqueda Definicin: la bsqueda es similar a todas los mtodos anteriores de bsqueda, simplemente efecta un recorrido comparando el elemento que deseas encontrar contra cada uno de los elementos en los arreglos. Detalle: el algoritmo de bsqueda compara el elemento a buscar con cada uno de los datos de nuestro rbol, compara si el elemento con el nodo raz, si no se encuentra en la raz compara elemento contra la raz para empezar a viajar por el rbol respectivamente, usa un mtodo similar al anterior hasta encontrar el elemento. de otra forma la bsqueda es fallida.

Un rbol binario puede definirse como un rbol que en cada nodo puede tener como mucho grado 2,es decir, a lo ms 2 hijos. los hijos suelen denominarse hijo a la izquierda e hijo a la derecha, establecindose de esta forma un orden en el posicionamiento de los mismos. Todas las definiciones bsicas que se dieron para rboles generales permanecen inalteradas sin ms que hacer las particularizaciones correspondientes. en los rboles binarios hay que tener en cuenta el orden izqda-drcha de los hijos. por ejemplo: los rboles binarios a) y b) de la figura 1(adoptamos el convenio de que los hijos a la izquierda son extrados extendindonos hacia la izquierda y los hijos a la derecha a la derecha) son diferentes, puesto que difieren en el nodo 5.el rbol c por convenio se supone igual al b) y no al a). El tipo de dato abstracto Arbol binario. Para construir el tda arbol binario bastara con utilizar las primitivas de los rboles generales pero dado la gran importancia y peculiaridades que tienen este tipo de rboles, construiremos una serie de operaciones especficas. consideraremos las siguientes: Crear (e,ti,td).devuelve un rbol cuya raz contiene la etiqueta e asignando como hijo a la izquierda ti y como hijo a la derecha td. destruir (t).libera los recursos que mantienen el rbol t de forma que para volver a usarlo se debe asignar un nuevo valor con la operacin de creacinrbol binario de bsqueda. los rboles binarios se utilizan frecuentemente para representar conjuntos de datos cuyos elementos se identifican por una clave nica. si el rbol est organizado de tal manera que la clave de cada nodo es mayor que todas las claves su subrbol izquierdo, y menor que todas las claves del subarbol derecho se dice que este rbol es un rbol binario de bsqueda. Operaciones bsicas una tarea muy comn a realizar con un rbol es ejecutar una determinada operacin con cada uno de los elementos del rbol. esta operacin se considera entonces como un parmetro de una tarea ms general que es la visita de todos los nodos o, como se denomina usualmente, del recorrido del rbol. Clasificacin de arboles binarios existen cuatro tipos de rbol binario:.

rbol binario distinto. rbol binario similares. rbol binario equivalentes. rbol binario completos. rbol binario distinto Se dice que dos rboles binarios son distintos cuando sus estructuras son diferentes. Arbol binario similar dos arboles binarios son similares cuando sus estructuras son idnticas, pero la informacin que contienen sus nodos es diferente. rbol binario equivalente son aquellos arboles que son similares y que adems los nodos contienen la misma informacin. ejemplo: rbol binario completo son aquellos arboles en los que todos sus nodos excepto los del ultimo nivel, tiene dos hijos; el subarbol izquierdo y el subrbol derecho. La idea tras los rboles-b es que los nodos internos deben tener un nmero variable de nodos hijo dentro de un rango predefinido. Cuando se inserta o se elimina un dato de la estructura, la cantidad de nodos hijo vara dentro de un nodo. para que siga mantenindose el nmero de nodos dentro del rango predefinido, los nodos internos se juntan o se parten. Un rbol-b se mantiene balanceado porque requiere que todos los nodos hoja se encuentren a la misma altura. Los rboles b tienen ventajas sustanciales sobre otras implementaciones cuando el tiempo de acceso a los nodos excede al tiempo de acceso entre nodos. este caso se da usualmente cuando los nodos se encuentran en dispositivos de almacenamiento secundario como los discos rgidos. cada nodo tiene como mximo m hijos. Cada nodo (excepto raz y hojas) tiene como mnimo m/2 hijos. La raz tiene al menos 2 hijos si no es un nodo hoja.

Todos los nodos hoja aparecen al mismo nivel. un nodo no hoja con k hijos contiene k-1 elementos almacenados. Los hijos que cuelgan de la raz (r1, , rm) tienen que cumplir ciertas condiciones: El primero tiene valor menor que r1. El segundo tiene valor mayor que r1 y menor que r2, etc. El ltimo hijo tiene valor mayor que rm.

OBJETIVO: Analizar y comprender las diferentes colecciones de datos, as como la clasificacin de los mismos para tener un conocimiento adecuado, a la vez, aplicarlo en la vida prctica. ARREGLOS Un arreglo (array) es una coleccin de datos del mismo tipo, que se almacenan en posiciones consecutivas de memoria y reciben un nombre comn. Para referirse a un determinado elemento de un array se deber utilizar un ndice, que especifique su posicin relativa en el array. Un arreglo es una coleccin finita, homognea y ordenada de elementos. Los arreglos se clasifican de acuerdo con el nmero de dimensiones que tienen. As se tienen los: Unidimensionales (vectores) Bidimensionales (tablas o matrices) Multidimensionales (tres o ms dimensiones) LISTA ENLAZADA Una lista enlazada es un conjunto de elementos llamados *nodos en los que cada uno de ellos contiene un dato y tambin la direccin del siguiente nodo.

* NODOS: es un registro que contiene un dato de inters y al menos un puntero para referenciar (apuntar) a otro nodo. LISTAS ENLAZADAS SIMPLES Una lista de enlace simple es una lista enlazada de nodos, donde cada nodo tiene un nico campo de enlace. Una variable de referencia contiene una referencia al primer nodo, cada nodo (excepto el ltimo) enlaza con el nodo siguiente, y el enlace del ltimo nodo contiene NULL para indicar el final de la lista. En conclusin, esta lista tiene un enlace por nodo. Este enlace apunta al siguiente nodo en la lista, o al valor NULL o a la lista vaca, si es el ltimo nodo.

LISTAS DOBLEMENTE ENLAZADAS Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces, uno al nodo siguiente, y otro al anterior. Las listas doblemente enlazadas no necesitan un nodo especial para acceder a ellas, pueden recorrerse en ambos sentidos a partir de cualquier nodo, esto es porque a partir de cualquier nodo, siempre es posible alcanzar cualquier nodo de la lista, hasta que se llega a uno de los extremos. TIPOS DE DATOS (C) Para C, y basndonos en la declaracin de nodo que hemos visto ms arriba, trabajaremos con los siguientes tipos: typedef struct _nodo \{ int dato; struct _nodo *siguiente; struct _nodo *anterior; } tipoNodo; typedef tipoNodo *pNodo; t ypedef tipoNodo *Lista;

tipoNodo es el tipo para declarar nodos, evidentemente. pNodo es el tipo para declarar punteros a un nodo. Lista es el tipo para declarar listas abiertas doblemente enlazadas. Tambin es posible, y potencialmente til, crear listas doblemente enlazadas y circulares.

OPERACIONES DE UNA LISTA ENLAZADA Recorrido. Esta operacin consiste en visitar cada uno de los nodos que forman la lista. Insercin. Esta operacin consiste en agregar un nuevo nodo a la lista. Borrado. La operacin de borrado consiste en quitar un nodo de la lista, redefiniendo las ligas que correspondan. Bsqueda. Esta operacin consiste en visitar cada uno de los nodos, tomando al campo liga como puntero al siguiente nodo a visitar. VENTAJAS DE LAS LISTAS DOBLEMENTE ENLAZADAS SOBRE LAS LISTAS SIMPLEMENTE ENLAZADAS Las listas doblemente enlazadas requieren ms espacio por nodo y sus operaciones bsicas resultan ms costosas pero ofrecen una mayor facilidad para manipular ya que permiten el acceso secuencial a lista en ambas direcciones. En particular, uno puede insertar o borrar un nodo en un nmero fijo de operaciones dando nicamente la direccin de dicho nodo (Las listas simples requieren la direccin del nodo anterior para insertar o suprimir correctamente). Algunos algoritmos requieren el acceso en ambas direcciones. VENTAJAS DE LISTAS ENLAZADAS SOBRE LOS ARREGLOS (ARRAYS) No requieren memoria extra para soportar la expansin. Por el contrario, los arrays requieren memoria extra si se necesita expandirlo (una vez

que todos los elementos tienen datos no se pueden aadir datos nuevos a un array). Ofrecen una insercin/borrado de elementos ms rpida que sus operaciones equivalentes en los arrays. Slo se tienen que actualizar los enlaces despus de identificar la posicin de insercin/borrado. Desde la perspectiva de los arrays, la insercin de datos requiere el movimiento de todos los otros datos del array para crear un elemento vaco. De forma similar, el borrado de un dato existente requiere el movimiento de todos los otros datos para eliminar el elemento vaco. VENTAJAS DE LOS ARREGLOS (ARRAYS) SOBRE LAS LISTAS ENLAZADAS Los elementos de los arrays ocupan menos memoria que los nodos porque no requieren campos de enlace. Los arrays ofrecen un acceso ms rpido a los datos, mediante ndices basados en enteros. APLICACIN DE LISTAS LINEALES Las listas enlazadas son usadas como mdulos para otras muchas estructuras de datos, tales como pilas, colas y sus variaciones. El campo de datos de un nodo puede ser otra lista enlazada. Mediante este mecanismo, podemos construir muchas estructuras de datos enlazadas con listas; esta prctica tiene su origen en el lenguaje de programacin Lisp, donde las listas enlazadas son una estructura de datos primaria (aunque no la nica), y ahora es una caracterstica comn en el estilo de programacin funcional. A veces, las listas enlazadas son usadas para implementar vectores asociativos, y estas en el contexto de las llamadas listas asociativas. Hay pocas ventajas en este uso de las listas enlazadas; hay mejores formas de implementar stas estructuras, por ejemplo con rboles binarios de bsqueda equilibrados. Sin embargo, a veces una lista enlazada es dinmicamente creada fuera de un subconjunto propio de nodos semejante a un rbol, y son usadas ms eficientemente para recorrer sta serie de datos.

Corporativo Internacional

Nombre: Edwin Gonzlez Castaeda

Profesor: Gabriel Flores Gonzlez

Materia: Organizacin de estructura de datos

Tema: Estructura lineales

2do Semestre

ndice

Estructuras Lineales1 Aplicaciones2 Pilas3 Colas..4 Listas Generalizadas..5 Colas6 Nodo I M F...7 Representacin de colas8 Estructura dinmica.9 Colas dobles..10 Cola doble con salida restringida11 Pilas..12 CIMA LONG.13 Pilas dinmica.14

INTRODUCCION

Una lista es un sentido amplio, es un conjunto de datos del mismo tipo (simple o estructurado), cada elemento de la cual tiene un predecesor (excepto el primero) y un nico sucesor (excepto el ultimo) y cuyo nmero de elemento es variable. Se distinguen dos tipos de listas: continuas y lineales. Las estructuras lineales de datos se caracterizan por que sus elementos estn en secuencia, relacionados en forma lineal, uno de otro. Cada elemento de las

estructuras puede estar conformado por uno o barios subelemento o campos que pueden pertenecer a cualquier tipo de datos, pero que normalmente son tipos bsicos

Estructuras Lineales Las estructuras lineales son importantes porque aparecen con mucha frecuencia en situaciones de la vida Ejemplos: Una cola de clientes de un banco, las instrucciones de un programa, los caracteres de una cadena o las pginas de un libro Caractersticas: existe un nico elemento, llamado primero, existe un nico elemento, llamado ltimo, cada elemento, excepto el primero, tiene un nico procesador, cada elemento, excepto el ltimo, tiene un nico sucesor Operaciones: crear la estructura vaca, insertar un elemento, borrar un elemento y obtener un elemento.

Para definir claramente el comportamiento de la estructura es necesario determinar en qu posicin se inserta, un elemento nuevo y qu elemento se borro y se obtuvo. Aplicaciones La realizacin de sistemas operativos para los computadores. Los cuales hacen un uso intensivo de las estructuras lineales, ya que internamente se soportan en los sistemas operativos, las colas de ejecucin para los dispositivos, las pilas de llamada a los subprogramas de cualquier programa, las listas de usuarios en los sistemas operativos multiusuario. Pilas Contenedor de objetos que son insertados y eliminados de acuerdo con el principio de que el ltimo en entrar es el primero en salir (LIFO -LastInFirstOut). Los elementos se insertan de uno en uno (push-apilar) Los elementos se sacan en orden inverso al cual se han insertado (pop-desapilar) El nico elemento que se puede observar es el ltimo insertado (topeo cima). Aplicaciones en la vida real: Navegadores en Internet almacenan en una pila las direcciones de los sitios ms recientemente visitados. Los editores de texto proporcionan normalmente un botn deshacer que cancela las operaciones de edicin recientes y restablece el estado anterior del documento. Aplicaciones en programacin. Las pilas son una estructura de datos muy usada como estructura auxiliar en diversos algoritmos y esquemas de programacin. Los casos ms representativos son: Palndromo, cambio de base, etc. Solitario, Laberinto, etc. (back tracking). Evaluacin de expresiones aritmticas, conversin de notaciones (postfija, prefija, infija)... Recursin. Implementacin del TAD Pila Paso 1: Definicin interfaz public interface Pila<E>{ publicint tamao(); publicbooleanesVacio(); public E top() throwsPilaVaciaExcepcion; publicvoidpush (E elemento); public E pop() throwsPilaVaciaExcepcion; } Paso 2: ClaseimplementelainterfazMediantearrayspublicclassArrayPila<E>implementsPila <E>

Mediante listas enlazadas genricas, publicclass, Enlazada, Pila<E> implements Pila<E> Colas Una cola es una lista donde se insertan objetos donde el primer objeto insertado es el primero en eliminar y as sucesivamente hasta llegar al ultimo objeto insertado.

Listas Generalizadas La lista es un tipo ms general de estructura lineal donde las inserciones y eliminaciones se asen en cualquier punto de la lista. Poroso se debe especificar donde se requiere que se haga la operacin. Colas En las colas el elemento que entro en primer lugar tambin es el primero en salir por ello se conocen como listas FIFO (First in - Firstout). As pues la diferencia con las pilas recibe en el modo de entrada y salida de datos. En las colas las inserciones se realizan al final de la lista no al principio por ello las colas se usan para almacenar datos que necesiten ser procesados segn el orden de llegada. Nodo I M F En la informtica muchas aplicaciones para las colas (colas de aplicacin) etc. . Por ejemplo un sistema de tiempo compartido suele tener un procesador central y una serie de perifricos compartidos: discos, impresoras, etc. Los recursos se comparten con diferentes usuarios y se utiliza una cola para almacenar el programa por los diferentes usuarios que esperan su turno de ejecucin. El procesador atiende por riguroso orden de llamado de usuario. Representacin de colas Las colas pueden representarse como estructuras dinmicas o arrays. Estructura dinmica Inicio Medio Final Arreglo

100 Inicio Final

264

119

48

Colas dobles Existe una variable de la cola simple que es la bicola (doble cola). Es una cola bidimensional en la que las inscripciones y eliminaciones se pueden realizar en cualquiera de los dos extremos de la cola. Insercin Eliminacin Inicio Eliminacin Insercin Existen dos variantes de la bicola (cola doble): Cola doble con entrada restringida: Acepta valor, inserciones solo al final de la columna. Cola doble con salida restringida: Acepta eliminaciones solo al inicio de la cola. Indica Memoria Dinmica Crear I I=NULL Crear M M=NULL Crear F F=NULL Mientras si (Quiere dar de alta) Si I=Null Entonces Crear Nodo I I sig=NULL M=I F=I Si no Crear nodo F Fsig =M M=F Cola doble con salida restringida Acepta eliminaciones solo al inicio de la cola. I MF Crear I Crear F Crear M I=NULL, F= NULL , M= NULL Si I=NULL Final

CrearNodo I Isig1= NULL Isig2 = NULL F=I M=I Si no Crear nodo F Msig1 =F Fsig2=M Fsig1=I M=F Isig2=F Solo se da de baja al inicio de la cola Solo se da de alta al final de la cola. I MF Pilas Una pila es un tipo de lista lineal en la que la insercin y borrado de nuevos elementos solo se pueden realizar por un extremo que se denomina tope o cima. La pila es una estructura con numerosas analogas en la vida real, una pila de platos, una pila de documentos, una pila de monedas. Dado que la operacin de insertar y eliminar se realizan por un solo extremo (superior) los elementos solo pueden eliminarse en un orden inverso al que se insertan en la pila. El ultimo elemento que se pone en la pila es el primero que se puede sacar; por ello a estas lista se les conoce como LIFO (Last In - firstOut). En cualquiera de las tres formas mostradas anteriormente para representar una pila S se puede definir un vector con determinado tamao (longitud mxima). Se considera un elemento entero P como indicador de la pila. P es el subndice del array correspondiente al elemento cima de la pila (esto ocupa la ultima posicin). Si la pila esta vaca P es igual a cero. CIMA LONG. (Puntero de la pila) MAX Las operaciones mas usuales asociadas a las pilas son push, que es meter o poner. Pop que es sacar o quitar, que es eliminar el elemento de la pila. Idealmente una pila puede contener un numero ilimitado de elementos y no producir nunca desbordamiento sin embargo, si hablamos de almacenamiento se hace necesario la implementacin de pilas con apuntadores (almacenamiento dinmico). Pilas dinmica (STACK)

Es la ms sencilla de las estructuras dinmicas de datos. Las pilas son utilizadas sobre todo por los sistemas operativos y controladores de lenguaje de alto nivel, una pila es dinmica porque crece y se encoge a medida que sea necesario o para trabajar con pilas es importante definir los siguientes procedimientos: PUSH.- Poner datos en la pila. POP.- sacar datos de la pila ERROR.- Pueden sacar datos de pilas vacas.

Grafos Software para la construccin, edicin y anlisis de grafos. Este software pretende ser de utilidad para la docencia y el aprendizaje de la teora de grafos (graph theory), y otras disciplinas relacionadas como la ingeniera de organizacin industrial, la logstica y el transporte, investigacin operativa, el diseo de redes, etc. Grafos se puede usar perfectamente para el modelado y resolucin de problemas reales de cierto tamao y complejidad. Un grafo representa un modelo de una realidad empresarial en forma de red. Este modelo podr ser analizado desde distintos puntos de vista gracias a los algoritmos y funciones incorporados en el software Grafos. Independientemente de sus conocimientos actuales sobre la materia, la informacin recogida en estas pginas y el libro sern un buen punto de partida para el aprendizaje en mayor profundidad de la teora de grafos y su aplicacin en la realidad empresarial e industrial.

la idea La filosofa de Grafos es la siguiente: dibujar, modelar, resolver y analizar. Con esto se pretende que el usuario tenga libertad absoluta para tratar y abordar los problemas de grafos. Usted podr dibujar libremente el grafo sin preocuparse del anlisis o algoritmo que utilizar posteriormente. Grafos le avisar en caso de no factibilidad o de cualquier otro requerimiento para un anlisis en particular. Los estudiantes que usen Grafos experimentarn un proceso de aprendizaje basado en su libertad y en etapas de prueba-error. Esa libertad en la utilizacin del programa y su filosofa de aprendizaje, fue la idea inicial y la inquietud que origin este proyecto. Otros programas existentes guan al usuario paso a paso, descartando de entrada su libertad de eleccin y construccin. el proyecto

Grafos comenz en el ao 2003 como parte de un proyecto de investigacin y desarrollo de aplicaciones informticas de diseo modular orientadas hacia la docencia, la investigacin y las labores profesionales de ingeniera de organizacin industrial. El desarrollo est orientado hacia los siguientes objetivos: Desarrollar un interfaz para la construccin y edicin de grafos en modo tabular o grfico, y que permita la incorporacin modular de multitud de funciones. Desarrollar una estructura de clases y libreras .dll con un conjunto de algoritmos de resolucin de diferentes problemas de teora de grafos. Redactar y publicar un completo manual de usuario actualizado a la ltima versin disponible.

Actualmente, el proyecto Grafos sigue en activo, en proceso de programacin de nuevos algoritmos, la incorporacin de nuevas funciones y la redaccin de documentacin actualizada. Si lo desea puede conocer el estado del desarrollo, sumarse a este proyecto compartiendo el desarrollo y otras experiencias relacionadas. TEORIA DE GRAFICAS INTRODUCCIN La teora de grficas o teora de grafos es aplicada en una gran cantidad de reas tales como ciencias sociales, lingstica, ciencias fsicas, ingeniera de comunicacin, y otras. La teora de grafos tambin juega un papel importante en varias reas de la ciencia de la computacin, tales como teora de cambio y lgica de diseo, inteligencia artificial, lenguajes formales, grficos por computadora, sistemas operativos, compiladores, y organizacin y recuperacin de informacin. CONCEPTOS BSICOS DE LA TEORIA DE GRAFOS La terminologa usada en la teora de grafos no es estndar. No es poco usual encontrar que

varios trminos diferentes son usados como sinnimos. Esta situacin, de cualquier manera, llega a ser ms complicada cuando descubrimos que un trmino en particular es usado por diferentes autores para referirse a conceptos desiguales. Esta situacin es natural debido a la gran diversidad de campos en los que la teora de grficas se aplica. En esta seccin debemos definir un grafo como un sistema matemtico abstracto. De cualquier manera, para dar algo de sentido a la terminologa usada y tambin para desarrollar algunas ideas intuitivas, se representar un grafo por medio de un diagrama. Ese diagrama se llamar igualmente grafo. Las definiciones y trminos aqu presentados no estn restringidos a aquellos grafos que pueden ser representados por medio de diagramas, aunque parezca ser el caso ya que estos trminos tengan una fuerte asociacin con dicha representacin. Debemos resaltar que una representacin diagramtica es posible nicamente en casos muy simples. Los mtodos alternativos para representar grafos sern igualmente discutidos. Definiciones bsicas Primeramente se consideraran varios grafos que son presentados por medio de diagramas. Algunos de estos grafos pueden ser considerados como grafos de cierta relacin, pero hay algunos otros que no pueden ser interpretados de esta manera. Considrese el diagrama de la figura 1.1. Para el propsito de nuestro estudio, estos

diagramas representarn grafos. Ntese que cada diagrama consiste de un conjunto de elementos que son representados por puntos o crculos y estn en ocasiones etiquetados como v1, v2,..., o 1,2,.... Tambin, en cada diagrama ciertas parejas de dichos puntos estn conectados por lneas o arcos. Definicin. Un grafo G = V,E, consiste de un conjunto V no vaci llamado el conjunto de nodos (puntos, vrtices) del grafo, donde E es el conjunto de los ejes del grafo, y es un mapeo del conjunto de ejes E a un conjunto ordenado o desordenado de elementos pares de V. Debemos asumir de lo anterior que ambos, los conjuntos V y E de un grafo son finitos. Sera conveniente denotar un grafo G como V,E , o simplemente como G. Ntese que la definicin de grafo implica que para cada eje del grafo G podemos asociar una pareja ordenada o no ordenada de nodos pertenecientes al grafo. Si un eje x E est asociado con un par ordenado (u, v) o un par no ordenado (u, v), donde u,vV , entonces se dice que el eje x conecta o une los nodos u y v. Cualquier par de nodos que estn conectados por un eje en un grafo son llamados nodos adyacentes. Definicin. En un grafo G = (V,E), un eje que est asociado a un par ordenado de V x V es llamado eje dirigido de G, mientras un eje que est asociado a un par no ordenado de

nodos es llamado eje no dirigido. Un grafo del cual cada nodo es dirigido es llamado dgrafo o grafo dirigido. Un grafo en el cual cada eje es no dirigido es llamado grafo no dirigido. Si algunos ejes son dirigidos y otros no dirigidos en un grafo, se trata de un grafo mixto.

Trayectorias, Alcances y Conectividad

Sea G = (V , E) un grafo dirigido simple. Considerando una secuencia de ejes de G tal que el nodo terminal de cada eje en la secuencia es el nodo inicial del siguiente eje, si existe alguno en la secuencia. Un ejemplo de secuencia de este tipo es: ((vi1,vi2 ),(vi2 ,vi3),...,(vik 2 ,vik 1),(vik 1,vik )) Definicin: Cualquier secuencia de ejes de un grafo dirigido tal que el nodo terminal de cada eje en la secuencia es el nodo inicial de otro eje, si existe, siendo el siguiente en la secuencia define la trayectoria de un grafo. Una trayectoria se define como un viaje a travs de los nodos que aparecen en la secuencia, y que se origina en el nodo inicial del primer eje y finaliza en el nodo terminal del ltimo eje de la secuencia. Definicin: El nmero de ejes que aparecen en la secuencia de una trayectoria es llamado longitud de la trayectoria.

EL MODELO DEL SISTEMA

Un sistema consiste de un nmero finito de recursos que son distribuidos entre un nmero de procesos que compiten por ellos. Los recursos son clasificados en diferentes tipos, cada uno de los cuales consiste de algn nmero de instancias iguales a. Ciclos de CPU b. Espacio en memoria c. Archivos y dispositivos de E/S (tales como impresoras, unidades de cinta y de disco, etc.) son ejemplos de tipos de recursos. Si un sistema tiene dos CPU's, entonces el tipo CPU tiene dos instancias. Un proceso debe solicitar un recurso antes de usarlo y liberarlo despus de usarlo. Un proceso puede solicitar tantos recursos como sean necesarios para llevar a cabo la tarea para la cual ha sido diseado. Obviamente el nmero de recursos solicitados no debe exceder el nmero de recursos disponibles en el sistema. En otras palabras, un proceso no debe pedir tres impresoras si en el sistema solo existen dos. Bajo un modo normal de operacin un proceso puede utilizar un recurso slo en la siguiente secuencia: 1.- PETICIN. Si la peticin no puede ser satisfecha inmediatamente

(por ejemplo, el recurso esta siendo utilizado por otro proceso), entonces el proceso solicitante debe esperar hasta que pueda adquirir el recurso. 2.- USO. El proceso puede utilizar un recurso (por ejemplo, si el recurso es una impresora en lnea, el proceso puede imprimir en la impresora). 3.- LIBERACIN. El proceso libera el recurso. La peticin y liberacin del recurso son peticiones al sistema. El uso de recursos puede tambin hacerse solo a travs de llamadas al sistema. Por lo tanto, para cada uso, el sistema operativo checa para asegurarse de que el proceso usuario ha pedido y se le han asignado los recursos. Una tabla del sistema registra cuando un recurso est libre o asignado, y si est asignado, a que proceso. Si un proceso pide un recurso que est asignado en ese momento a otro proceso, ste puede ser agregado a una cola de procesos en espera de ese recurso.

DEFINICIN DE ABRAZO MORTAL

Un conjunto de procesos est en un abrazo mortal cuando todos los

procesos en ese conjunto estn esperando un evento que slo puede ser causado por otro proceso en el conjunto. Los eventos a que nos referimos son concernientes con la asignacin y liberacin de recursos principalmente. Sin embargo, otro tipo de eventos pueden llevar a la existencia de abrazos mortales. Los abrazos mortales pueden tambin involucrar diferentes tipos de recursos. Por ejemplo, considere un sistema con una impresora y una unidad de disco. Suponga que el proceso P tiene asignada la unidad de disco y que el proceso Q tiene asignada la impresora. Ahora, si P pide la impresora y Q pide la unidad de disco, ocurre un abrazo mortal.

CARACTERIZACIN DE UN ABRAZO MORTAL

Un abrazo mortal es una condicin indeseable. En un abrazo mortal, los procesos nunca terminan de ejecutarse y los recursos del sistema esta amarrados, evitando que otros procesos puedan siquiera empezar.

CONDICIONES NECESARIAS

Una situacin de abrazo mortal puede surgir s y solo s las siguientes cuatro condiciones ocurren simultneamente en un sistema. _ Exclusin Mutua. Al menos un recurso es mantenido en un modo no-compartible; esto es, slo un proceso a la vez puede usar el recurso. Si otro proceso solicita ese recurso, tiene que ser retardado hasta que el recurso haya sido liberado.

_ Retener y esperar. Debe existir un proceso que retenga al menos un recurso y est esperando para adquirir recursos adicionales que estn siendo retenidos por otros procesos. _ No existe el derecho de desasignar (No preemption). Los recursos no pueden ser desasignados (preempted); esto es, un recurso slo puede ser liberado voluntariamente por el proceso que lo retiene, despus de que el proceso ha terminado su tarea. _ Espera Circular. Debe existir un conjunto {p0, p1, ...,pn} de procesos en espera tal que p0 est esperando por un recurso que est siendo retenido por p1, p1 est esperando por un recurso que est siendo retenido por p2, ..., pn-1 est esperando por un recurso que est siendo retenido por pn y pn est esperando por un recurso que est siendo retenido por p0.

MTODOS PARA MANEJAR LOS ABRAZOS MORTALES

Existen dos mtodos para manejar el problema de los abrazos mortales. Podemos usar algn protocolo para asegurar que el sistema nunca entrar en un estado de abrazo mortal podemos permitir que el sistema entre en un estado de abrazo mortal y despus recuperarnos. El recuperarse de un abrazo mortal puede ser muy difcil y muy caro.

Por ello, primeramente consideraremos los mtodos para asegurar que no ocurran los abrazos mortales. Comnmente, existen dos mtodos: PREVENCIN de abrazos mortales (Deadlock Prevention) EVASIN de abrazos mortales (Deadlock Avoidance).

PREVENCIN DE ABRAZOS MORTALES.

Para que ocurra un abrazo mortal, deben presentarse cada una de las cuatro condiciones necesarias. Al asegurarnos de que por lo menos una de estas condiciones no se presente, podemos prevenir la ocurrencia de un abrazo mortal. Examinando cada una de las condiciones necesarias por separado.

A. EXCLUSIN MUTUA.

La condicin de exclusin mutua debe mantenerse para los tipos de recursos que no son compartibles. Por ejemplo, una impresora no puede ser compartida simultneamente por varios procesos. En general, no es posible prevenir los abrazos mortales negando la condicin de exclusin mutua, debido a que algunos recursos son intrnsecamente no compartibles.

B.RETENER Y ESPERAR.

Para asegurar que la condicin de retener y esperar nunca ocurra en el sistema, se debe garantizar que siempre que un proceso solicite un recurso, este no pueda retener otros recursos. Un protocolo que puede ser usado requiere que cada proceso solicite y le sean asignados todos los recursos antes de que empiece su ejecucin.

NO EXISTE EL DERECHO DE DESASIGNAR

La tercera condicin necesaria es que no debe de existir el derecho de desasignar recursos que han sido previamente asignados. Con el fin de asegurar que esta condicin no se cumple, el siguiente protocolo puede ser usado. Si un proceso que esta reteniendo algunos recursos solicita otro recurso que no puede ser asignado inmediatamente (esto es, que el proceso tenga que esperar), entonces todos los recursos que tiene este proceso en espera son desasginados. Esto es, los recursos son liberados implcitamente. Los recursos liberados son agregados a la lista de los recursos por los cuales esta esperando el proceso. El proceso solo puede volver a ser reinicializado cuando haya obtenido otra vez todos los recursos que tenia asignados, as como el nuevo recurso que estaba solicitando. Alternativamente si un proceso solicita algunas recursos, primero verificamos si estos estn disponibles. Si es as, entonces se le asignan. De otro modo, se verifica si estn asignados a alguno de los procesos que estn en espera de recursos adicionales. Si es as, los recursos deseados son desasginados del proceso en espera y

asignados al proceso solicitante. De otra manera (no estn disponibles, ni asignados a procesos en espera) el proceso que hace la solicitud debe esperar. Pero, mientras esta esperando, algunos de sus recursos pueden ser desasignados solamente si estos son solicitados. Un proceso puede ser reinicializado cuando se le asigna el recurso que haba solicitado y recupera cualquier recurso que haya sido desasignado mientras esperaba.

ESPERA CIRCULAR

Con el fin de asegurarse de que la condicin de espera circular nunca se presente, se puede imponer un ordenamiento total sobre todos los tipos de recursos. Esto es, asignamos a cada tipo de recurso un nmero entero nico, el cual permita comparar dos recursos y determinar cuando uno precede al otro en el ordenamiento. Mas formalmente, sea R={r1,r2,...,rn} el conjunto de tipos de recursos. Puede definirse una funcin uno a uno F:R->N, donde N es el conjunto de nmeros naturales. Por ejemplo, si el conjunto R de tipos de recursos incluye unidades de disco (UDD), unidades de cinta (UDC), lectoras pticos (LO) e impresoras (I), entonces la funcin F puede ser definida como sigue: F(LO) =1 F(UDD) = 5 F(UDC) = 7 F(I) = 12 Se puede considerar el siguiente protocolo para prevenir abrazos

mortales: Cada proceso puede solicitar recursos solamente en un orden creciente de numeracin. Esto es un proceso puede solicitar inicialmente cualquier numero de instancias de un tipo de recurso, digamos ri. Despus de esto, el proceso puede solicitar instancias de recursos del tipo rj si y solo si F(rj) > F(ri). Si varias instancias del mismo tipo de recurso son necesitadas, debe hacerse una sola peticin para todas las instancias debe ser usada. Por ejemplo, usando la funcin definida anteriormente, un proceso que quiere usar el lector ptico (LO) y la impresora (I) debe solicitar primero el (LO) y despus la (I). Alternativamente, se puede requerir simplemente que siempre que un proceso solicite una instancia del recurso tipo rj, este tenga que liberar cualquier recurso del tipo ri tal que F(ri) >= F(rj). Si este protocolo es usado, la condicin de cola circular no puede presentarse. Se puede demostrar este hecho asumiendo que existe una cola circular (prueba por contradiccin). Sea {p0, p2, p2, ..., pn} el conjunto de procesos que estn en la espera circular, donde pi esta esperando por un recurso ri, el cual es retenido por pi+1. (Aplicando modulo aritmtico sobre los ndices, pn esta esperando por un recurso rn que esta siendo retenido por p0). Entonces, debido a que el proceso pi+1 esta reteniendo el recurso ri mientras esta esperando el recurso ri+1, se debe de tener F(ri) < F(ri+1), para toda i. Pero esto significa que F(r0) < F(r1) < ... < F(rn) < F(r0). Por transitividad, F(r0) < F(r0), lo cual es imposible. Por lo tanto, no puede existir una espera circular. Debe notarse que la funcin F debe definirse de acuerdo al

ordenamiento de uso normal de los recursos en el sistema. Por ejemplo, usualmente se utiliza primero una (UDD) antes que la (I), por lo cual es razonable definir F(UDD) < F(i). EVASIN DE ABRAZOS MORTALES Los algoritmos de prevencin de abrazos mortales, como se discuti anteriormente, los previenen al restringir la manera en que se hacen las solicitudes. Las restricciones aseguran que al menos una de las condiciones necesarias no se presentar. Sin embargo, un efecto colateral de prevenir los abrazos mortales por este mtodo es la posible baja utilizacin de los recursos y el reducido desempeo del sistema. Un mtodo alternativo para evitar los abrazos mortales requiere de informacin adicional acerca de cmo van a ser solicitados los recursos. Por ejemplo, en un sistema con una lectora ptica y una impresora, pudiera ser que se dijera que el proceso P solicitar la lectora ptica y despus la impresora, antes de liberar ambos recursos. El proceso Q, por otro lado, solicitar primero la impresora y despus la lectora ptica. Con este conocimiento de la secuencia completa de peticiones y liberaciones de cada proceso, se puede decidir para cada peticin si el proceso debe esperar o no. Cada solicitud requiere que el sistema considere los recursos actualmente disponibles, los recursos actualmente asignados a cada proceso y las solicitudes y liberaciones futuras de cada proceso, para decidir si la solicitud actual puede satisfacerse o debe esperar para satisfacer un posible abrazo mortal futuro. Existen varios algoritmos que difieren en la cantidad y tipo de

informacin que requieren. El modelo mas sencillo y mas til requiere que cada proceso declare el mximo nmero de recursos de cada tipo que pudiera necesitar. Dada esta informacin a priori, para cada proceso, acerca del mximo nmero de recursos de cada tipo que puedan llegar a necesitar, es posible construir un algoritmo que asegure que el sistema nunca entrar en un estado de abrazo mortal. Este algoritmo define la aproximacin de evasin de abrazos mortales. Un algoritmo de evasin de abrazos mortales dinmicamente examina el estado de asignacin de recursos para asegurarse que nunca pueda existir una condicin de espera circular. El estado de asignacin de los recursos es definido por el nmero de recursos disponibles, asignados y la demanda mxima de los procesos. Un estado es seguro si el sistema puede asignar recursos a cada proceso (hasta su mximo) en algn orden y an puede evitar un abrazo mortal. Mas formalmente, un sistema est en un estado seguro solo si existe una secuencia segura. Una secuencia de procesos <p1,p2,...,pn> es una secuencia segura para el estado actual de asignacin si para cada pi, las solicitudes por recursos que pi puede aun solicitar pueden ser satisfechas con los recursos actualmente disponibles mas los recursos retenidos por todos los pj, con j<i. En esta situacin, si los recursos requeridos por el proceso pi no estn inmediatamente disponibles, entonces pi puede esperar hasta que todos los pj hallan terminado. Cuando ya han terminado, pi puede obtener todos los recursos que necesitaba, completando su tarea asignada, regresando los recursos asignados y terminando. Cuando pi termina, pi+1 puede obtener los

recursos necesarios y as en adelante. Si no existe esa secuencia, entonces se dice que el sistema esta en un estado inseguro. Un estado seguro no es un estado de abrazo mortal y un estado de abrazo mortal es un estado inseguro. Sin embargo, no todos los estados inseguros son estados de abrazo mortal. Un estado inseguro puede llevar a un estado de abrazo mortal. Mientras el estado sea seguro, el sistema operativo puede evitar los estados inseguros (y de abrazo mortal). En un estado inseguro, el sistema operativo no puede prevenir que los procesos soliciten los recursos de tal forma que ocurra un abrazo mortal: el comportamiento de los procesos controla los estados inseguros. Como ejemplo, considere un sistema con 12 unidades de disco (UDD) y tres procesos p0, p1 y p2. El proceso p0 requiere 10 UDD, p1 puede llegar a utilizar hasta 4 UDD y p2 puede llegar a utilizar hasta 9 UDD. Supngase que al tiempo T0, el proceso p0 retiene 5 UDD, p1 retiene 2 y p2 retiene 2 (por ello, existen 3 UDD disponibles). Necesidades Mximas Necesidades Actuales p0 10 5 p1 4 2 p2 9 7 Al tiempo 0, el sistema est en un estado seguro. La secuencia <p1,p0,p2> satisface la condicin de seguridad, debido a que a p1 pueden asignrsele inmediatamente todas las UDD que requiere y despus regresarlas cuando termine (el sistema tendr entonces 5 UDD disponibles), p0 ahora podr obtener todas las UDD que requiere y terminar (con lo que el sistema tendr 10 UDD disponibles) y

finalmente, p2 podr obtener todas las UDD que requiera y regresarlas al terminar (en ese momento el sistema tendr las 12 UDD disponibles). Observe que es posible ir de un estado seguro a un estado inseguro. Suponga que el tiempo T1, p2 solicita que se le asigne 1 UDD mas. El sistema ya no estar mas en un estado seguro. En este punto, solamente p1 puede obtener todas las UDD que necesita. Cuando este termine y las regrese el sistema tendr nicamente 4 UDD disponibles. Debido a que p0 tiene asignadas 5 UDD, pero requiere un mximo de 10, puede solicitar 5 mas. Como estas no estn disponibles, p0 tendr que esperar. Similarmente, p2 puede solicitar 5 UDD mas y tendr que esperar, con lo cual se llega a un estado de abrazo mortal. El error cometido fue permitir la solicitud del proceso p2 de una UDD mas. Si se hiciera que p2 esperar hasta que alguno de los otros procesos terminara y liberara sus recursos , entonces podra haberse evitado la situacin de abrazo mortal. Dado el concepto de estado seguro, se pueden definir algoritmos de evasin que aseguren que el sistema nunca entrar en un estado de abrazo mortal. La idea es simplemente asegurarse que el sistema siempre se permanece en un estado seguro. Inicialmente el sistema se encuentra en un estado seguro. Siempre que un proceso solicite un recurso que este actualmente disponible, el sistema debe decidir si el recurso puede ser asignado inmediatamente o si el proceso debe esperar. La solicitud se satisface solo si el sistema permanece en un estado seguro despus de la asignacin.

Observe que en este esquema si un proceso solicita un recurso que se encuentre actualmente disponible, puede que tenga que esperar. Por ello, la utilizacin de los recursos puede ser menor que sin un algoritmo de evasin de abrazos mortales.

DETECCIN DE ABRAZOS MORTALES

Si un sistema no utiliza algn protocolo para asegurar que no ocurrir un abrazo mortal. Entonces se requiere implantar un esquema de deteccin y recuperacin. Un algoritmo que examina el estado del sistema es invocado periodicamente para determinar cuando ha ocurrido un abrazo mortal. Si ste ha ocurrido, el sistema debe intentar recuperarse del abrazo mortal. Con la finalidad de hacerlo, el sistema debe: a. Mantener informacin acerca del estado actual de asignacin de recursos para cada uno de los procesos, as como tambin cualquier peticin de asignacin de recursos pendiente. b. Proporcionar un algoritmo que utilice esa informacin para determinar cuando el sistema ha entrado en un estado de abrazo mortal. An cuando no hemos trabajado sobre los puntos a y b mencionados, cabe hacer notar que el esquema de deteccin y recuperacin requiere de "overhead" que incluye no solo el costo de ejecucin de mantener la informacin necesaria y ejecutar el algoritmo de deteccin, sino que tambin las prdidas potenciales inherentes al recuperarse de un abrazo mortal.

Varias instancias de un tipo de recurso

El algoritmo de deteccin emplea varias estructuras de datos variables que son muy similares a las utilizadas en el algoritmo del banquero. Disponible. Un vector de longitud m indicando el nmero de recursos disponibles de cada tipo. Asignacin. Una matriz n x m definiendo el nmero de recursos de cada tipo que estan actualmente asignados a cada proceso. Peticin. Una matriz n x m indicando las peticiones actuales de cada proceso. Si Peticin[i,j] = k, entonces el proceso pi esta solicitando k instancias mas del tipo de recurso rj. La relacin menor-que (<) entre dos vectores esta definida como para el algoritmo del banquero. Para simplificar la notacin, nuevamente trataremos las matrices Asignacin y Peticin como vectores y nos referiremos a ellos como Asignacin i y Peticin i, respectivamente. El algoritmo de deteccin descrito posteriormente se debe a Shoshani y Coffman [1970]; el algoritmo simplemente investiga cualquier secuencia de asignacin posible para los procesos que an no han sido completados. 1. Sea Trabajo y Terminar los vectores de longitud n y m respectivamente. Inicialice Trabajo := Disponible. Para i=1, 2, .., n, si Asignacin i 0 entonces Terminar[i] := Falso; de otra manera, Terminar[i] := Verdadero.

2. Encuentre un ndice tal que: a. Terminar[i] = Falso y b. Peticin i Trabajo. Si no existe tal I vaya al paso 4. 3. Trabajo := Trabajo + Asignacini Terminar[i] := Verdadero vaya al paso 2. 4. Si terminar[i] = Falso para alguna i, 1 i n, entonces el sistema est en un estado de abrazo mortal. Adems, si Terminar[i] = Falso entonces el proceso pi esta en el abrazo mortal. Nos podemos preguntar porque se reclaman los recurso del proceso pi tan pronto como se determina que Peticin i Trabajo. Sabemos que pi no esta actualmente en un abrazo mortal. As, si suponemos una actitud optimista y suponemos que pi no requerira mas recursos para completar su tarea; este devolver todas sus instancias de recursos al sistema. Si este no es es caso, puede ocurrir un abrazo mortal mas tarde, el cual ser detectado la siguiente vez que el algoritmo de deteccin sea invocado. Un ejemplo Considere un sistema con cinco procesos {p0, p1,p2, p3, p4, } y tres tipos de recursos {A, B,C}. El tipo de recurso A tiene & instancias, el recurso B tiene 2 instancias y el recurso C tiene 6 instancias. Suponga que al tiempo T0 tenemos el siguiente estado de asignacin de recursos: Asignacin Peticin Disponible ABCABCABC

p0 0 1 0 0 0 0 0 0 0 p1 2 0 0 2 0 2 p2 3 0 3 0 0 0 p3 2 1 1 1 0 0 p4 0 0 2 0 0 2 Aseguraremos que el sistema no est en un estado de abrazo mortal.De hecho si ejecutamos el algoritmo encontraremos que la secuencia <p0,p2,p3,p1,p4> resulta en Terminar := Verdadero para todo i. Suponga ahora qye el proceso p2 hace una solicitud adicional por una instancia del tipo C. La matriz Peticin se modifica como sigue. Peticin ABC p0 0 0 0 p1 2 0 2 p2 0 0 1 p3 1 0 0 p4 0 0 2 Decimos que ahora el sistema est en un estado de abrazo mortal. Aunque podemos reclamar los recursos mantenidos por el proceso p0, el nmero de recursos disponibles es insuficiente para satisfacer las peticiones de los otros procesos. Por ello, existe un abrazo mortal, que involucra a los procesos p1, p2, p3 y p4.

Corporativo Internacional

Nombre: Edwin Gonzlez Castaeda

Profesor: Gabriel Flores Gonzlez

Materia: Organizacin de estructura de datos

Tema: Ordenacin y bsqueda 2do Semestre

INDICE:

ORDENACION Y BUSQUEDA 1

Ordenacin por insercin 2

Ordenacin por seleccin 3

Bsqueda modificacin de datos 4

Bsqueda de hash 5

ORDENACIN Y BSQUEDA

ORDENACION POR INSERCION El fundamento de este mtodo consiste en insertar los elementos no ordenados del arreglo en subarreglos del mismo que ya estn ordenados. Dependiendo del mtodo elegido para encontrar la posicin de insercin tendremos distintas versiones del mtodo de insercin. El algoritmo de insercin directa se mejora fcilmente al notar que la secuencia destino aj..ai-1, donde debe insertarse el nuevo elemento, ya est ordenada . Por eso puede ser empleado un mtodo ms rpido para determinar el punto de insercin. La eleccin obvia es una bsqueda binaria que prueba la secuencia destino en la mitad y contina buscando hasta encontrar el punto de insercin. El algoritmo de clasificacin modificado recibe el nombre de insercin. PROCEDURE Insercin; VAR i,j,m,L,R:index; x:item; BEGIN

FOR i=2 TO n DO x=a[i]; L:=1; R:=i; WHILE L<R DO m:=(L+R) DIV 2; IF a[m] <=x THEN L:=m+1 ELSE R:=m END END; FOR j=i TO R+1 BY -1 DO a[j]:=a[j-1] (*desplazamiento*) END; a[R]:=x(*insercin*) END Ejemplo: Supngase que estn almacenados cuatro nmeros en un arreglo con casillas de memoria de x[1] a x[4]. Se desea disponer esos nmeros en orden creciente. La primera pasada de la ordenacin por burbujeo hara lo siguiente: Comparar el contenido de x[1] con el de x[2]; si x[1] contiene el mayor de los nmeros, se intercambian sus contenidos. Comparar el contenido de x[2] con el de x[3]; e intercambiarlos si fuera necesario. Comparar el contenido de x[3] con el de x[4]; e intercambiarlos si fuera necesario. Al final de la primera pasada, el mayor de los nmeros estar en x[4]. Ejemplo: Supngase que estn almacenados cuatro nmeros en un arreglo con casillas de memoria de x[1] a x[4]. Se desea disponer esos nmeros en orden creciente. La primera pasada de la ordenacin por burbujeo hara lo siguiente: Comparar el contenido de x[1] con el de x[2]; si x[1] contiene el mayor de los nmeros, se intercambian sus contenidos. Comparar el contenido de x[2] con el de x[3]; e intercambiarlos si fuera necesario. Comparar el contenido de x[3] con el de x[4]; e intercambiarlos si fuera necesario. Al final de la primera pasada, el mayor de los nmeros estar en x[4].

ORDENACION POR SELECCIN. Los mtodos de ordenacin por seleccin se basan en dos principios bsicos: Seleccionar el elemento ms pequeo (o ms grande) del arreglo. Colocarlo en la posicin ms baja (o ms alta) del arreglo. A diferencia del mtodo de la burbuja, en este mtodo el elemento ms pequeo (o ms grande) es el que se coloca en la posicin final que le corresponde. BUSQUEDA DE HASH En este mtodo se requiere que los elementos estn ordenados. El mtodo consiste en asignar el ndice a cada elemento mediante una transformacin del elemento, esto se hace mediante una funcin de conversin llamada funcin hash. Hay diferentes funciones para transformar el elemento y el nmero obtenido es el ndice del elemento.

Es una situacin que se produce cuando dos entradas distintas a una funcin de hash producen la misma salida. Es matemticamente imposible que una funcin de hash carezca de colisiones, ya que el nmero potencial de posibles entradas es mayor que el nmero de salidas que puede producir un hash. Sin embargo, las colisiones se producen ms frecuentemente en los malos algoritmos. En ciertas aplicaciones especializadas con un relativamente pequeo nmero de entradas que son conocidas de antemano es posible construir una funcin de hash perfecta, que se asegura que todas las entradas tengan una salida diferente. Pero en una funcin en la cual se puede introducir datos de longitud arbitraria y que devuelve un hash de tamao fijo (como MD5), siempre habr colisiones, dado que un hash dado puede pertenecer a un infinito nmero de entradas. Clasificacin

Hashing Perfecto: Existe una Funcin de Enumeracin que asigna a cada valor del dominio una nica posicin de memoria. No posee colisiones. Hashing Puro: La funcin de Hash puede asignar a dos valores distintos el mismo valor hash. y h(x1) = h(x2). Estos dos valores reciben el nombre de sinnimos. Las estructuras de hashing puros poseen colisiones y en consecuencia se debern establecer mecanismos para tratar los mismos. Podemos clasificarlos en estructuras cerradas y abiertas y dentro de las abiertas en estticas y dinmicas:

Cerradas: No utilizan un nuevo espacio en memoria. Abiertas: Utilizan espacio adicional.


Esttica: La estructura principal no crece. Dinmica: La estructura principal se expande a medida que aumenta la cantidad de elementos.

CONCLUSIONES Al final de todas las investigaciones me di cuenta que en cierta parte todas tienen un seguimiento, tambin entre mas investigaba mas m interesaban los temas ya que una vez enfocado en ellos es muy interesante cada uno de ellos y nos muestra que es muy importante para llevarlos en el rea de la informtica como en otras materias, espero estos temas me sirvan de mucho y siga investigando mas sobre le tema ya que es muy interesante

BIBLIOGRAFIA Donald Knuth. Fundamental Algorithms, Third Edition. Addison-Wesley, 1997. ISBN 0-201-89683-4. Sections 2.2.32.2.5, pp.254298.

La ley sopa
Es un proyecto de ley presentado en octubre del 2011 en USA, que tiene como objetivo combatir la descarga ilegal de contenidos con derechos de autor subidos a Internet. Se llama la ley sopa por sus siglas que significan: (Stop Online Piracy Act) que significa acto o ley de detener la piratera, esta ley nos afecta a todos, porque esta ley, si es permitida va analizar todas las pginas de internet y por lo tanto cuando queramos hacer tareas no vamos a poder acceder a las paginas por que estarn bloqueadas al igual que no podrs subir paginas o si es posible primero son analizadas para ver que no tiene derechos de autor, muchos piensan que la ley sopa no es verdad, la ley es de estados unidos pero si se aprueba la mayora de paginas estn o son de estados unidos, ejemplo facebook twitter, Hotmail.com yahoo, youtube etc, Otras cosas que nos afecta la ley sopa es que si ingresas a las paginas puedes ser multado, o asta la crcel puedes ir, si compartes un documento que ellos al analizarlo dicen que es piratera te investigan te buscan y pues te multan. La ley sopa nos quita la libertad de expresin ya que pues ahora como muchos no saben aun lo que es la ley sopa pueden ser afectados sin que lo sepan Tan grave es la situacin que Google, Facebook y Twitter se han unido para rechazar absolutamente estos proyectos de ley que van a destrur por completo la infraestructura del internet a nivel global, adems de convertirlos en policas de sus usuarios y perder protecciones que ahora tienen. eBay y Mozilla tambin estn en contra. Menos iniciativas en la red: Al tener a vigilantes SOPA en Internet, muchos startups o proyectos no recibiran el apoyo financiero de cualquier tipo de inversin por el temor a ser bloqueados en cualquier momento, lo cual derivara en la prdida de capital, tiempo y oportunidades a los emprendedores. Adis a Facebook, Twitter y redes sociales: Como la ley SOPA tiene la facultad de bloquear cualquier tipo de contenido con copyright subido por usuarios o propietarios del sitio, todas las webs basadas en comunidades y con muchsimo contenido subido por millones, sufrira el bloqueo porque sera inevitable que se alojara contenido con copyright. En otras palabras, se van las redes sociales, se va la comunicacin rpida y eficiente (en otros casos simplemente la anulara por ser la nica va) con seres queridos, amigos lejanos e incluso contactos profesionales.

Atenta contra la libertad de expresin: Digamos que un reportero ciudadano sube un video a Youtube informando sobre algn tema noticioso o, alguien decide subir contenido periodstico de algn lugar lejano para conocer sobre algn hecho terrible, podra ser bloqueado.

You might also like