SlideShare una empresa de Scribd logo
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;
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

La actualidad más candente

índices en bases de datos
índices en bases de datosíndices en bases de datos
índices en bases de datosjosecuartas
 
Estructuras no-lineales
Estructuras no-linealesEstructuras no-lineales
Estructuras no-lineales
karlalopezbello
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda HashBlanca Parra
 
Programación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenados
Angel Vázquez Patiño
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
José Antonio Sandoval Acosta
 
Búsqueda secuencial y binaria
Búsqueda secuencial y binariaBúsqueda secuencial y binaria
Búsqueda secuencial y binaria
Alvaro Enrique Ruano
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de Datos
Vannesa Salazar
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
Alvaro Enrique Ruano
 
Listas doblemente enlazadas
Listas doblemente enlazadasListas doblemente enlazadas
Listas doblemente enlazadas
DĴäîřo Lêmä
 
ED Unidad 3: Estructuras de datos lineales (listas)
ED Unidad 3: Estructuras de datos lineales (listas) ED Unidad 3: Estructuras de datos lineales (listas)
ED Unidad 3: Estructuras de datos lineales (listas)
Franklin Parrales Bravo
 
Listas Simples Enlazadas
Listas Simples EnlazadasListas Simples Enlazadas
Listas Simples Enlazadas
Mago Julio Cesar
 
ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)
Franklin Parrales Bravo
 
Colas estáticas. IESIT
Colas estáticas. IESITColas estáticas. IESIT
Colas estáticas. IESIT
Blanca Elia Jiménez Guzmán
 
Cuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCristopher Morales Ruiz
 
Algoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externoAlgoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externo
Universidad de Cuenca
 
Metodos Busqueda Interna
Metodos Busqueda InternaMetodos Busqueda Interna
Metodos Busqueda Internasawmuk
 

La actualidad más candente (20)

índices en bases de datos
índices en bases de datosíndices en bases de datos
índices en bases de datos
 
Estructuras no-lineales
Estructuras no-linealesEstructuras no-lineales
Estructuras no-lineales
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda Hash
 
Programación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenados
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Búsqueda secuencial y binaria
Búsqueda secuencial y binariaBúsqueda secuencial y binaria
Búsqueda secuencial y binaria
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de Datos
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
Listas doblemente enlazadas
Listas doblemente enlazadasListas doblemente enlazadas
Listas doblemente enlazadas
 
ED Unidad 3: Estructuras de datos lineales (listas)
ED Unidad 3: Estructuras de datos lineales (listas) ED Unidad 3: Estructuras de datos lineales (listas)
ED Unidad 3: Estructuras de datos lineales (listas)
 
ARBOLES BINARIOS
ARBOLES BINARIOSARBOLES BINARIOS
ARBOLES BINARIOS
 
Listas Simples Enlazadas
Listas Simples EnlazadasListas Simples Enlazadas
Listas Simples Enlazadas
 
ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)
 
Arbol B
Arbol BArbol B
Arbol B
 
Colas estáticas. IESIT
Colas estáticas. IESITColas estáticas. IESIT
Colas estáticas. IESIT
 
Cuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busqueda
 
Unidad IV
Unidad IVUnidad IV
Unidad IV
 
Presentacion pilas lista y colas
Presentacion pilas lista y colas  Presentacion pilas lista y colas
Presentacion pilas lista y colas
 
Algoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externoAlgoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externo
 
Metodos Busqueda Interna
Metodos Busqueda InternaMetodos Busqueda Interna
Metodos Busqueda Interna
 

Similar a Estructuras de datos avanzadas: Casos de uso reales

Diapositivas base de datos
Diapositivas base de datosDiapositivas base de datos
Diapositivas base de datoscatherine4ad
 
Clase06 25-06-12
Clase06 25-06-12Clase06 25-06-12
Clase06 25-06-12Free TIC
 
En los recursos de la semana se pueden leer las reglas para planificar una ba...
En los recursos de la semana se pueden leer las reglas para planificar una ba...En los recursos de la semana se pueden leer las reglas para planificar una ba...
En los recursos de la semana se pueden leer las reglas para planificar una ba...Monytha Roman
 
Jose osorio
Jose osorioJose osorio
4 4 Bases De Datos
4 4 Bases De Datos4 4 Bases De Datos
4 4 Bases De DatosUVM
 
Campos daniel presentacion de base de datos
Campos daniel presentacion de base de datosCampos daniel presentacion de base de datos
Campos daniel presentacion de base de datos
Daniel Campos
 
Bases de datos de informatica
Bases de datos de informaticaBases de datos de informatica
Bases de datos de informatica
Jhovany Rivas Mendez
 
Diseño de Archivos y Base de Datos
Diseño de Archivos y Base de DatosDiseño de Archivos y Base de Datos
Diseño de Archivos y Base de Datos
GuadalupeOsorio9
 
Base de datos
Base de datosBase de datos
Base de datos
Brahian Correa
 
Base de datos
Base de datosBase de datos
Base de datos
danicerv
 
Access
AccessAccess
Presentación Estructuras de Datos Y Estructuras de Almacenamiento.pptx
Presentación Estructuras de Datos Y Estructuras de Almacenamiento.pptxPresentación Estructuras de Datos Y Estructuras de Almacenamiento.pptx
Presentación Estructuras de Datos Y Estructuras de Almacenamiento.pptx
CarlosEspaa16
 
Base de datos (.net)
Base de datos (.net)Base de datos (.net)
Base de datos (.net)7891089671
 
Clases BASE DE DATOS 2022.pptx
Clases BASE DE DATOS  2022.pptxClases BASE DE DATOS  2022.pptx
Clases BASE DE DATOS 2022.pptx
MegaComputer2
 
documento
documentodocumento
documento
Juan Sebastian
 
documento
documentodocumento
n
nn
Tarea tatiana
Tarea tatianaTarea tatiana
Tarea tatiananrj11
 

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

Diapositivas base de datos
Diapositivas base de datosDiapositivas base de datos
Diapositivas base de datos
 
Clase06 25-06-12
Clase06 25-06-12Clase06 25-06-12
Clase06 25-06-12
 
En los recursos de la semana se pueden leer las reglas para planificar una ba...
En los recursos de la semana se pueden leer las reglas para planificar una ba...En los recursos de la semana se pueden leer las reglas para planificar una ba...
En los recursos de la semana se pueden leer las reglas para planificar una ba...
 
Jose osorio
Jose osorioJose osorio
Jose osorio
 
4 4 Bases De Datos
4 4 Bases De Datos4 4 Bases De Datos
4 4 Bases De Datos
 
Concepto de base de datos
Concepto de base de datosConcepto de base de datos
Concepto de base de datos
 
Concepto de base de datos
Concepto de base de datosConcepto de base de datos
Concepto de base de datos
 
Campos daniel presentacion de base de datos
Campos daniel presentacion de base de datosCampos daniel presentacion de base de datos
Campos daniel presentacion de base de datos
 
Bases de datos de informatica
Bases de datos de informaticaBases de datos de informatica
Bases de datos de informatica
 
Diseño de Archivos y Base de Datos
Diseño de Archivos y Base de DatosDiseño de Archivos y Base de Datos
Diseño de Archivos y Base de Datos
 
Base de datos
Base de datosBase de datos
Base de datos
 
Base de datos
Base de datosBase de datos
Base de datos
 
Access
AccessAccess
Access
 
Presentación Estructuras de Datos Y Estructuras de Almacenamiento.pptx
Presentación Estructuras de Datos Y Estructuras de Almacenamiento.pptxPresentación Estructuras de Datos Y Estructuras de Almacenamiento.pptx
Presentación Estructuras de Datos Y Estructuras de Almacenamiento.pptx
 
Base de datos (.net)
Base de datos (.net)Base de datos (.net)
Base de datos (.net)
 
Clases BASE DE DATOS 2022.pptx
Clases BASE DE DATOS  2022.pptxClases BASE DE DATOS  2022.pptx
Clases BASE DE DATOS 2022.pptx
 
documento
documentodocumento
documento
 
documento
documentodocumento
documento
 
n
nn
n
 
Tarea tatiana
Tarea tatianaTarea tatiana
Tarea tatiana
 

Más de Software Guru

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

Más de Software Guru (20)

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

Último

Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
44652726
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
DiegoCampos433849
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
cdraco
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
Luis Enrique Zafra Haro
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 

Último (20)

Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 

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 nelsonglez1991@gmail.com
  • 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;
  • 28.
  • 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