Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

Estructuras de datos avanzadas: Casos de uso reales

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 44 Anuncio
Anuncio

Más Contenido Relacionado

Presentaciones para usted (20)

Similares a Estructuras de datos avanzadas: Casos de uso reales (20)

Anuncio

Más de Software Guru (20)

Más reciente (20)

Anuncio

Estructuras de datos avanzadas: Casos de uso reales

  1. 1. Casos de uso reales Estructuras de datos avanzadas
  2. 2. Ingeniero de Software en Creditas Nelson González Peñate nelsonglez1991@gmail.com
  3. 3. “...una estructura de datos es una colección de valores de datos, las relaciones entre ellos y las funciones u operaciones que se pueden aplicar a los datos.” Enciclopedia de Ciencias de la ComputaciónEstructura de datos
  4. 4. ¿Qué hace que una herramienta sea eficaz? ¿Qué nos puede ayudar a elegir la herramienta adecuada?
  5. 5. Índices en las bases de datos Un índice de base de datos es una estructura de datos que mejora la velocidad de las operaciones de recuperación de datos en una tabla a costa de escrituras y espacio de almacenamiento adicionales. CREATE INDEX index_name ON table_name (column_name) USING HASH; CREATE INDEX index_name ON table_name (column_name) USING BTREE;
  6. 6. Índices en las bases de datos Un índice de base de datos es una estructura de datos que mejora la velocidad de las operaciones de recuperación de datos en una tabla a costa de escrituras y espacio de almacenamiento adicionales para mantener la estructura del índice. Sistemas hash B-tree (y variantes) Las dos estructuras más utilizadas para organizar grandes bases de datos almacenadas en disco son:
  7. 7. Sistema hash tabla hash (llave, valor) función hash hash 0 1 2 … m - 1 slot resolución de colisiones lista<llave, valor> Inserción Borrado Búsqueda operaciones
  8. 8. Sistema hash No son buenos cuando ● Se permiten varios registros con la misma llave ● Se pretende buscar por rangos ● Se pretende buscar mínimos o máximos ● Se pretende recorrer en un orden
  9. 9. Sistema hash Son buenos cuando ● Se pretende responder ¿Qué registro, si lo hay, tiene llave K? Para estos casos, el hash debe ser la elección porque cuando se implementa correctamente lleva a cabo sus operaciones en tiempo constante.
  10. 10. B-Tree Sus variantes B+ -Tree y B*-Tree Los árboles B-Trees, o alguna de sus variantes, son la estructura de datos estándar para la organización de archivos en aplicaciones que requieren inserción, eliminación y búsquedas de rango de claves. El B-tree es una generalización del 2-3-Tree https://en.wikipedia.org/wiki/2-3_tree
  11. 11. B-Tree Características ● Las operaciones de actualización y búsqueda afectan solo a unos pocos bloques de disco ● Mantienen registros relacionados en el mismo bloque de disco ● Garantizan que todos los nodos del árbol estarán llenos al menos hasta un cierto porcentaje mínimo. Esto mejora la eficiencia del espacio
  12. 12. B-Tree Características ● Cada nodo representa un rango de elementos
  13. 13. B-Tree Propiedades de un B-Tree de orden m La raíz es una hoja o tiene al menos dos hijos. 24 24 49 24 4936 36 24 49 67 a) b) c) d)
  14. 14. B-Tree Propiedades de un B-Tree de orden m Todas las hojas están al mismo nivel en el árbol, por lo que el árbol siempre está equilibrado en altura. 24 24 49 24 4936 36 24 49 67 a) b) c) d)
  15. 15. B-Tree Búsqueda ● Realice una búsqueda binaria en los elementos del nodo actual. ○ Si se encuentra un elemento con la clave de búsqueda, devuelva ese registro. ○ Si el nodo actual es un nodo hoja y no se encuentra la clave, es una búsqueda fallida. ● De lo contrario, siga la rama adecuada y repita el proceso.
  16. 16. B-Tree Búsqueda Se examina la raíz en búsqueda del primer elemento mayor o igual a la clave Ejemplo de búsqueda de la clave 47 Al no encontrarse el elemento, la rama de la derecha es seleccionada En el hijo derecho no se encuentra el elemento y se selecciona la rama adecuada para descender Se analiza el nodo hoja correspondiente y se encuentra la clave
  17. 17. B-Tree Inserción ● Encontrar el nodo hoja que debe contener la clave a insertar ○ Si tiene espacio para insertar la clave, se inserta manteniendo el orden. ○ Si no tiene espacio se divide el nodo en dos y se promueve la clave del medio al padre, manteniendo el orden. Insertando el elemento en uno de los dos nodos resultantes. ■ Si el padre no tiene espacio, se divide también y se aplica la misma operación. 24 24 49 24 4936 36 24 49 67 a) b) c) d)
  18. 18. B-Tree Generalidades Generalmente el orden del B-Tree (m) es igual o mayor a 100 porque con cada nodo se intenta llenar un bloque de disco, intentando reducir las operaciones de lectura y escritura y a su vez la altura del árbol.
  19. 19. B+ -Tree La diferencia más significativa con el B-Tree es que el B+ -Tree solo almacena registros en los nodos hojas. Los nodos internos solo almacenan las claves y sirven únicamente para guiar la búsqueda. Los nodos hojas están enlazados entre sí para formar una lista doblemente enlazada.
  20. 20. B+ -Tree Búsqueda Es similar que en el B-Tree con la diferencia que siempre debe descender obligatoriamente hasta el nodo hoja correspondiente.
  21. 21. B+ -Tree Inserción Es similar que en el B-Tree con la diferencia que si se necesita dividir un nodo hoja en dos, lo que se promueve hacia el nodo padre es una copia y no se retira la clave de su lugar. Insertar registro con clave 30
  22. 22. B+ -Tree Observación Requiere que todos los nodos estén al menos medio llenos (excepto la raíz). Por tanto, la utilización del almacenamiento debe ser al menos del 50%.
  23. 23. Es similar al B+ -Tree, excepto por las reglas utilizadas para dividir y fusionar nodos. En lugar de dividir un nodo por la mitad cuando se llena, el B*-Tree le da algunos registros a su hermano vecino, si es posible. Si el hermano también está lleno, estos dos nodos se dividen en tres. B* -Tree
  24. 24. B-Trees Análisis El costo asintótico de búsqueda, inserción y eliminación de registros de B-Trees, B+ -Trees y B*-Trees es Θ (log n) donde n es el número total de registros en el árbol. Sin embargo, la base del logaritmo es el factor de ramificación (promedio) del árbol.
  25. 25. B-Tree Análisis En la práctica los B-trees y sus variantes son extremadamente poco profundos.
  26. 26. B-Tree Análisis Como ilustración consideremos un B+ -Tree de orden 100 y nodos hojas de hasta 100 registros. Cuando el árbol tenga altura: 1: puede tener hasta 100 registros 2: hasta 10 000 registros 3: hasta 1 000 000 de registros 4: hasta 100 000 000 de registros
  27. 27. Índices en las bases de datos Un índice de base de datos es una estructura de datos que mejora la velocidad de las operaciones de recuperación de datos en una tabla a costa de escrituras y espacio de almacenamiento adicionales para mantener la estructura del índice. CREATE INDEX index_name ON table_name (column_name) USING HASH; CREATE INDEX index_name ON table_name (column_name) USING BTREE;
  28. 28. Trie Un Trie nos permite buscar palabras que tienen un simple caracter diferente, un prefijo en común, un caracter faltante, etc. Pueden insertar y encontrar cadenas en tiempo O (L) (siendo L la longitud de la cadena). Esto es mucho más rápido que un set, pero es solo un poco más rápido que una tabla hash.
  29. 29. Trie Aplicaciones en ingeniería de software Los navegadores pueden auto completar tu texto o sugerir posibilidades de lo que puedes estar escribiendo. El corrector ortográfico puede buscar si cada palabra que escribes está en el diccionario.
  30. 30. Trie Aplicaciones en ingeniería de software También se pueden sugerir correcciones de palabras que están en el texto pero no en el diccionario. Se pueden sugerir palabras que comienzan con el texto que estás escribiendo.
  31. 31. Trie ¿Qué es? Es un árbol donde cada nodo representa una palabra o un prefijo. El nodo raíz representa una cadena vacía (“”). Cada nodo puede tener hasta tantos hijos como el tamaño del alfabeto que se quiere usar.
  32. 32. Trie ¿Qué es? Los nodos que son hijos directos de la raíz, representan prefijos de longitud 1, los que están a 2 aristas de distancia de la raíz son prefijos de longitud 2 y así sucesivamente.
  33. 33. Trie Ejemplo c p a s a c o u e b l o r t o a o oo s
  34. 34. Trie Funcionalidades que implementaremos ● Buscar si una palabra está en el diccionario ● Contar la cantidad de palabras que tienen un prefijo
  35. 35. Trie Métodos a implementar add_word: Agrega una palabra al diccionario. count_possible_words: Cuenta el número de palabras que tienen una cadena como prefijo. count_words: Cuenta el número de palabras que coincide exactamente con una palabra dada.
  36. 36. Trie Estructura de un nodo 1 class trie { 2 int prefixes; 3 int ending_words; 4 trie* nodes[ 27]; 5 6 public: 7 trie(){ 8 prefixes = 0; 9 ending_words = 0; 10 for(int i = 0; i < 27; i++){ 11 nodes[i] = NULL; 12 } 13 }
  37. 37. Trie Método para agregar una palabra 1 void add_word(string word) { 2 trie* current = this; 3 for(int i=0; i < word.size(); i++){ 4 int pos = word[i]-'a'; 5 if(current->nodes[pos] == NULL){ 6 current->nodes[pos] = new trie(); 7 } 8 current->prefixes++; 9 current = current->nodes[pos]; 10 } 11 current->ending_words++; 12 }
  38. 38. Trie Método para saber la cantidad de palabras que que son exactas a una palabra dada 1 int search_word(string word){ 2 trie* current = this; 3 for(int i=0; i < word.size(); i++){ 4 int pos = word[i]-'a'; 5 if(current->nodes[pos] == NULL){ 6 return 0; 7 } 8 current = current->nodes[pos]; 9 } 10 return current->ending_words; 11 }
  39. 39. Trie Método para saber la cantidad de palabras que se pueden sugerir dado un prefijo 1 int search_possible_words(string prefix){ 2 trie* current = this; 3 for(int i=0; i < prefix.size(); i++){ 4 int pos = prefix[i]-'a'; 5 if(current->nodes[pos] == NULL){ 6 return 0; 7 } 8 current = current->nodes[pos]; 9 } 10 return current->prefixes; 11 }
  40. 40. Trie Repositorio con el ejemplo anterior https://github.com/npenate/advanced- data-structures
  41. 41. Trie Jueces en línea Sphere Online Judge: https://www.spoj.com/problems/tag/trie-1 Un problema clásico donde se debe usar la estructura de datos Trie.
  42. 42. Suffix Tree Es un Trie comprimido que contiene todos los sufijos de un texto como sus claves y las posiciones en el texto como sus valores. Tiene aplicaciones en el campo de la Bioinformática buscando patrones de ADN o secuencias de proteínas. https://www.spoj.com/problems/NEXTLEX/ https://www.spoj.com/problems/LCS/https:// www.spoj.com/problems/DISUBSTR/
  43. 43. Casos de uso reales Estructuras de datos avanzadas

×