estructuras de datos y algoritmos tema 3: arrays y listas enlazadas

Download Estructuras de Datos y Algoritmos Tema 3: Arrays y listas enlazadas

Post on 06-Jan-2017

213 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • 10 Sep. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 1

    Estructuras de Datos y Algoritmos

    Tema 3: Arrays y listas enlazadas

    Departamento de InformticaUniversidad de Valladolid

    Curso 2011-12

    Grado en Ingeniera InformticaGrado en Ingeniera Informtica de Sistemas

  • 1. SECUENCIAS

    9 Feb. 2011 Csar Vaca Rodrguez, Dpto.Informtica, UVa 2

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 3

    TADs versus Representacin Un TAD define las operaciones fundamentales, la relacin

    entre los elementos (ninguna, precedencia, jerarqua, vecindad)y una serie de restricciones (elementos repetidos si/no,existencia o no de operaciones de igualdad y comparacin entreellos).

    Una representacin define el cmo se almacenan loselementos en memoria y puede establecer una relacin deprecedencia o jerarqua entre ellos (que puede no coincidir conla del TAD) y aadir restricciones a las impuestas por el TAD.

    La representacin condiciona los algoritmos disponibles pararealizar las operaciones del TAD y por tanto la eficiencia de lasoperaciones.

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 4

    Secuencias La categora de representaciones basadas en secuencias

    definen una relacin de precedencia entre los elementos.

    Pueden usarse para representar TADs que no impogan esarelacin: Se puede representar un conjunto, por ejemplo,mediante una secuencia.

    Existen tres clasificaciones, ortogonales entre s:

    Secuencias ordenadas (orden interno) o no ordenadas(orden externo). Si no se dice nada se supone no ordenada.

    Secuencias contiguas o enlazadas. Secuencias lineales o circulares. Si no se dice nada se

    supone que son lineales.

    Los arrays de bits son un caso especial til para los TADsconjuntos y mapas (si se dan ciertas condiciones).

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 5

    Contiguo versus enlazado Las representaciones contiguas almacenan los elementos en

    posiciones consecutivas de memoria. Se corresponden con el concepto de array de la mayora de

    lenguajes de programacin. Aunque existen algunos lenguajes en los que no son la estructura de

    datos fundamental (Javascript Mapas, Haskell Lista enlazada) Su ventaja es que el acceso indexado es O(1). La desventaja es que las modificaciones (insercin, borrado, )

    requieren desplazar elementos (peor caso O(n))

    Las representaciones enlazadas almacenan los elementos encualquier posicin de memoria. A cada elemento se le aadeinformacin extra para indicar la secuencia. Desventaja: El acceso indexado es O(n) en peor caso. Ventaja: Las modificaciones, si se est situado en el punto

    adecuado, no requieren desplazar elementos: Su orden es O(1)

  • 2. REPRESENTACIONES CONTIGUAS

    9 Feb. 2011 Csar Vaca Rodrguez, Dpto.Informtica, UVa 6

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 7

    Contigua lineal Consiste en un array de capacidad m que almacena n elementos

    (n m) en sus primeras posiciones.

    El acceso basado en ndice es O(1)

    El acceso basado en valor (bsqueda) es O(n) en el peor caso:Algoritmo de bsqueda secuencial.

    Se supone que el array se puede ampliar: Si se inserta unelemento en un array lleno (n = m) se duplica su capacidad:

    En general eso implica crear un nuevo array de capacidad 2n ycopiar los datos del array antiguo en el nuevo.

    Supone un coste O(n)

    Pero garantiza que las siguientes n-1 inserciones tienen espacio.

    m-1n-1v

    0

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 8

    Contigua lineal (II) La insercin de un elemento para que se situe en el ndice i

    supone desplazar hacia delante los siguientes elementos:

    La insercin al final es O(1) en tiempo amortizado (mejor caso).

    La insercin al principio es O(n) (peor caso).

    El caso promedio es O(n)

    i+1i m-1n-1

    v0

    x

    i m-1n0

    k [n1..i]:v[k+1] v[k]v[i] xn n+1

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 9

    Contigua lineal (III) El borrado del elemento situado en el ndice i supone desplazar

    hacia atrs los siguientes elementos:

    El borrado del ltimo es O(1) (mejor caso).

    La borrado del primero es O(n) (peor caso).

    El caso promedio es O(n)

    i m-1n-1

    v0 i m-1n-20

    k [i+1..n1]:v[k1] v[k]n n1

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 10

    Contigua circular (I) Una representacin contigua lineal es adecuada para representar

    una pila, eligiendo como cabeza (extremo por el que se realizanlas operaciones de insercin y borrado) el ltimo elemento.

    Todas las operaciones seran O(1) en tiempo amortizado.

    El problema consiste en que al representar una cola o bien lainsercin o bien el borrado deben hacerse sobre el primerelemento (y tendran un coste O(n)).

    La representacin circular consigue que las operaciones deinsercin o borrado sobre ambos extremos (primer y ltimoelemento) tengan coste O(1).

    Para ello se elimina la restriccin de que los elementos seencuentren situados al principio del array (aunque siguen estandocontiguos, sin huecos entre ellos)

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 11

    Contigua circular (II) Se aaden dos variables, ini y fin, que marcan la zona del vector

    ocupada por los elementos.

    Se supone que los extremos del array estan unidos: Tras laposicin m-1 se encuentra la posicin 0, y la posicin anterior a la0 es la m-1. Puede darse que ini > fin

    Todos los incrementos o decrementos de ndices se realizanmdulo m.

    ini m-1fin0 fin m-1ini0

    0

    m-1

    ini

    fin

    0

    m-1

    fin

    ini

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 12

    Contigua circular (III) Las operaciones de ndice deben usar aritmtica modular:

    Incremento del ndice k: (k+1) mod m Decremento del ndice k: (k+m-1) mod m (se suma m para trabajar

    siempre con valores positivos) Nmero de elementos: (fin-ini+m+1) mod m Se debe evitar que ini = fin (existe ambiguedad en este caso)

    El acceso por ndice a los elementos se realiza contando a partirde la posicin dada por ini: v[(ini+i) mod m]

    Insercin al principio: ini (ini+m-1) mod m; v[ini] x

    Insercin al final: fin (fin+1) mod m; v[fin] x

    Borrado del primero: ini (ini+1) mod m

    Borrado del ltimo: fin (fin+m-1) mod m

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 13

    Contigua circular - Insercin{Insertarxenposicinisima(0based)Sesuponequenoesnecesarioampliarelvector}

    p (ini+i)mod m{Posicinisimaenelvector }k fin{Semuevenhaciadelanteloselementos[p..fin] }mientras k p

    v[(k+1)mod m] v[k];{v[k+1] v[k] }k (k+m1)mod m;{k k1 }

    {Insertarelelemento}v[p] x{Incrementarelndicealltimo}fin (fin+1)mod m

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 14

    Contigua circular - Borrado

    {Borrarelementoenposicinisima(0based)}

    p (ini+i)mod m{Posicinisimaenelvector }k (p+1)mod m{Semuevenhaciaatrasloselementos[p+1..fin] }mientras k fin

    v[(k+m1) mod m] v[k];{v[k1] v[k] }k (k+1)mod m;{k k+1 }

    {Decrementarelndicealltimo}fin (fin+m1)mod m

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 15

    Contigua ordenada En una representacin contigua ordenada los elementos se

    disponen en orden interno (de menor a mayor o de mayor amenor, segn convenga).

    La operacin de acceso al i-simo menor es O(1).

    La operacin de bsqueda puede usar el algoritmo de bsquedabinaria, y es de orden O(log n)

    Las operaciones de insercin y borrado son O(n) en el peorcaso porque tienen que desplazar elementos.

    El borrado del mximo es O(1) si el orden es de menor a mayor. El borrado del mnimo es O(1) si el orden es de mayor a menor. La operacin de insercin debe buscar el punto de insercin, y

    desplazar los elementos: O(n log n) + O(n)

    No existen ventajas en representarla de forma circular

    m-1n-1v

    0

  • 3. REPRESENTACIONES ENLAZADAS

    9 Feb. 2011 Csar Vaca Rodrguez, Dpto.Informtica, UVa 16

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 17

    Representacin Enlazada En las representaciones enlazadas los elementos se almacenan

    en nodos, que aaden al menos un campo para indicar donde seencuentra el elemento siguiente.

    La posicin de los nodos en memoria es irrelevante: No tienenporqu ser contiguos y pueden existir huecos entre ellos.

    La secuencia se establece por la informacin extra queincorpora el nodo.

    Elemento

    Referencia a nodo siguiente

    Nodo

    Referencia a nodo anterior (doble)

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 18

    Variantes Simple, lineal

    Ini

    Doble, linealIni

    Fin

    Fin

    Simple, circular

    Doble, circular

  • 11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 19

    Eficiencia Simple, lineal: Acceso, borrado e insercin del primer elemento

    son operaciones O(1). Sobre el ltimo elemento son O(n)

    Doble, lineal: Las inserciones y borrados basados en iterador sonms sencillas de codificar.

    Simple, circular: Acceso e insercin son O(1) sobre ambosextremos. El borrado del primero es O(1), y el del ltimo O(n).

    Doble, circular: Acceso, borrado e insercin por ambos extremosson operaciones O(1)

    Las operaciones basadas en ndice requieren pasar por todoslos elementos anteriores, y son O(n) en el peor caso.

    El algoritmo de bsqueda binaria es O(n), debido aldesplazamiento para encontrar el punto medio.

    La ordenacin por fusin es O(n log n) y O(log n) en espacio.

  • 11 Feb. 2011 Csar V

Recommended

View more >