Casos de uso reales
Estructuras de
datos avanzadas
Ingeniero de Software en Creditas
Nelson González Peñate
nelsonglez1991@gmail.com
“...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
¿Qué hace que una herramienta sea eficaz?
¿Qué nos puede ayudar a elegir la herramienta adecuada?
Í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;
Í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:
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
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
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.
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
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
B-Tree
Características
● Cada nodo representa un rango de
elementos
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)
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)
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.
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
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)
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.
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.
B+
-Tree
Búsqueda
Es similar que en el B-Tree con la
diferencia que siempre debe
descender obligatoriamente hasta
el nodo hoja correspondiente.
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
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%.
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
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.
B-Tree
Análisis
En la práctica los B-trees y sus
variantes son extremadamente poco
profundos.
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
Í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;
Estructuras de datos avanzadas: Casos de uso reales
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.
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.
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.
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.
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.
Trie
Ejemplo
c p
a
s
a c
o
u
e
b
l
o
r
t
o
a
o
oo
s
Trie
Funcionalidades que
implementaremos
● Buscar si una palabra está en el
diccionario
● Contar la cantidad de palabras
que tienen un prefijo
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.
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 }
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 }
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 }
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 }
Trie
Repositorio con el ejemplo
anterior
https://github.com/npenate/advanced-
data-structures
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.
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/
Casos de uso reales
Estructuras de
datos avanzadas

Más contenido relacionado

PDF
Creación de tablas y relaciones en mysql workbench
PPTX
PROCEDIMIENTOS ALMACENADOS
PPTX
Cuadro comparativo algoritmos de ordenamiento
DOC
Lista simple
PPTX
Tablas Hash
PPTX
Tipos de atributos y tipos de relaciones
PPTX
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
PPTX
Pilas, colas, y listas estructura de datos
Creación de tablas y relaciones en mysql workbench
PROCEDIMIENTOS ALMACENADOS
Cuadro comparativo algoritmos de ordenamiento
Lista simple
Tablas Hash
Tipos de atributos y tipos de relaciones
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
Pilas, colas, y listas estructura de datos

La actualidad más candente (20)

PDF
Estructura de Datos: Lista
PPTX
3. algoritmos de ordenamiento interno
DOCX
Aplicaciòn de las estructuras de datos
PDF
Programación MySQL-Ejercicios
PDF
Colecciones en Python
DOCX
Listas como estructura de datos..
PPTX
Búsqueda secuencial y binaria
PPTX
Recursividad
PPTX
Front end y Back-end
PPTX
Ordenamientos burbuja e inserción
PPTX
Listas doblemente enlazadas
DOCX
Modelo entidad relacion(gestion de examenes)
PPT
Manejo de memoria
PPTX
4. algoritmo de ordenamiento externo
PPT
Listas enlazadas
PPTX
PPTX
2.1.5 Ordenación por Distribucion.pptx
PPSX
Explicacion archivo secuencial indexado
PPTX
Algebra relacional
Estructura de Datos: Lista
3. algoritmos de ordenamiento interno
Aplicaciòn de las estructuras de datos
Programación MySQL-Ejercicios
Colecciones en Python
Listas como estructura de datos..
Búsqueda secuencial y binaria
Recursividad
Front end y Back-end
Ordenamientos burbuja e inserción
Listas doblemente enlazadas
Modelo entidad relacion(gestion de examenes)
Manejo de memoria
4. algoritmo de ordenamiento externo
Listas enlazadas
2.1.5 Ordenación por Distribucion.pptx
Explicacion archivo secuencial indexado
Algebra relacional
Publicidad

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

PPT
Arbol b ASIRB
PPTX
Árbol de prefijos
PPTX
Arboles binarios
PPTX
Programación 3: árboles binarios y ordenados
PPTX
Presentación Árbol B
PPTX
Organización aleatoria o indirecta
PPTX
Organización aleatoria o indirecta1
PPTX
Organización aleatoria o indirecta1
PPT
Busqeda sec indexada
PPTX
Indices tipo arbol b+
PDF
Arboles binarios en una extructura de datos
PPTX
Arboles B y Arboles B+
PPT
Archivo Secuencial-Indexado
PPTX
Indexacion about sofware admin de arch.pptx
PPTX
Programacion 3. Arboles B+
PPT
Organizacin secuencialindexadaencadenada
PPT
Arboles Binarios
PPTX
PPTS FINAL DE ESTRUCTURA DE DATOS.pptx
PPTX
Arboles multicamino
PDF
Arboles binarios
Arbol b ASIRB
Árbol de prefijos
Arboles binarios
Programación 3: árboles binarios y ordenados
Presentación Árbol B
Organización aleatoria o indirecta
Organización aleatoria o indirecta1
Organización aleatoria o indirecta1
Busqeda sec indexada
Indices tipo arbol b+
Arboles binarios en una extructura de datos
Arboles B y Arboles B+
Archivo Secuencial-Indexado
Indexacion about sofware admin de arch.pptx
Programacion 3. Arboles B+
Organizacin secuencialindexadaencadenada
Arboles Binarios
PPTS FINAL DE ESTRUCTURA DE DATOS.pptx
Arboles multicamino
Arboles binarios
Publicidad

Más de Software Guru (20)

PDF
Hola Mundo del Internet de las Cosas
PPTX
Building bias-aware environments
PDF
El secreto para ser un desarrollador Senior
PDF
Cómo encontrar el trabajo remoto ideal
PDF
Automatizando ideas con Apache Airflow
PPTX
How thick data can improve big data analysis for business:
PDF
Introducción al machine learning
PDF
Democratizando el uso de CoDi
PDF
Gestionando la felicidad de los equipos con Management 3.0
PDF
Taller: Creación de Componentes Web re-usables con StencilJS
PPTX
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
PDF
¿Qué significa ser un programador en Bitso?
PDF
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
PDF
Pruebas de integración con Docker en Azure DevOps
PDF
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
PDF
Así publicamos las apps de Spotify sin stress
PPTX
Achieving Your Goals: 5 Tips to successfully achieve your goals
PDF
Acciones de comunidades tech en tiempos del Covid19
PDF
De lo operativo a lo estratégico: un modelo de management de diseño
PDF
La importancia de crear User Personas y Escenarios
Hola Mundo del Internet de las Cosas
Building bias-aware environments
El secreto para ser un desarrollador Senior
Cómo encontrar el trabajo remoto ideal
Automatizando ideas con Apache Airflow
How thick data can improve big data analysis for business:
Introducción al machine learning
Democratizando el uso de CoDi
Gestionando la felicidad de los equipos con Management 3.0
Taller: Creación de Componentes Web re-usables con StencilJS
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
¿Qué significa ser un programador en Bitso?
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Pruebas de integración con Docker en Azure DevOps
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Así publicamos las apps de Spotify sin stress
Achieving Your Goals: 5 Tips to successfully achieve your goals
Acciones de comunidades tech en tiempos del Covid19
De lo operativo a lo estratégico: un modelo de management de diseño
La importancia de crear User Personas y Escenarios

Último (20)

PPTX
en este libro encontrarás la lectura inicial para tus niños
PPTX
VariablesExpresiones.pptx conceptos que puedes usar en c++
PDF
EL RESPETO mejororado para aprender .pdf
PDF
004-CC2014-Irrigacion Mbb equinos del mundo
PDF
sol tecnología 2025.pdf........pdf10-7grado
PDF
Sesión 6 - Seguridad de almacenamiento.pdf
PDF
Más Allá de la Autenticación: Gestión Moderna de Identidad en el sector Finan...
PPTX
seguridad digital ,paloma bernabe alvarez.
PPTX
Desarrollo Seguro en un mundo multi-stack con Pruebas de Seguridad de Forma A...
PPTX
Del SIEM Tradicional al SOC del Futuro: La Evolución Inteligente
PDF
Conceptos básicos de programación PseInt laura.pdf
PDF
Gtd Infraestructura Digital de Misión Critica
DOCX
Planeaciónnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
PPTX
proceso de la comunicación entre computadoras 21111.pptx
PPTX
Gestión de la exposición, cómo anticiparse a los ciberataques
PPTX
1.Introducción a los sistemas de control.pptx
PPTX
Más Allá del SOC Tradicional: IA y Automatización para Cumplimiento y Respues...
PDF
¿Qué hace un Data Warehouse Engineer blog.victorsantiz.com.pdf
PDF
Estrategia de Apoyo Juan José Narvaéz 9-4
PPTX
Redes neuronales artificiales y como entrenarlas
en este libro encontrarás la lectura inicial para tus niños
VariablesExpresiones.pptx conceptos que puedes usar en c++
EL RESPETO mejororado para aprender .pdf
004-CC2014-Irrigacion Mbb equinos del mundo
sol tecnología 2025.pdf........pdf10-7grado
Sesión 6 - Seguridad de almacenamiento.pdf
Más Allá de la Autenticación: Gestión Moderna de Identidad en el sector Finan...
seguridad digital ,paloma bernabe alvarez.
Desarrollo Seguro en un mundo multi-stack con Pruebas de Seguridad de Forma A...
Del SIEM Tradicional al SOC del Futuro: La Evolución Inteligente
Conceptos básicos de programación PseInt laura.pdf
Gtd Infraestructura Digital de Misión Critica
Planeaciónnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
proceso de la comunicación entre computadoras 21111.pptx
Gestión de la exposición, cómo anticiparse a los ciberataques
1.Introducción a los sistemas de control.pptx
Más Allá del SOC Tradicional: IA y Automatización para Cumplimiento y Respues...
¿Qué hace un Data Warehouse Engineer blog.victorsantiz.com.pdf
Estrategia de Apoyo Juan José Narvaéz 9-4
Redes neuronales artificiales y como entrenarlas

Estructuras de datos avanzadas: Casos de uso reales

  • 1. Casos de uso reales Estructuras de datos avanzadas
  • 2. Ingeniero de Software en Creditas Nelson González Peñate [email protected]
  • 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. ¿Qué hace que una herramienta sea eficaz? ¿Qué nos puede ayudar a elegir la herramienta adecuada?
  • 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. Í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. 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. 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. 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. 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. 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. B-Tree Características ● Cada nodo representa un rango de elementos
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. B-Tree Análisis En la práctica los B-trees y sus variantes son extremadamente poco profundos.
  • 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. Í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;
  • 29. 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.
  • 30. 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.
  • 31. 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.
  • 32. 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.
  • 33. 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.
  • 35. Trie Funcionalidades que implementaremos ● Buscar si una palabra está en el diccionario ● Contar la cantidad de palabras que tienen un prefijo
  • 36. 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.
  • 37. 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 }
  • 38. 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 }
  • 39. 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 }
  • 40. 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 }
  • 41. Trie Repositorio con el ejemplo anterior https://github.com/npenate/advanced- data-structures
  • 42. 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.
  • 43. 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/
  • 44. Casos de uso reales Estructuras de datos avanzadas