Algoritmos Aleatorizados

Slides:



Advertisements
Presentaciones similares
Arreglos Unidimensionales y Bidimensionales ESTRUCTURAS DE DATOS I
Advertisements

IBD Clase 7.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS DE BUSQUEDA.
Unidad 8 Métodos de Búsqueda
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Ordenamiento Interno y Búsqueda Binaria
Programación y Estructuras de Datos
Igor Santos Grueiro. Muchos objetos tienen CLAVE.
ÁRBOLES BINARIOS DE BUSQUEDA
Operaciones sobre un árbol
Ordenamiento Radix Equipo 3 Arenas Sapien Jorge Iván
Sistemas de Razonamiento Lógico
Implementación de listas
ESTRUCTURAS DE DATOS AVANZADAS
PROGRAMACION DE ESTRUCTURAS DE DATOS
Teoría de lenguajes y compiladores
Árboles balanceados AVL
Colas y Listas Enlazadas
Integrantes: Esteban Jiménez Guesseppe Lozada Mario Rodriguez Gustavo Tenorio Fabio.
Introducción a Funciones de una variable
Cont. Arbol Binario de Búsqueda (2). Sobre los recorridos Las versiones recursivas de los recorridos son costosas debido a la gran cantidad de llamadas.
Almacenamiento y Recuperacion de Información TAD_ABB Ana Lilia Laureano Cruces Universidad Autónoma Metroplotiana.
Tema Nº4.
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Listas circulares.
Ana Lilia Laureano Cruces UAM-A
Material de apoyo Unidad 8 Estructura de datos
PROGRAMACION II.  Es un conjunto de datos no necesariamente del mismo tipo, los cuales se podrán manipular o realizar cualquier operación sobre cada.
Semana 5 Subprogramas..
Estructuras de Datos MC Beatriz Beltrán Martínez.
Árboles, montículos y grafos Cola de prioridades, montículos
Heaps Mauro Maldonado Abril/2005. Introducción La estructura heap es frecuentemente usada para implementar colas de prioridad. En este tipo de colas,
7.  El TDA Diccionario.
Estructura de Datos y Algoritmos

Diseño y análisis de algoritmos
Estructuras de Datos Arreglos.
Algoritmos de búsqueda
BUSQUEDA SECUENCIAL Consiste en revisar elemento tras elemento hasta encontrar el dato buscado, o llegar al final del conjunto de datos disponibles. La.
Elaborado por: Guillermo Baquerizo I Término
Estructura de Datos II Equipo 4 Equipo 7 Acosta Montiel Miguel A.
Almacenamiento y Recuperacion de Información- Arbol AVL
Aplicación de estructuras de datos
MÉTODO DE PIXELES DE BORDE
Árboles Binarios Estructuras de Datos.
Backtracking 1. Método general. 2. Análisis de tiempos de ejecución.
Problema de inclusión en una Curva Digital Por Orellana Muñoz, Alfonso Paz Vicente, Rafael Pérez Medina, Gerardo Rodríguez Naranjo.
Análisis y Diseño de Algoritmos
Estructura de Datos M.C. José Andrés Vázquez Flores FCC/BUAP
Teoría de Sistemas Operativos Administración de Archivos.
Estructura de Datos M.C. J. Andrés V. F. FCC/BUAP
Arboles B (búsqueda externa)
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
Heap Fibonacci heap de Fibonacci es una estructura de datos similar a un heap binomial pero con mejor coste amortizado. se utiliza para mejorar el tiempo.
INSTITUTO TECNOLOGICO DE APIZACO
Teoría de lenguajes y compiladores
 Introducción  Conceptos El equipo demostrara y mostrara los conceptos, definición y funcionamiento de una las “listas doblemente enlazadas y circulares”
Sesión 6: Redes Bayesianas - Inferencia
Hoja de Cálculo EXCEL Introducción a la informática
Árboles Binarios de Búsqueda (ABB)
MIA - Grupo 5 Unidad 2.
Árboles Equilibrados Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2015.

M.C. Meliza Contreras González
Laboratorio de programación
PUNTEROS. Los punteros son de amplia utilización en programación y muchos lenguajes permiten la manipulación directa o indirecta de los mismos. Su razón.
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
Clase II Estructuras dinámicas (TAD) Listas Enlazadas. ¿A que llamamos estructuras dinámicas? ¿Por qué son necesarias? Ventajas y Desventajas que tendremos.
Transcripción de la presentación:

Algoritmos Aleatorizados Skip List Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Idea Inicial La búsqueda en un ABB es eficiente, mientras que la inserción puede provocar desbalanceo del árbol y dar como peor caso búsqueda secuencial. Por otro lado, la inserción en una lista es fácil, mientras que la búsqueda será siempre secuencial. La idea consiste en construir una especie de supercarretera con varios carriles, desde alta velocidad hasta mínima velocidad. Yendo en los carriles de alta es posible recorrer mas nodos, pero también es fácil que nos pasemos. Ir por los carriles de baja significa ir mas lento, pero llegar seguro. Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Qué es? Una Skip List es una Estructura de Datos, basada en listas enlazadas paralelas. Fueron “descubiertas” por William Pugh en 1990. Su mayor cualidad es que tiene una eficiencia comparable a la de un árbol binario (orden O ( Log n) para la mayoría de las operaciones). Básicamente, una skip list es un aumento de una lista enlazada (ordenada) con enlaces adicionales, añadidos de manera aleatoria con una distribución Geométrica/Negativa Binomial (?). Las operaciones de inserción, búsqueda y borrado son ejecutadas en un tiempo logarítmico aleatorio. Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Cómo es? Una Skip List es construida por “capas”. La capa más baja es una lista enlazada ordenada ordinaria. A partir de esta capa, se construyen capas superiores que trabajan como “caminos expresos” para las listas más bajas. Las capas superiores se construyen de la siguiente manera: cada elemento en la capa i aparece en la capa i+1 con una probabilidad definida p (normalmente 1/2). Así, en promedio, cada elemento aparece en 1/(1-p) listas. Los elementos almacenados en una Skip List deben tener una llave mediante la cual se puede realizar la búsqueda de manera eficiente (de la misma manera que se realiza en un árbol binario ordenado). Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Cómo es? Primer elemento Último elemento 22 NIL 10 20 27 3 31 Apuntadores Llave (key) 10 Objeto guardado Elementos de la lista Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Ventajas Su implementación es más sencilla que la de un ABB. Es necesario menos espacio de almacenamiento para su manejo (en operaciones intermedias) que en un ABB. En las operaciones de inserción y eliminación no es necesario reconstruir la estructura. Soporta fácilmente la mezcla, unión y diferencia de listas. Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Desventajas No siempre la operación de búsqueda (e inserción) es más rápida (tiempo máquina) que en los ABB (por el mismo hecho de ser una estructura aleatoria). En muchos casos la dependencia de algoritmos con carácter aleatorio puede dificultar el seguimiento de los movimientos en la estructura y depuración de operaciones. Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Búsqueda La búsqueda de elementos (como ya se dijo), tiene un tiempo que pertenece a O(log(n)) en muchos de los casos. No se puede decir que en todos los casos por el mismo carácter aleatorio de la estructura. Para buscar se comienza con el elemento “cabeza” (el cual está en todas las listas) y con la lista más superior (que es la más rápida). Vamos recorriendo cada lista enlazada hasta que encontramos el último elemento que es menor o igual que el elemento que buscamos. El número esperado de pasos es 1/p. El costo total de la búsqueda es O ( Log(1/p )(n/ p)), el cual es O (log n) cuando p es una constante (lo cual ya vimos que se cumple). Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Búsqueda Ejemplo: queremos buscar el objeto cuyo key sea 20 Partimos con el primer puntero del primer elemento Apunta al elemento 22. Mayor que 20, bajamos un nivel. Nuevamente el puntero indica 22, bajamos de nivel. 22 NIL Indica 10 < 20, avanzamos. 10 20 27 3 31 Indica 22 > 20, bajamos. Indica 20, hemos encontrado el elemento buscado, retornamos. Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Búsqueda Ejemplo: queremos buscar el objeto cuyo key sea 30 Indica 22 < 30, avanzamos. Indica NIL, bajamos. Indica NIL, bajamos. 22 NIL Indica NIL, bajamos. Ind. 27 < 30, avanzamos. 10 20 27 3 31 Indica NIL, bajamos. Indica 31 > 30 y no se puede bajar más, como no hay más, no existe. Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Búsqueda Actual = Primer Nodo Enlace = Máximo Numero de enlaces repetir mientras Actual != Nodo Buscado o              (Primer enlace referencia Nulo o Nodo Mayor)     mientras Enlace sea Nulo           Enlace = Enlace – 1     fin mientras     si Actual = Nodo Siguiente entonces           Actual = Nodo Siguiente     en caso contrario           Enlace = Enlace - 1     fin si fin mientras Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Mantenimiento El mantenimiento de la lista con saltos y en especial las operaciones de añadido y eliminación, tendrán una mayor complejidad cuando el numero de saltos establecidos sea mayor. La razón de ello radica en que el mayor número de saltos implicará un mayor número de sublistas en distintos niveles que es necesario mantener y por lo tanto un mayor número de enlaces a modificar. Tanto en la Inserción como en la eliminación, la primera parte de la operación es la búsqueda del elemento; tras comprobar su existencia proceder a la operación de modificación si existe o no existe (dado el caso). Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Inserción Se crea un nodo cabecera con el máximo nivel de enlaces posible. Se realiza una búsqueda en la que se mantendrá el historial de los nodos recorridos (sus referencias), con el fin de poder modificar el nuevo camino tras la inserción. Se calcula el nivel del nuevo nodo (como ya vimos, empezando desde el nivel más bajo y con una probabilidad p de estar en un nivel superior) y se crea dicho nodo. A partir del historial de búsqueda se crearan los enlaces al nuevo nodo (insertando el mismo en las listas de cada nivel que el nuevo nodo tenga). Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Eliminación Ejemplo: queremos eliminar el objeto cuyo key sea 20 22 > 20, bajamos 22 > 20, bajamos 22 NIL 10 <= 20, avanzamos 22 <= 20, bajamos 20 <= 20, bajamos 10 20 <= 20, llegamos al final, borramos el siguiente guardando su altura 20 27 3 31 Guardamos puntero al elemento donde bajamos Guardamos puntero al elemento donde bajamos Guardamos puntero al elemento donde bajamos Guardamos puntero al elemento donde bajamos Guardamos puntero al elemento donde ‘topamos’ Diego Fernando Salas Arciniegas Universidad Nacional de Colombia Arreglo de punteros ‘anterior’ Altura del elemento a borrar: 2

Eliminación Nos cambiamos al elemento a borrar 22 NIL 10 20 27 3 31 El elemento a borrar tiene altura 2, tomamos los últimos 2 elementos del arreglo ‘anterior’ Borrar a ‘borrado’ El segundo puntero del elemento apuntado por la segunda de ‘anterior’, apuntará donde apunta el segundo puntero de ‘borrado’ El primer puntero del elemento apuntado por la primera de ‘anterior’, apuntará donde apunta el primer puntero de ‘borrado’ Arreglo de punteros ‘anterior’ Diego Fernando Salas Arciniegas Universidad Nacional de Colombia Altura del elemento a borrar: 2

Implementación Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Implementación public class IntSkipListNode { public int key; public IntSkipListNode[] next;     IntSkipListNode(int i, int n) {         key = i;         next = new IntSkipListNode[n];         for (int j = 0; j < n; j++) {             next[j] = null; }     } } Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Seguro es Log n? Asumamos que las llaves son los números enteros de 1 a n. Sea L(x) el número de niveles de una Skip List que contiene un elemento x, sin contar el nivel más bajo. Cada nueva copia de x es creada con una probabilidad de 1/2. Es decir, tenemos p=1/2. El valor esperado puede ser calculado recursivamente; al comienzo, tiramos una moneda, con probabilidad 1/2 cae cara (asumimos que es nuestro falso) y L(x)=0, por otro lado, con probabilidad 1/2 cae sello, por lo tanto, aumentamos L(x) y volvemos a calcular. Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Seguro es Log n? La recursión anterior nos da como resultado Para poder analizar el costo esperado necesitamos una cota del número máximo de niveles que se pueden producir en una Skip List. Pero esta cota no puede ser calculada. En cambio, vamos a calcular que este número de niveles es O(log n) con una “alta probabilidad”. El término “alta probabilidad” es un término técnico que significa que la probabilidad es al menos 1-1/nc. Para una constante c>=1. Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Seguro es Log n? Para que una clave x aparezca en el nivel k, se debieron haber lanzado k sellos seguidos (ya que el nivel del nodo más alto es el nivel de la lista). Por lo tanto: De esta manera, veamos la probabilidad de que nuestra algún nodo tenga Log n niveles. Ahora, la Skip List tiene ese número de niveles, sí y sólo si alguno de sus nodos lo tiene. Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Seguro es Log n? Así, por la definición dada, tenemos que: Así, la Skip List tiene una “alta probabilidad” de tener O(Log n) niveles. Diego Fernando Salas Arciniegas Universidad Nacional de Colombia

Algoritmos Aleatorizados Muchas Gracias! Diego Fernando Salas Arciniegas Universidad Nacional de Colombia