La utilización de estructuras de datos adecuadas para cada problema hace que se simplifiquen en gran medida los tiempos de respuestas y la cantidad de cómputo realizada.
Por Nelson González
Esta presentación le pertenece a Tania Landivar.
Las estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución, para evitar esto se hace uso de las listas enlazadas.
Una lista enlazada es una colección o secuencia de elementos llamados nodos, dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.
Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Estructura de Datos
Unidad V: Métodos de Ordenamiento
Retícula ISIC-2010-224: Programa: AED-1026/2016
Esta presentación le pertenece a Tania Landivar.
Las estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución, para evitar esto se hace uso de las listas enlazadas.
Una lista enlazada es una colección o secuencia de elementos llamados nodos, dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.
Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Estructura de Datos
Unidad V: Métodos de Ordenamiento
Retícula ISIC-2010-224: Programa: AED-1026/2016
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Búsqueda por método secuencial
• Búsqueda por método binario
• Búsqueda por método hashing
Creado por Ing. Alvaro Enrique Ruano
Esta presentación es parte del contenido del curso de Estructuras de Datos I impartido en la Universidad Rafael Landívar durante el año 2017.
Creado por Ing. Alvaro Enrique Ruano
Objetivo: Implementar estructuras de datos no lineales mediante objetos a través del uso de árboles binarios para el almacenamiento de los datos en la memoria principal de los programas.
Algoritmos de Ordenamiento Externo.
Programacin 3. Universidad de Cuenca.
Abad F.,Munoz C.,Fajardo P.
Marco Teorico: Ordenamiento Directo, Polifase, Natural, Balanceada.
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Búsqueda por método secuencial
• Búsqueda por método binario
• Búsqueda por método hashing
Creado por Ing. Alvaro Enrique Ruano
Esta presentación es parte del contenido del curso de Estructuras de Datos I impartido en la Universidad Rafael Landívar durante el año 2017.
Creado por Ing. Alvaro Enrique Ruano
Objetivo: Implementar estructuras de datos no lineales mediante objetos a través del uso de árboles binarios para el almacenamiento de los datos en la memoria principal de los programas.
Algoritmos de Ordenamiento Externo.
Programacin 3. Universidad de Cuenca.
Abad F.,Munoz C.,Fajardo P.
Marco Teorico: Ordenamiento Directo, Polifase, Natural, Balanceada.
Onboarding new members into an engineering team is not easy on anyone. In a short period of time, the new team member is required to be able to bring professional
Por Victoriya Kalmanovich
El secreto para ser un desarrollador SeniorSoftware Guru
En esta charla platicaremos sobre el “secreto” y el camino para llegar a ser un desarrollador Senior, experiencia, consejos y recomendaciones que en estos 8 años
Por René Sandoval
Apache Airflow es una plataforma en la que podemos crear flujos de datos de manera programática, planificarlos y monitorear de manera centralizada.
Por Yesi Díaz
How thick data can improve big data analysis for business:Software Guru
En esta presentación hablaré sobre cómo el Análisis de Datos Gruesos, específicamente el análisis antropológico y semiótico, puede ayudar a mejorar los resultados del Big Data
Por Martin Cuitzeo
CoDi® es la nueva forma de realizar pagos digitales desarrollada por el Banco de México. Por medio de CoDi puedes realizar cobros y pagos desde tu celular, utilizando una cuenta bancaria o de alguna institución financiera, sin comisiones.
Por Cristian Jaramillo
Gestionando la felicidad de los equipos con Management 3.0Software Guru
En las metodologías agiles hablamos de equipos colaborativos, autogestionados y felices. hablamos de lideres serviciales. El management 3.0 nos ayuda a cultivar el mindset correcto, aquel que servirá como el terreno fértil para que la agilidad florezca.
Por Andrea Vélez Cárdenas
Taller: Creación de Componentes Web re-usables con StencilJSSoftware Guru
Hoy por hoy las experiences de usuario pueden ser enriquecidas mediante el uso de Web Components, que son un estándar de la W3C soportado por la mayoría de los navegadores web modernos.
Por Alex Arriaga
Así publicamos las apps de Spotify sin stressSoftware Guru
En Spotify tenemos 1600+ ingenieros, trabajando en 280+ squads. Aún a esta escala, hemos logrado adoptar prácticas que nos han permitido acelerar la forma en que desarrollamos nuestro producto. Presentado por Erick Camacho en SG Virtual Conference 2020
Achieving Your Goals: 5 Tips to successfully achieve your goalsSoftware Guru
he measure of the executive, Peter F. Drucker reminds us, is the ability to "get the right things done." This involves having clarity on what are the right things as well as avoiding what is unproductive. Intelligence, creativity, and knowledge may all be wasted if not put to work on the things that matter.
Presentado por Cristina Nistor en SG Virtual Conference 2020
Acciones de comunidades tech en tiempos del Covid19Software Guru
Acciones de Comunidades Tech en tiempo del COVID-19 es una platica para informar acerca de las acciones que están realizando algunas comunidades de tecnología en México para luchar contra la propagación del COVID-19. Desde análisis de datos, visualizaciones, simulaciones de contagio, etc.
Presentado por Juana Martínez, Adriana Vallejo y Eduardo Ramírez en SG Virtual Conference 2020
De lo operativo a lo estratégico: un modelo de management de diseñoSoftware Guru
La charla presenta un modelo claro, generado por la ponente, para atender los niveles desde lo operativo a lo estratégico.
Presentado por Gabriela Salinas en SG Virtual Conference
La importancia de crear User Personas y EscenariosSoftware Guru
Hoy en día todas los usuarios con acceso a internet podrían ser nuestros clientes; sin embargo, al diseñar centrado en el usuario podemos dar productos que sean útiles y agreguen verdadero valor a nuestros usuarios.
Presentado por Elena Itchel en SG Virtual Conference
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Telefónica
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0xWord escrito por Ibón Reinoso ( https://mypublicinbox.com/IBhone ) con Prólogo de Chema Alonso ( https://mypublicinbox.com/ChemaAlonso ). Puedes comprarlo aquí: https://0xword.com/es/libros/233-big-data-tecnologias-para-arquitecturas-data-centric.html
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informáticavazquezgarciajesusma
En este proyecto de investigación nos adentraremos en el fascinante mundo de la intersección entre el arte y los medios de comunicación en el campo de la informática.
La rápida evolución de la tecnología ha llevado a una fusión cada vez más estrecha entre el arte y los medios digitales, generando nuevas formas de expresión y comunicación.
Continuando con el desarrollo de nuestro proyecto haremos uso del método inductivo porque organizamos nuestra investigación a la particular a lo general. El diseño metodológico del trabajo es no experimental y transversal ya que no existe manipulación deliberada de las variables ni de la situación, si no que se observa los fundamental y como se dan en su contestó natural para después analizarlos.
El diseño es transversal porque los datos se recolectan en un solo momento y su propósito es describir variables y analizar su interrelación, solo se desea saber la incidencia y el valor de uno o más variables, el diseño será descriptivo porque se requiere establecer relación entre dos o más de estás.
Mediante una encuesta recopilamos la información de este proyecto los alumnos tengan conocimiento de la evolución del arte y los medios de comunicación en la información y su importancia para la institución.
3Redu: Responsabilidad, Resiliencia y Respetocdraco
¡Hola! Somos 3Redu, conformados por Juan Camilo y Cristian. Entendemos las dificultades que enfrentan muchos estudiantes al tratar de comprender conceptos matemáticos. Nuestro objetivo es brindar una solución inclusiva y accesible para todos.
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
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.
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.
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