SlideShare una empresa de Scribd logo
1 de 116
Descargar para leer sin conexión
Algoritmos y Estructuras de Datos
Cursada 2021
Cursada 2021
Prof. Alejandra Schiavoni (ales@info.unlp.edu.ar)
Prof. Catalina Mostaccio (catty@lifia.info.unlp.edu.ar)
Prof. Catalina Mostaccio (catty@lifia.info.unlp.edu.ar)
Prof. Laura Fava (lfava@info.unlp.edu.ar)
Prof. Laura Fava (lfava@info.unlp.edu.ar)
Prof. Pablo Iuliano (piuliano@info.unlp.edu.ar)
Repaso de Recursión
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Repaso de Recursión
 Se dice que un objeto es recursivo cuando forma
parte de sí mismo, es decir puede definirse en
parte de sí mismo, es decir puede definirse en
términos de sí mismo.
 En programación, la recursividad es la propiedad
que tienen los Algoritmos de llamarse a sí
que tienen los Algoritmos de llamarse a sí
mismos para resolver un problema.
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Repaso de Recursión
 Ejemplos de definiciones recursivas:
• Factorial de un número
• Factorial de un número
0! = 1
Si n > 0, n! = n * (n-1)!
• Potencia de un número
x0 = 1
x = 1
Si y > 0, xy = x * xy-1
• Estructuras de datos
• Estructuras de datos
Árboles
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Repaso de Recursión
 Ejemplos de soluciones recursivas:
• Buscar un elemento en un arreglo
• Ordenar un arreglo de elementos
• Recorrer un árbol
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Repaso de Recursión
 Soluciones recursivas:
• División sucesiva del problema original en problemas más
pequeños del mismo tipo
• Se van resolviendo estos problemas más sencillos
• Con las soluciones de éstos se construyen las soluciones
de los problemas más complejos
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
 Ejemplo:
Repaso de Recursión
 Ejemplo:
Programar un algoritmo recursivo que permita invertir un número
int invertir (int n)
{
{
if (n < 10) //caso base
System.out.print(n);
System.out.print(n);
else
System.out.print(n mod 10); // el resto de la división entera
invertir (n div 10);
}
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
int invertir (int n)
 Ejecución:
int invertir (int n)
{
if (n < 10) //caso base
System.out.print(n);
Entrada: 123
System.out.print(n);
else
System.out.print(n mod 10); // el resto de la
división entera
invertir (n div 10);
invertir (n div 10);
}
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Salida:
Repaso de Recursión
int invertir (int n)
 Ejecución:
int invertir (int n)
{
if (n < 10) //caso base
System.out.print(n);
Entrada: 123
System.out.print(n);
else
System.out.print(n mod 10); // el resto de la
división entera
invertir (n div 10);
invertir (n div 10);
}
invertir (123)
n = 123
n = 123
print (3)
invertir (12)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Salida: 3
Repaso de Recursión
int invertir (int n)
 Ejecución:
int invertir (int n)
{
if (n < 10) //caso base
System.out.print(n);
Entrada: 123
System.out.print(n);
else
System.out.print(n mod 10); // el resto de la
división entera
invertir (n div 10);
invertir (12)
invertir (n div 10);
}
invertir (12)
n = 12
print (2)
invertir (1)
invertir (123)
n = 123
invertir (123)
n = 123
invertir (1)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Salida: 3 2
Repaso de Recursión
int invertir (int n)
 Ejecución:
int invertir (int n)
{
if (n < 10) //caso base
System.out.print(n);
invertir (1)
n = 1
print (1)
Entrada: 123
System.out.print(n);
else
System.out.print(n mod 10); // el resto de la
división entera
invertir (n div 10);
invertir (12) invertir (12)
print (1) invertir (n div 10);
}
invertir (12)
n = 12
print (2)
invertir (1)
invertir (12)
n = 12
print (2)
invertir (1)
invertir (123)
n = 123
invertir (123)
n = 123
invertir (1) invertir (1)
invertir (123)
n = 123
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Salida: 3 2 1
Repaso de Recursión
int invertir (int n)
 Ejecución:
int invertir (int n)
{
if (n < 10) //caso base
System.out.print(n);
invertir (1)
n = 1
print (1)
Entrada: 123
System.out.print(n);
else
System.out.print(n mod 10); // el resto de la
división entera
invertir (n div 10);
invertir (12) invertir (12)
print (1) invertir (n div 10);
}
invertir (12)
n = 12
print (2)
invertir (1)
invertir (12)
n = 12
print (2)
invertir (1)
invertir (123)
n = 123
invertir (123)
n = 123
invertir (1) invertir (1)
invertir (123)
n = 123
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Salida: 3 2 1
Repaso de Recursión
int invertir (int n)
 Ejecución:
int invertir (int n)
{
if (n < 10) //caso base
System.out.print(n);
invertir (1)
n = 1
print (1)
Entrada: 123
System.out.print(n);
else
System.out.print(n mod 10); // el resto de la
división entera
invertir (n div 10);
invertir (12) invertir (12)
print (1)
invertir (12)
invertir (n div 10);
}
invertir (12)
n = 12
print (2)
invertir (1)
invertir (12)
n = 12
print (2)
invertir (1)
invertir (12)
n = 12
print (2)
invertir (1)
invertir (123)
n = 123
invertir (123)
n = 123
invertir (1) invertir (1)
invertir (123)
n = 123
invertir (1)
invertir (123)
n = 123
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Salida: 3 2 1
Repaso de Recursión
int invertir (int n)
 Ejecución:
int invertir (int n)
{
if (n < 10) //caso base
System.out.print(n);
invertir (1)
n = 1
print (1)
Entrada: 123
System.out.print(n);
else
System.out.print(n mod 10); // el resto de la
división entera
invertir (n div 10);
invertir (12) invertir (12)
print (1)
invertir (12)
invertir (n div 10);
}
invertir (12)
n = 12
print (2)
invertir (1)
invertir (12)
n = 12
print (2)
invertir (1)
invertir (12)
n = 12
print (2)
invertir (1)
invertir (123)
n = 123
invertir (123)
n = 123
invertir (1) invertir (1)
invertir (123)
n = 123
invertir (1)
invertir (123)
n = 123
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Salida: 3 2 1
Repaso de Recursión
int invertir (int n)
 Ejecución:
int invertir (int n)
{
if (n < 10) //caso base
System.out.print(n);
invertir (1)
n = 1
print (1)
Entrada: 123
System.out.print(n);
else
System.out.print(n mod 10); // el resto de la
división entera
invertir (n div 10);
invertir (12) invertir (12)
print (1)
invertir (12)
invertir (n div 10);
}
invertir (12)
n = 12
print (2)
invertir (1)
invertir (12)
n = 12
print (2)
invertir (1)
invertir (12)
n = 12
print (2)
invertir (1)
invertir (123)
n = 123
invertir (123)
n = 123
invertir (1) invertir (1)
invertir (123)
n = 123
invertir (1)
invertir (123)
n = 123
invertir (123)
n = 123
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Salida: 3 2 1
Repaso de Recursión
int invertir (int n)
 Ejecución:
int invertir (int n)
{
if (n < 10) //caso base
System.out.print(n);
invertir (1)
n = 1
print (1)
Entrada: 123
System.out.print(n);
else
System.out.print(n mod 10); // el resto de la
división entera
invertir (n div 10);
invertir (12) invertir (12)
print (1)
invertir (12)
invertir (n div 10);
}
invertir (12)
n = 12
print (2)
invertir (1)
invertir (12)
n = 12
print (2)
invertir (1)
invertir (12)
n = 12
print (2)
invertir (1)
invertir (123)
n = 123
invertir (123)
n = 123
invertir (1) invertir (1)
invertir (123)
n = 123
invertir (1)
invertir (123)
n = 123
invertir (123)
n = 123
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
n = 123
print (3)
invertir (12)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Salida: 3 2 1
Repaso de Recursión
 Ejemplo 2: Algoritmo de ordenación MergeSort
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya
ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma
ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma
estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo
devuelve (el sub-vector está ordenado).
Características recursivas del algoritmo
 Se resuelven 2 sub-problemas más pequeños
 Se resuelven 2 sub-problemas más pequeños
 Se combinan los resultados de cada solución
 Se cuenta con un caso base.
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
 Ejemplo 2: Algoritmo de ordenación MergeSort
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya
ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma
estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo
devuelve (el sub-vector está ordenado).
devuelve (el sub-vector está ordenado).
Gráficamente:
Ordenar vector
Ordenar sub-vector Ordenar sub-vector
Ordenar sub-vector
izquierdo
Ordenar sub-vector
derecho
sub-vector derecho
sub-vector izquierdo sub-vector derecho
ordenado
sub-vector izquierdo
ordenado
Merge de los 2 sub-
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Merge de los 2 sub-
vectores ordenados
Repaso de Recursión
 Ejemplo 2: Algoritmo de ordenación MergeSort
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya
ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma
estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo
devuelve (el sub-vector está ordenado).
devuelve (el sub-vector está ordenado).
Gráficamente:
Ordenar vector
Ordenar sub-vector Ordenar sub-vector
Dividir en 1 o varios sub-
problemas
Problema
Ordenar sub-vector
izquierdo
Ordenar sub-vector
derecho
sub-vector derecho
sub-vector izquierdo sub-vector derecho
ordenado
sub-vector izquierdo
ordenado
Merge de los 2 sub-
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Merge de los 2 sub-
vectores ordenados
Repaso de Recursión
 Ejemplo 2: Algoritmo de ordenación MergeSort
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya
ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma
estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo
devuelve (el sub-vector está ordenado).
devuelve (el sub-vector está ordenado).
Gráficamente:
Ordenar vector
Ordenar sub-vector Ordenar sub-vector
Dividir en 1 o varios sub-
problemas
Problema
Ordenar sub-vector
izquierdo
Ordenar sub-vector
derecho
sub-vector derecho
sub-vector izquierdo
Resolver los sub-
problemas
sub-vector derecho
ordenado
sub-vector izquierdo
ordenado
Merge de los 2 sub-
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Merge de los 2 sub-
vectores ordenados
Repaso de Recursión
 Ejemplo 2: Algoritmo de ordenación MergeSort
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya
ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma
estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo
devuelve (el sub-vector está ordenado).
devuelve (el sub-vector está ordenado).
Gráficamente:
Ordenar vector
Ordenar sub-vector Ordenar sub-vector
Dividir en 1 o varios sub-
problemas
Problema
Ordenar sub-vector
izquierdo
Ordenar sub-vector
derecho
sub-vector derecho
sub-vector izquierdo
Resolver los sub-
problemas
sub-vector derecho
ordenado
sub-vector izquierdo
ordenado
Merge de los 2 sub-
Combinar las soluciones
de los sub-problemas
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Merge de los 2 sub-
vectores ordenados
de los sub-problemas
Repaso de Recursión
 Ejemplo 2: Algoritmo de ordenación MergeSort
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub-
vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya
ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma
estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo
devuelve (el sub-vector está ordenado).
devuelve (el sub-vector está ordenado).
Gráficamente:
Ordenar vector
Ordenar sub-vector Ordenar sub-vector
Dividir en 1 o varios sub-
problemas
Problema
Ordenar sub-vector
izquierdo
Ordenar sub-vector
derecho
sub-vector derecho
sub-vector izquierdo
Resolver los sub-
problemas
sub-vector derecho
ordenado
sub-vector izquierdo
ordenado
Merge de los 2 sub-
Combinar las soluciones
de los sub-problemas
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Merge de los 2 sub-
vectores ordenados
Problema resuelto
de los sub-problemas
Repaso de Recursión
Ejemplo 2: Estrategia
Ordenar un arreglo con n elementos
mergesort(a, 0, 6)
Ordenar la 1er mitad del arreglo
n/2 elementos
Ordenar la 2da mitad del arreglo
n/2 elementos
mergesort (a, 0, 3)
mergesort (a, 4, 6)
Mezclar ambas mitades ya ordenadas
En cada paso
intermedio se
aplica la misma
estrategia
merge (a, 0, 3,6)
estrategia
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2:
public static void mergesort (int a[],int izq, int der) {
Ejemplo 2:
(a) if ( izq<der ) {
(b) int m = (izq+der)/2;
(c) mergesort (a,izq, m);
(d) mergesort (a,m+1, der);
(d) mergesort (a,m+1, der);
(e) merge (a, izq, m, der);
}
}
}
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2 (cont.) :
public static void merge ( int a[], int izq, int m, int der) {
int i, j, k;
int [] b = new int [a.length]; //array auxiliar
int [] b = new int [a.length]; //array auxiliar
for ( i=izq; i<=der; i++ ) { //copia ambas mitades en el array auxiliar
b[i]=a[i]; }
i=izq; j=m+1; k=izq;
i=izq; j=m+1; k=izq;
while (i<=m && j<=der) { //copia el siguiente elemento más grande
if (b[i]<=b[j])
a[k++]=b[i++];
a[k++]=b[i++];
else
a[k++]=b[j++];
}
}
while (i<=m) //copia los elementos que quedan de la
a[k++]=b[i++]; //primera mitad (si los hay)
}
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
}
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3) mergesort(a, 4, 6)
Ejemplo 2: Ejecución
mergesort(a, 0, 3) mergesort(a, 4, 6)
mergesort(a, 0, 1)
mergesort(a, 2, 3)
mergesort(a, 4, 5)
mergesort(a, 6, 6)
……..
……..
……..
mergesort(a, 0, 0) ……..
……..
……..
merge(a, 0, 0, 1)
merge(a, 2, 2, 3)
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
……..
merge(a, 2, 2, 3) merge(a, 6, 6, 6)
……..
……..
……..
……..
……..
……..
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
Ejemplo 2: Ejecución
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 0, 3)
……..
……..
……..
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
merge(a, 6, 6, 6)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 0, 3)
mergesort(a, 0, 1)
……..
……..
……..
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
merge(a, 6, 6, 6)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 0, 3)
mergesort(a, 0, 1)
mergesort(a, 0, 0) ……..
……..
……..
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
merge(a, 6, 6, 6)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 0, 3)
mergesort(a, 0, 1)
……..
……..
……..
mergesort(a, 1, 1)
mergesort(a, 0, 0)
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
merge(a, 6, 6, 6)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 0, 3)
mergesort(a, 0, 1)
merge(a, 0, 0, 1)
mergesort(a, 0, 0) ……..
……..
……..
mergesort(a, 1, 1)
merge(a, 0, 0, 1)
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
Fin de la llamada recursiva
merge(a, 6, 6, 6)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 0, 3)
mergesort(a, 0, 1)
……..
……..
……..
0 8
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
merge(a, 6, 6, 6)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 0, 3)
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 0, 1) mergesort(a, 2, 3)
……..
……..
……..
0 8
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
merge(a, 6, 6, 6)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 0, 3)
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 2, 3)
mergesort(a, 0, 1)
……..
……..
……..
0 8
mergesort(a, 2, 2)
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
merge(a, 6, 6, 6)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 0, 3)
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 2, 3)
mergesort(a, 0, 1)
……..
……..
……..
mergesort(a, 2, 2)
mergesort(a, 3, 3)
0 8
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
mergesort(a, 3, 3)
merge(a, 6, 6, 6)
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 0, 3)
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 2, 3)
mergesort(a, 0, 1)
……..
……..
……..
mergesort(a, 2, 2)
mergesort(a, 3, 3)
0 8
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
mergesort(a, 3, 3)
merge(a, 2, 2, 3)
merge(a, 6, 6, 6)
Fin de la llamada recursiva
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 0, 3)
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 2, 3)
mergesort(a, 0, 1)
……..
……..
……..
0 8 -1 3
merge(a, 0, 1, 3)
merge(a, 4, 4, 5)
merge(a, 6, 6, 6)
……..
merge(a, 0, 1, 3)
merge(a, 6, 6, 6)
Fin de la llamada recursiva
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 4, 6)
mergesort(a, 0, 3) mergesort(a, 4, 6)
mergesort(a, 4, 5)
mergesort(a, 4, 5)
mergesort(a, 4, 5)
mergesort(a, 4, 4)
mergesort(a, 5, 5)
merge(a, 4, 4, 5)
Fin de la llamada recursiva
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 4, 6)
mergesort(a, 0, 3) mergesort(a, 4, 6)
mergesort(a, 6, 6)
mergesort(a, 4, 5)
mergesort(a, 4, 5)
mergesort(a, 6, 6)
mergesort(a, 4, 5)
merge(a, 4, 5, 6)
Fin de la llamada recursiva
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Repaso de Recursión
Ejemplo 2: Ejecución
mergesort(a, 0, 6)
mergesort(a, 0, 3)
Ejemplo 2: Ejecución
mergesort(a, 4, 6)
mergesort(a, 0, 3) mergesort(a, 4, 6)
merge(a, 0, 3, 6)
Fin de la llamada recursiva
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Fin de la llamada recursiva
Algoritmos y Estructuras de Datos
Cursada 2021
Cursada 2021
Prof. Alejandra Schiavoni (ales@info.unlp.edu.ar)
Prof. Catalina Mostaccio (catty@lifia.info.unlp.edu.ar)
Prof. Catalina Mostaccio (catty@lifia.info.unlp.edu.ar)
Prof. Laura Fava (lfava@info.unlp.edu.ar)
Prof. Laura Fava (lfava@info.unlp.edu.ar)
Prof. Pablo Iuliano (piuliano@info.unlp.edu.ar)
Agenda
 Temas de la materia
 Temas de la materia
 Objetivos de la materia
 Objetivos de la materia
 Introducción al Análisis de Algoritmos
 Introducción al Análisis de Algoritmos
 Repaso de Recursión
 Repaso de Recursión
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Temas del curso
Temas del curso
 Árboles
 Árboles
 Análisis de Algoritmos
 Análisis de Algoritmos
 Cola de Prioridades
 Cola de Prioridades
 Grafos
 Grafos
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Objetivos de la materia
Objetivos de la materia
 Analizar algoritmos y evaluar su
eficiencia
eficiencia
 Estudiar estructuras de datos
avanzadas: su implementación y
avanzadas: su implementación y
aplicaciones
aplicaciones
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Estructuras de Datos
Estructuras de Datos
Una estructura de datos es una forma de almacenar y
organizar los datos con el fin de facilitar el acceso y las
organizar los datos con el fin de facilitar el acceso y las
modificaciones.
Ejemplo:
Ejemplo:
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Modelando la realidad con EEDD
Modelando la realidad con EEDD
Estructuras de Datos
Estructuras de Datos
Una estructura de datos es una forma de almacenar y
organizar los datos con el fin de facilitar el acceso y las
organizar los datos con el fin de facilitar el acceso y las
modificaciones.
Ejemplo:
Ejemplo:
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Modelando la realidad con EEDD
Modelando la realidad con EEDD
Estructuras de Datos
Estructuras de Datos
Una estructura de datos es una forma de almacenar y
organizar los datos con el fin de facilitar el acceso y las
organizar los datos con el fin de facilitar el acceso y las
modificaciones.
Ejemplo:
Ejemplo:
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Modelando la realidad con EEDD
Modelando la realidad con EEDD
Estructuras de Datos
Estructuras de Datos
Una estructura de datos es una forma de almacenar y
organizar los datos con el fin de facilitar el acceso y las
organizar los datos con el fin de facilitar el acceso y las
modificaciones.
Ejemplo:
Ejemplo:
Datos sin organización
Datos sin organización
Datos: libros
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Modelando la realidad con EEDD
Modelando la realidad con EEDD
Estructuras de Datos
Estructuras de Datos
Una estructura de datos es una forma de almacenar y
organizar los datos con el fin de facilitar el acceso y las
organizar los datos con el fin de facilitar el acceso y las
modificaciones.
Ejemplo:
Ejemplo:
Datos sin organización Datos organizados en una estructura
Datos sin organización
Datos: libros
Datos organizados en una estructura
Estructura de datos: biblioteca
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Modelando la realidad con EEDD
Modelando la realidad con EEDD
¿De qué se trata el curso?
¿De qué se trata el curso?
Estudiar formas inteligentes de organizar la información, de
Estudiar formas inteligentes de organizar la información, de
forma tal de obtener algoritmos eficientes.
.
Listas, Pilas, Colas Insertar
Árboles Binarios
Árboles Generales
Borrar
Buscar
Árboles Generales
Heaps
Buscar
Caminos mínimos
Heaps
Grafos
Caminos mínimos
Ordenación
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Estructuras de Datos Algoritmos
Las estructuras de datos y sus
Las estructuras de datos y sus
algoritmos son….
Seguridad
Multimedia
Computación
Gráfica
Internet
Biología Inteligencia Artificial
Gráfica
Internet Física
Utilizados en todos lados!
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Ejemplo 1: Árbol de carpetas y archivos
Ejemplo 1: Árbol de carpetas y archivos
Nodos: Carpetas/Archivos
Aristas: representan la relación “contiene”
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Aristas: representan la relación “contiene”
Ejemplo 2: Prerrequisitos de un curso
Ejemplo 2: Prerrequisitos de un curso
Nodos: Cursos
Aristas: relación de “prerrequisito”
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Aristas: relación de “prerrequisito”
Ejemplo 3: Representación de una expresión
Ejemplo 3: Representación de una expresión
en un compilador
Nodos: Operandos/Operadores
Aristas: representan las relaciones entre las operaciones
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Aristas: representan las relaciones entre las operaciones
Ejemplo 4: Esquema de una red informática
Ejemplo 4: Esquema de una red informática
Nodos: Equipos
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Nodos: Equipos
Aristas: representan las conexiones
Ejemplo 5: Mapa de ciudades
Ejemplo 5: Mapa de ciudades
Nodos: Ciudades
Aristas: Rutas
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Aristas: Rutas
Estructuras de Datos:
Estructuras de Datos:
Qué, Cómo y Por qué?
 Los programas reciben, procesan y devuelven
 Los programas reciben, procesan y devuelven
datos
 Necesidad de organizar los datos de acuerdo
 Necesidad de organizar los datos de acuerdo
al problema que vamos a resolver
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Estructuras de Datos:
Estructuras de Datos:
Qué, Cómo y Por qué?
 Los programas reciben, procesan y devuelven
 Los programas reciben, procesan y devuelven
datos
 Necesidad de organizar los datos de acuerdo
 Necesidad de organizar los datos de acuerdo
al problema que vamos a resolver
Las estructuras de datos son formas de
organización de los datos
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
organización de los datos
Estructuras de Datos:
Estructuras de Datos:
Qué, Cómo y Por qué?
 Un programa depende fundamentalmente de
la organización de los datos
 cómo se organizan los datos está relacionado con:
 cómo se organizan los datos está relacionado con:
Implementación de algunas operaciones: pueden
Implementación de algunas operaciones: pueden
resultar más fácil o más difícil
La velocidad del programa: puede aumentar o
La velocidad del programa: puede aumentar o
disminuir
La memoria usada: puede aumentar o disminuir
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
La memoria usada: puede aumentar o disminuir
Objetivos del curso respecto de las
Objetivos del curso respecto de las
Estructuras de Datos
 Aprender a implementar las estructuras de datos
 Aprender a implementar las estructuras de datos
usando abstracción
 Estudiar diferentes representaciones e
implementaciones para las estructuras de datos
implementaciones para las estructuras de datos
 Aprender a elegir la “mejor” estructura de datos
 Aprender a elegir la “mejor” estructura de datos
para cada problema
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Algoritmos y su Análisis
Algoritmos y su Análisis
 ¿Qué es un algoritmo?
 ¿Qué es un algoritmo?
Es una secuencia de pasos que resuelven un problema
Es independiente del lenguaje de programación
Es independiente del lenguaje de programación
 Existen varios algoritmos que resuelven correctamente
un problema
 La elección de un algoritmo particular tiene un enorme
 La elección de un algoritmo particular tiene un enorme
impacto en el tiempo y la memoria que utiliza
La elección de un algoritmo y de la estructura de datos
para resolver un problema son interdependientes
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
para resolver un problema son interdependientes
Objetivos del curso respecto del
Objetivos del curso respecto del
Análisis de los Algoritmos
 Entender los fundamentos matemáticos necesarios
para analizar algoritmos
para analizar algoritmos
 Aprender a comparar la eficiencia de diferentes
 Aprender a comparar la eficiencia de diferentes
algoritmos en términos del tiempo de ejecución
 Estudiar algunos algoritmos estándares para el
manejo de las estructuras de datos y aprender a
manejo de las estructuras de datos y aprender a
usarlos para resolver nuevos problemas
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Problemas y algoritmos
Problemas y algoritmos
 Problemas:
 Buscar un elemento en un arreglo
 Buscar un elemento en un arreglo
 Ordenar una lista de elementos
 Encontrar el camino mínimo entre dos puntos
Encontrar el algoritmo que lo resuelve
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Encontrar el algoritmo que lo resuelve
Caso: Buscar un elemento en un
Caso: Buscar un elemento en un
arreglo
El arreglo puede estar:
• desordenado
• ordenado
Si el arreglo está desordenado
Si el arreglo está desordenado
64 13 93 97 33 6 43 14 51 84 25 53 95
64 13 93 97 33 6 43 14 51 84 25 53 95
0 1 2 3 4 5 6 7 8 9 10 11 12
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Caso: Buscar un elemento en un
Caso: Buscar un elemento en un
arreglo
El arreglo puede estar:
• desordenado
• ordenado
Si el arreglo está desordenado Búsqueda secuencial
Si el arreglo está desordenado Búsqueda secuencial
64 13 93 97 33 6 43 14 51 84 25 53 95
64 13 93 97 33 6 43 14 51 84 25 53 95
0 1 2 3 4 5 6 7 8 9 10 11 12
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Algoritmo: Búsqueda secuencial
Algoritmo: Búsqueda secuencial
public static int seqSearch(int[] a, int
key)
key)
{
int index = -1;
for (int i = 0; i < N; i++)
for (int i = 0; i < N; i++)
if (key == a[i])
index = i;
return index;
return index;
}
¿Cuántas comparaciones hace?
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
¿Cuántas comparaciones hace?
Caso: Buscar un elemento en un
Caso: Buscar un elemento en un
arreglo
El arreglo puede estar:
• desordenado
• desordenado
• ordenado
Si el arreglo está ordenado
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Caso: Buscar un elemento en un
Caso: Buscar un elemento en un
arreglo
El arreglo puede estar:
• desordenado
• desordenado
• ordenado
Búsqueda binaria: Comparo la clave con
Si el arreglo está ordenado
Búsqueda binaria: Comparo la clave con
la entrada del centro
• Si es menor, voy hacia la izquierda
• Si es mayor, voy hacia la derecha
• Si es mayor, voy hacia la derecha
• Si es igual, la encontré
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
lo mid hi
Algoritmo: Búsqueda binaria
Algoritmo: Búsqueda binaria
Adivinar número - Búsqueda lineal o binaria
Adivinar número - Búsqueda lineal o binaria
https://es.khanacademy.org/computing/computer-
https://es.khanacademy.org/computing/computer-
science/algorithms/intro-to-algorithms/a/a-guessing-game
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Algoritmo: Búsqueda binaria
Algoritmo: Búsqueda binaria
public static int binarySearch(int[] a, int key)
{
int lo = 0, hi = a.length-1;
int lo = 0, hi = a.length-1;
while (lo <= hi)
{
int mid = lo + (hi - lo) / 2;
int mid = lo + (hi - lo) / 2;
if (key < a[mid]) hi = mid - 1;
else if (key > a[mid]) lo = mid + 1;
else return mid;
else return mid;
}
return -1;
}
}
¿Cuántas comparaciones hace?
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
¿Cuántas comparaciones hace?
¿Cuántas operaciones hace
¿Cuántas operaciones hace
cada algoritmo?
N Cantidad de
operaciones
N Cantidad de
operaciones
operaciones
1000 1000
2000 2000
operaciones
1000 ~10
2000 ~11
Búsqueda Búsqueda
2000 2000
4000 4000
2000 ~11
4000 ~12
Búsqueda
secuencial
Búsqueda
binaria
8000 8000
16000 16000
8000 ~13
16000 ~14
16000 16000 16000 ~14
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
¿Cuántas operaciones hace
¿Cuántas operaciones hace
cada algoritmo?
N Cantidad de
operaciones
N Cantidad de
operaciones
operaciones
1000 1000
2000 2000
operaciones
1000 ~10
2000 ~11
Búsqueda Búsqueda
2000 2000
4000 4000
2000 ~11
4000 ~12
Búsqueda
secuencial
Búsqueda
binaria
8000 8000
16000 16000
8000 ~13
16000 ~14
16000 16000 16000 ~14
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Hace N operaciones Hace log(N) operaciones
¿Cómo medir el tiempo?
¿Cómo medir el tiempo?
En forma empírica
Se realiza a posteriori
En forma teórica
Se realiza a priori
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Análisis empírico
Análisis empírico
Correr el programa para varios tamaños de la entrada y medir el
Correr el programa para varios tamaños de la entrada y medir el
tiempo. Suponemos que cada comparación tarda 1 seg.
N Tiempo (seg)
1000 1000
N Tiempo (seg)
1000 ~10
1000 1000
2000 2000
1000 ~10
2000 ~11
Búsqueda Búsqueda
4000 4000 ~ 1 hs. 4000 ~12
Búsqueda
secuencial
Búsqueda
binaria
8000 8000 ~ 2 hs
16000 16000 ~ 4 hs.
8000 ~13
16000 ~14
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Análisis de Algoritmos
Análisis de Algoritmos
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Cantidad de operaciones de la
Cantidad de operaciones de la
búsqueda binaria
búsqueda binaria
Ejercitación
https://es.khanacademy.org/computing/computer-
science/algorithms/binary-search/e/running-time-of-binary-
science/algorithms/binary-search/e/running-time-of-binary-
search
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Caso: Buscar un elemento en una
Caso: Buscar un elemento en una
lista dinámica
Si los elementos están almacenados en una lista dinámica
La lista puede estar:
La lista puede estar:
• desordenada
• ordenada
• ordenada
¿Cómo sería el algoritmo de búsqueda?
¿Cómo sería el algoritmo de búsqueda?
6
primero
10 2 50
6 10 2 50
null
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Caso: Buscar un elemento en una
Caso: Buscar un elemento en una
lista dinámica
Si los elementos están almacenados en una lista dinámica
La lista puede estar:
La lista puede estar:
• desordenada
• ordenada
• ordenada
¿Cómo sería el algoritmo de búsqueda?
¿Cómo sería el algoritmo de búsqueda?
6
primero
10 2 50
6 10 2 50
null
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Caso: Buscar un elemento en una
Caso: Buscar un elemento en una
lista dinámica
Si los elementos están almacenados en una lista dinámica
La lista puede estar:
La lista puede estar:
• desordenada
• ordenada
• ordenada
¿Cómo sería el algoritmo de búsqueda? ¿Cuántas
¿Cómo sería el algoritmo de búsqueda?
6
primero
10 2
¿Cuántas
comparaciones
hace?
50
6 10 2
hace?
50
null
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Caso: Buscar un elemento en una
Caso: Buscar un elemento en una
lista dinámica
Si los elementos están almacenados en una lista dinámica
La lista puede estar:
La lista puede estar:
• desordenada
• ordenada
• ordenada
¿Cómo sería el algoritmo de búsqueda? ¿Cuántas
¿Cómo sería el algoritmo de búsqueda?
6
primero
10 2
¿Cuántas
comparaciones
hace?
50
6 10 2
hace?
50
null
Hace N comparaciones
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Hace N comparaciones
Análisis de Algoritmos
Análisis de Algoritmos
Marco para predecir la performance y
comparar algoritmos
Desafío:
Escribir programas que puedan resolver en forma
eficiente problemas con una gran entrada de datos
eficiente problemas con una gran entrada de datos
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
Análisis de Algoritmos
Análisis de Algoritmos
Factores
independientes
Factores
dependientes del
Algoritmo
independientes
del sistema Hardware:
CPU, memoria
dependientes del
sistema
Entrada de
datos
Software:
lenguaje,
datos
lenguaje,
compilador, ..
Sistema: SO,
red, otras
aplicaciones
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
aplicaciones
Análisis de Algoritmos
Análisis de Algoritmos
Factores
independientes
Factores
dependientes del
Algoritmo
independientes
del sistema Hardware:
CPU, memoria
dependientes del
sistema
Entrada de
datos
Software:
lenguaje,
cantidad y
datos
lenguaje,
compilador, ..
cantidad y
distribución
Sistema: SO,
red, otras
aplicaciones
Cómo se comporta el
Algoritmo dependiendo
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
aplicaciones
Algoritmo dependiendo
de la entrada de datos.
Análisis de Algoritmos
Análisis de Algoritmos
Existe un modelo matemático para medir el tiempo
Tiempo total:
Suma del costo x frecuencia de todas las
Suma del costo x frecuencia de todas las
operaciones
• Es necesario analizar el algoritmo para determinar el conjunto de
operaciones
operaciones
• Costo depende de la máquina, del compilador, del lenguaje
• Frecuencia depende del algoritmo y de la entrada
Algoritmos y Estructuras de Datos 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
• Frecuencia depende del algoritmo y de la entrada
Algoritmos y Estructuras de Datos 2021
Constructores
• Inicialización de Objetos – Constructores
- ¿Qué son los Constructores?
- Constructor default.
- Constructores con argumentos
- Sobrecarga de constructores
- Cadena de invocación a constructores
• Usos y diferencias entre:
- this y this()
- super y super()
Algoritmos y Estructuras de Datos 2021
Constructores
Para crear un objeto se utiliza el operador new. La creación e inicialización de un
objeto involucra los siguientes pasos:
1. Se aloca espacio para la variable
2. Se aloca espacio para el objeto en la HEAP y se inicializan los atributos con valores por defecto.
3. Se inicializan explícitamente los atributos del objeto.
4. Se ejecuta el constructor (parecido a un método y tiene el mismo nombre de la clase)
5. Se asigna la referencia del nuevo objeto a la variable.
null
Memoria STACK
0x99f311
Memoria STACK Memoria HEAP
auto
public class Vehiculo {
private String marca;
private double precio;
. . .
}
Objeto
Vehiculo
public class Test {
public static void main(String args[]){
Vehiculo auto;
auto = new Vehiculo();
}
}
auto
a
g
r
e
g
a
r
C
o
n
t
a
c
t
o
. .
.
gerMarca()
g
e
t
P
r
e
c
i
o
(
)
marca=null
precio=0.0
...
Algoritmos y Estructuras de Datos 2021
public class Vehiculo {
private String marca;
private double precio;
public Vehiculo() {
}
}
¿Qué son los Constructores?
Los constructores son piezas de código -sintácticamente similares a los métodos- que
permiten definir un estado inicial específico de un objeto en el momento de su creación.
Se diferencian de los métodos tradicionales porque:
• Deben tener el mismo nombre que la clase. La regla de que el nombre de los métodos
debe comenzar con minúscula, no se aplica a los constructores.
• No retornan un valor.
• Son invocados automáticamente.
La inicialización está garantizada: cuando un objeto es creado, se aloca almacenamiento en la
memoria HEAP y se invoca al constructor.
Vehiculo v = new Vehiculo(); El operador new() se puede utilizar en
cualquier lugar del código.
NO retorna nada
- La expresión new retorna una referencia al objeto creado recientemente, pero el constructor no retorna un
valor.
- Java siempre llama automáticamente a un constructor cuando crea un objeto (antes de que el objeto sea
usado). De esta forma la inicialización del objeto está garantizada.
Algoritmos y Estructuras de Datos 2021
public class Vehiculo {
private String marca;
private double precio;
//métodos
}
Constructor sin argumentos
• Si una clase NO tiene constructores, el compilador inserta automáticamente un
constructor default, con cuerpo vacío:
Cuando se compila
public Vehiculo(){
}
Cuando se crea un objeto de la clase Vehiculo, con new Vehiculo(), se invocará el
constructor por defecto, aún cuando no se encuentre explícitamente en la clase.
• Si la clase tiene al menos un constructor, con o sin argumentos, el compilador NO
insertará nada.
Un constructor sin argumento o constructor Default, es usado para crear un objeto básico.
Algoritmos y Estructuras de Datos 2021
Constructores con argumentos
En general los constructores son usados para inicializar los valores del objeto que se está
creando. ¿Cómo especificar los valores para la inicialización? Los constructores pueden tener
parámetros para la inicialización de un objeto.
Si este constructor es el único de la clase, el compilador no permitirá crear un objeto Vehiculo
de otra manera que no sea usando este constructor .
public class Automotores {
public static void main(String[] args){
Vehiculo auto1 = new Vehiculo(“CITROEN”, 13500.00);
Vehiculo auto2 = new Vehiculo(“HONDA”,12400.50);
}
}
public class Vehiculo {
private String marca;
private double precio;
public Vehiculo(String mar,double pre){
marca = mar;
precio = pre;
}
}
public Vehiculo(String marca,double precio) {
this.marca = marca;
this.precio = precio;
}
Codificaciones
equivalentes
Algoritmos y Estructuras de Datos 2021
¿Qué pasa si se quiere construir un objeto Vehiculo de distintas maneras?
Se escriben en la clase más de un constructor sobrecarga de constructores.
Sobrecarga de Constructores
public class Vehiculo {
private String nroPatente=“”;
private String propietario=“SinDueño”;
public Vehiculo(){
}
public Vehiculo(String marca){
this.marca = marca;
}
public Vehiculo(String marca,double precio){
this.marca = marca;
this.precio = precio;
}
}
public class Botanico {
public static void main(String[] args){
Vehiculo a1=new Vehiculo();
Vehiculo a2=new Vehiculo(“HONDA”);
Vehiculo a3=new Vehiculo(“HONDA”,12300.50);
}
}
La sobrecarga de métodos
permite que el mismo nombre de
método sea usado con distintos
tipos y cantidad de argumentos.
Algoritmos y Estructuras de Datos 2021
this() y this
Cuando dentro de una clase, hay más de
un constructor, se pueden invocar entre
ellos para evitar duplicar código.
Para hacer esto se puede usar this(), el
cual hace una invocación a otro constructor
de la misma clase que coincida con la lista
de argumentos.
this()
public class Vehiculo {
private String marca;
private double precio;
public Vehiculo(String marca){
// podría tener más código
this.marca = marca;
}
public Vehiculo(String marca,double precio){
this(marca);
this.precio = precio;
}
Si tenemos 2 objetos de la clase Vehiculo, llamados a1 y a2 e invocamos al método setNroPatente()
sobre ambos objetos, ¿cómo sabe el método para que objetos se llama?
Vehiculo a1 = new Vehiculo();
Vehiculo a2 = new Vehiculo();
. . .
a1.setMarca(“CITROEN”);
a2.setMarca(“HONDA”);
El compilador agrega como 1º argumento de cada método
una referencia al objeto que está siendo manipulado.
this
// debe estar en la 1º línea
public class Vehiculo {
private String marca;
private String precio;
. . .
public setMarca(String marca){
this.marca = marca;
}
}
Algoritmos y Estructuras de Datos 2021
ANEXO
Algoritmos y Estructuras de Datos 2021
¿Cómo se construye un objeto?
Recorriendo la jerarquía de herencia en forma ascendente e invocando al
constructor de la superclase desde cada constructor, en cada nivel de la
jerarquía de clases:
Cadena de invocación a constructores
crear un objeto de tipo Object
crear un objeto de tipo Vertebrado
crear un objeto de tipo Mamifero
crear un objeto de tipo Perro
La clase Object
La clase Vertebrado
La clase Mamifero
La clase Perro
new Perro()
Constructor de
Mamífero()
En cada constructor de una clase derivada, debe existir una llamada a un
constructor de la superclase.
Constructor de
Vertebrado()
Constructor de
Object()
Estoy listo!
Algoritmos y Estructuras de Datos 2021
public class Perro extends Mamifero{
. .
public Perro(){
super(); // si no se pone, igual se invoca
System.out.println(“Constructor de Perro”);
}
public void comer(){ }
}
public class Mamifero extends Vertebrado {
public Mamifero(){
super(); // si no se pone, igual se invoca
System.out.println(“Constructor de Mamifero”);
}
public void comer(){
}
}
El compilador Java, automáticamente invoca en cada constructor de una
clase derivada, al constructor nulo de su clase base, si no se invocó
ninguno explícitamente.
La clase Object
La clase Vertebrado
La clase Mamifero
La clase Perro
super()
super()
super()
new Perro()
public class Vertebrado {
public Vertebrado (){
super(); // si no se pone, igual se invoca
System.out.println(“Constructor de Vertebrado”);
}
}
¿Cuál sería la salida de la
ejecución de
new Perro()?
Cadena de invocación a constructores
Algoritmos y Estructuras de Datos 2021
public class Perro extends Mamifero{
. .
public Perro(){
System.out.println(“Constructor de Perro”);
}
public void comer(){ }
}
super()
public class Mamifero extends Vertebrado {
public Mamifero(){
System.out.println(“Constructor de Mamifero”);
}
public void comer(){
}
}
super()
Error!!
¿Qué pasa si Vertebrado tiene un constructor con argumentos y no tiene el
constructor sin argumentos (default)?
La clase Object
La clase Vertebrado
La clase Mamifero
La clase Perro
new Perro()
public class Vertebrado {
private int cantpatas;
public Vertebrado (int i){
cantpatas = c;
System.out.println(“Constructor de Vertebrado”);
}
}
super()
Desde el constructor de Mamifero se debe invocar a alguno de los constructores existentes en la
superclase Vertebrado usando la palabra clave super(…) y la lista de argumentos apropiada.
¿Cómo hacemos?
super()
super()
super()
Cadena de invocación a constructores
Algoritmos y Estructuras de Datos 2021
public class Vertebrado {
private int cantpatas;
public Vertebrado(int c){
cantpatas = c;
System.out.println(“Constructor de Vertebrado”);
}
public void comer(){}
}
public class Perro extends Mamifero{
. .
public Perro(){
System.out.println(“Constructor de Perro”);
}
public void comer(){ }
}
super()
public class Mamifero extends Vertebrado {
public Mamifero(){
super(4);
System.out.println(“Constructor de Mamifero”);
}
public void comer(){}
}
super()
Si un constructor no invoca a ningún constructor de la clase base, el compilador inserta la invocación al
constructor nulo (super()).
Si un constructor invoca explícitamente a un constructor de la superclase, debe hacerlo en la primera
línea de dicho constructor.
La clase Object
La clase Vertebrado
La clase Mamifero
La clase Perro
super(4)
super()
super()
Perro p = new Perro()
¿Qué pasa si Vertebrado tiene un constructor con argumentos y no tiene el
constructor sin argumentos (default)? continuación
Cadena de invocación a constructores
Algoritmos y Estructuras de Datos 2021
super() y super
Super() invoca a un constructor de la superclase
y debe estar en la primer línea de código del
constructor.
JAVA garantiza la correcta creación de los
objetos ya que los constructores siempre
invocan a los constructores de la superclase. De
esta manera todo objeto contiene una referencia
al objeto de la superclase habilitando la
herencia de estado y comportamiento.
super()
Todos los métodos de instancia disponen de la variable super (además de this), la cual contiene
una referencia al objeto padre. La palabra clave super, permite invocar desde la subclase un
método de la superclase.
super
public class Perro extends Mamifero {
private String sonido;
public Perro(){
super(4);
sonido=new String(“guau”);
}
. . .
}
se invoca al constructor de
Mamifero con
argumento de tipo entero.
En este ejemplo, el código del constructor
Perro() espera hasta que el padre se inicialice
para continuar con su código.
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Estructura
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Código Fuente
package tp03.ejercicio1;
public class ArbolBinario<T> {
private T dato;
private ArbolBinario<T> hijoIzquierdo;
private ArbolBinario<T> hijoDerecho;
public ArbolBinario() {
super();
}
public ArbolBinario(T dato) {
this.dato = dato;
}
public T getDato() {
return dato;
}
public void setDato(T dato) {
this.dato = dato;
}
public ArbolBinario<T> getHijoIzquierdo() {
return this.hijoIzquierdo;
}
public ArbolBinario<T> getHijoDerecho() {
return this.hijoDerecho;
}
public void agregarHijoIzquierdo(ArbolBinario<T> hijo) {
this.hijoIzquierdo = hijo;
}
public void agregarHijoDerecho(ArbolBinario<T> hijo) {
this.hijoDerecho = hijo;
}
public void eliminarHijoIzquierdo() {
this.hijoIzquierdo = null;
}
public void eliminarHijoDerecho() {
this.hijoDerecho = null;
}
public boolean esVacio() {
return (this.esHoja() && this.getDato()==null);
}
public boolean esHoja() {
return (!this.tieneHijoIzquierdo() &&
!this.tieneHijoDerecho());
}
public boolean tieneHijoIzquierdo() {
return this.hijoIzquierdo!=null;
}
public boolean tieneHijoDerecho() {
return this.hijoDerecho!=null;
}
}
Constructores
Arbol vacío
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Creación
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Recorridos
Preorden
Se procesa primero la raíz y luego sus hijos, izquierdo y derecho.
40, 25, 10, 32, 78
Inorden
Se procesa el hijo izquierdo, luego la raíz y último el hijo derecho
10, 25, 32, 40, 78
Postorden
Se procesan primero los hijos, izquierdo y derecho, y luego la raíz
10, 32, 25, 78, 40
Por niveles
Se procesan los nodos teniendo en cuenta sus niveles, primero la raíz, luego los
hijos, los hijos de éstos, etc.
40, 25, 78, 10, 32
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Arboles Binarios
Recorrido PreOrden
Se procesa primero la raíz y luego sus hijos, izquierdo y derecho
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Arboles Binarios
Recorrido PreOrden
Qué cambio harias si el método preorden() debe definirse en otra clase diferente al ArbolBinario<T>?
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Arboles Binarios
Recorrido PreOrden
Qué cambio harías para devolver una lista con los elementos de un recorrido en preorden?
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Recorrido por Niveles
Recorrido implementado en la clase ArbolBinario
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Es árbol lleno?
public boolean lleno() {
ArbolBinario<T> arbol = null;
ColaGenerica<ArbolBinario<T>> cola = new ColaGenerica<ArbolBinario<T>>();
boolean lleno = true;
cola.encolar( this);
int cant_nodos=0;
cola.encolar( null);
int nivel= 0;
while (!cola.esVacia() && lleno) {
arbol = cola.desencolar();
if (arbol != null) {
System. out.print(arbol.getDatoRaiz());
if (!arbol.getHijoIzquierdo().esvacio()) {
cola.encolar(arbol.getHijoIzquierdo());
cant_nodos++;
}
if (!(arbol.getHijoDerecho().esvacio()) {
cola.encolar(arbol.getHijoDerecho());
cant_nodos++;
}
} else if (!cola.esVacia()) {
if (cant_nodos == Math.pow(2, ++nivel)){
cola.encolar( null);
cant_nodos=0;
System. out.println();
}
else lleno=false;}
}
return lleno;
}
Dado un árbol binario de altura h, diremos que es lleno si cada nodo interno tiene grado 2 y todas las
hojas están en el mismo nivel (h). Implementar un método para determinar si un árbol binario es “lleno”
arbol = null
cant_nodos = 2
1 null 2 5
cola
Nivel/Prof
0
1
2
arbol = cola.desencolar();
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Árbol de Expresión
/
* +
+
b
a
c d e
Un árbol de expresión es un árbol binario asociado a una expresión aritmética
donde:
• Nodos internos representan operadores
• Nodos externos (hojas) representan operandos
Algoritmos y Estructuras de Datos 2021
public ArbolBinario<Character> convertirPostfija(String exp) {
char c = null;
ArbolBinario<Character> result;
PilaGenerica<ArbolBinario<Character>> p = new PilaGenerica<ArbolBinario<Character>>();
for (int i = 0; i < exp.length(); i++) {
c = exp.charAt(i);
result = new ArbolBinario<Character>(c);
if ((c == '+') || (c == '-') || (c == '/') || (c == '*')) {
// Es operador
result.agregarHijoDerecho(p.desapilar());
result.agregarHijoIzquierdo(p.desapilar ());
}
p.apilar(result);
}
return (p.desapilar());
}
Arboles Binarios
Convertir expresión posfija en árbol de Expresión
ab+c*de+/
/
* +
+
b
a
c d e
Este método convierte una expresión postfija en un ArbolBinario. Puede estar
implementado en cualquier clase.
Algoritmos y Estructuras de Datos 2021
public ArbolBinario<Character> convertirPrefija(StringBuffer exp) {
char c = exp.charAt(0);
ArbolBinario<Character> result = new ArbolBinario<Character>(c);
if ((c == '+') || (c == '-') || (c == '/') || c == '*') {
// es operador
result.agregarHijoIzquierdo(this.convertirPrefija(exp.delete(0,1)));
result.agregarHijoDerecho(this.convertirPrefija(exp.delete(0,1)));
}
// es operando
return result;
}
Este método convierte una expresión prefija en un ArbolBinario. Puede estar
implementado en cuaquier clase.
Arboles Binarios
Convertir expresión prefija en árbol de expresión
/*+abc+de
/
* +
+
b
a
c d e
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Evaluación de un Árbol de Expresión
public Integer evaluar(ArbolBinario<Character> arbol) {
Character c = arbol.getDato();
// es operador
if ((c == '+') || (c == '-') || (c == '/') || c == '*') {
int operador_1 = evaluar(arbol.getHijoIzquierdo());
int operador_2 = evaluar(arbol.getHijoDerecho());
switch (c) {
case '+':
return operador_1 + operador_2;
case '-':
return operador_1 - operador_2;
case '*':
return operador_1 * operador_2;
case '/':
return operador_1 / operador_2;
}
}
// es operando
return Integer.parseInt(c.toString());
}
Este método evalúa y retorna un número de acuerdo a la expresión aritmética representada por
el ArbolBinario que es enviado como parámetro.
/
* +
+
2
1
9 2 1
retorna 9
Algoritmos y Estructuras de Datos 2021
Arboles Binarios
Árbol de Frecuencia Natural
Investigadores de la Universidad de Regensburg, junto con investigadores del área de medicina del
Hospital LMU de Munich, han descubierto que los diagnósticos médicos se pueden realizar con
mayor precisión y rapidez con la ayuda de árboles de frecuencias naturales (*).
Un árbol de frecuencia natural (AFN) es un árbol binario asociado con ocurrencias, donde para todos
los nodos que no son hojas, su valor es la suma del valor de sus dos hijos.
La imagen muestra un AFN construido a
partir 10.000 mamografía efectuadas a
distintas pacientes
(*) https://medicalxpress.com/news/2021-02-faster-accurate-diagnosis-natural-frequency.html
Algoritmos y Estructuras de Datos 2021
public class Frecuencia {
private String detalle;
private int valor;
public Frecuencia(String detalle, int valor) {
super();
this.detalle = detalle;
this.valor = valor;
}
public String getDetalle() {
return detalle;
}
public void setDetalle(String detalle) {
this.detalle = detalle;
}
public int getValor() {
return valor;
}
public void setValor(int valor) {
this.valor = valor;
}
public String toString() {
return this.getDetalle()+"("+this.getValor()+")";
}
}
Arboles Binarios
Árbol de Frecuencia Natural
Debemos codificar un método que dado un árbol binario verificar si se trata de un AFN o no.
Algoritmos y Estructuras de Datos 2021
public static boolean esAFN(ArbolBinario<Frecuencia> ab) {
if (!ab.esHoja()) {
int valor = 0;
if (ab.tieneHijoIzquierdo()) {
valor = (ab.getHijoIzquierdo().getDato().getValor());
}
if (ab.tieneHijoDerecho()) {
valor = valor + (ab.getHijoDerecho().getDato().getValor());
}
if (ab.getDato().getValor()==valor) {
if (ab.tieneHijoIzquierdo()) {
if (!esAFN(ab.getHijoIzquierdo())) return false;
}
if (ab.tieneHijoDerecho()) {
if (!esAFN(ab.getHijoDerecho())) return false;
}
} else
return false;
}
return true;
}
Arboles Binarios
Árbol de Frecuencia Natural - Solución recursiva
Algoritmos y Estructuras de Datos 2021
public static boolean esAFN1(ArbolBinario<Frecuencia> a) {
ArbolBinario<Frecuencia> arbol = null;
ColaGenerica<ArbolBinario<Frecuencia>> cola = new ColaGenerica<ArbolBinario<Frecuencia>>();
boolean sigue = true;
cola.encolar(a);
while (!cola.esVacia() && sigue) {
arbol = cola.desencolar();
int val_padre = 0;
int val_hijos = 0;
if (arbol != null) {
val_padre = arbol.getDato().getValor();
val_hijos = 0;
if (arbol.tieneHijoIzquierdo()) {
cola.encolar(arbol.getHijoIzquierdo());
val_hijos = arbol.getHijoIzquierdo().getDato().getValor();
}
if (arbol.tieneHijoDerecho()) {
cola.encolar(arbol.getHijoDerecho());
val_hijos = val_hijos + arbol.getHijoDerecho().getDato().getValor();
}
if (!arbol.esHoja() && val_padre != val_hijos)
sigue = false;
}
}
return sigue;
}
Arboles Binarios
Árbol de Frecuencia Natural - Solución iterativa
Algoritmos y Estructuras de Datos 2021
public static void main(String[] args) {
ArbolBinario<Frecuencia> arbolRaizGral = new ArbolBinario<Frecuencia>(new Frecuencia("Mujeres", 10000));
ArbolBinario<Frecuencia> hijoIzquierdoB = new ArbolBinario<Frecuencia>(new Frecuencia("Con Cancer", 100));
hijoIzquierdoB.agregarHijoIzquierdo(new ArbolBinario<Frecuencia>(new Frecuencia("Mamo +", 80)));
hijoIzquierdoB.agregarHijoDerecho(new ArbolBinario<Frecuencia>(new Frecuencia("Mamo -", 20)));
arbolRaizGral.agregarHijoIzquierdo(hijoIzquierdoB);
ArbolBinario<Frecuencia> hijoDerechoB = new ArbolBinario<Frecuencia>(new Frecuencia("Sin Cancer", 9900));
hijoDerechoB.agregarHijoIzquierdo(new ArbolBinario<Frecuencia>(new Frecuencia("Mamo +", 950)));
hijoDerechoB.agregarHijoDerecho(new ArbolBinario<Frecuencia>(new Frecuencia("Mamo -", 8950)));
arbolRaizGral.agregarHijoDerecho(hijoDerechoB);
if (esAFN(arbolRaizGral))
System.out.println("Es AFN");
else
System.out.println("No es AFN");
}
Arboles Binarios
Árbol de Frecuencia Natural - Construcción

Más contenido relacionado

Último

Redes GSM en la tecnología en la segunda
Redes GSM en la tecnología en la segundaRedes GSM en la tecnología en la segunda
Redes GSM en la tecnología en la segunda
anonimussecreto
 
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
ErnestoCano12
 
bombeo cavidades progresivas en pozos Petróleros
bombeo cavidades progresivas en pozos Petrólerosbombeo cavidades progresivas en pozos Petróleros
bombeo cavidades progresivas en pozos Petróleros
EstefannyMedrano1
 
EXPOSICION CIENCIA E INGENIERIA DE LOS MATERIALES.doc.pptx
EXPOSICION CIENCIA E INGENIERIA DE LOS MATERIALES.doc.pptxEXPOSICION CIENCIA E INGENIERIA DE LOS MATERIALES.doc.pptx
EXPOSICION CIENCIA E INGENIERIA DE LOS MATERIALES.doc.pptx
alejandroagarcia2336
 

Último (20)

Redes GSM en la tecnología en la segunda
Redes GSM en la tecnología en la segundaRedes GSM en la tecnología en la segunda
Redes GSM en la tecnología en la segunda
 
guia-diseno-instalaciones-electricas.pdf
guia-diseno-instalaciones-electricas.pdfguia-diseno-instalaciones-electricas.pdf
guia-diseno-instalaciones-electricas.pdf
 
Litio en México y su uso en baterías
Litio en México y su uso en bateríasLitio en México y su uso en baterías
Litio en México y su uso en baterías
 
CICLO OTTO PARA MOTORES DE DOS Y CUATRO TIEMPOS CON EJEMPLOS.pptx
CICLO OTTO PARA MOTORES DE DOS Y CUATRO TIEMPOS CON EJEMPLOS.pptxCICLO OTTO PARA MOTORES DE DOS Y CUATRO TIEMPOS CON EJEMPLOS.pptx
CICLO OTTO PARA MOTORES DE DOS Y CUATRO TIEMPOS CON EJEMPLOS.pptx
 
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdfESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
 
ACT MECANISMO DE 4 BARRAS ARTICULADAS.PDF
ACT MECANISMO DE 4 BARRAS ARTICULADAS.PDFACT MECANISMO DE 4 BARRAS ARTICULADAS.PDF
ACT MECANISMO DE 4 BARRAS ARTICULADAS.PDF
 
TERRENO DE FUNDACION - CURSO DE PAVIMENTOS
TERRENO DE FUNDACION - CURSO DE PAVIMENTOSTERRENO DE FUNDACION - CURSO DE PAVIMENTOS
TERRENO DE FUNDACION - CURSO DE PAVIMENTOS
 
vectores,rectas y plano en bidimensional(r2) y tridimensional (r3)
vectores,rectas y plano en bidimensional(r2) y tridimensional (r3)vectores,rectas y plano en bidimensional(r2) y tridimensional (r3)
vectores,rectas y plano en bidimensional(r2) y tridimensional (r3)
 
Trabajo Mecanismos de cuatro barras.pdf
Trabajo  Mecanismos de cuatro barras.pdfTrabajo  Mecanismos de cuatro barras.pdf
Trabajo Mecanismos de cuatro barras.pdf
 
Mecanismo de cuatro barras articuladas!!
Mecanismo de cuatro barras articuladas!!Mecanismo de cuatro barras articuladas!!
Mecanismo de cuatro barras articuladas!!
 
SISTEMA ARTICULADO DE CUATRO BARRAS .pdf
SISTEMA ARTICULADO DE CUATRO BARRAS .pdfSISTEMA ARTICULADO DE CUATRO BARRAS .pdf
SISTEMA ARTICULADO DE CUATRO BARRAS .pdf
 
PROCESO CONSTRUCTIVO DE UNA CALZADURA EN OBRA
PROCESO CONSTRUCTIVO DE UNA CALZADURA EN OBRAPROCESO CONSTRUCTIVO DE UNA CALZADURA EN OBRA
PROCESO CONSTRUCTIVO DE UNA CALZADURA EN OBRA
 
Presentación de proyecto y resumen de conceptos (3).pdf
Presentación de proyecto y resumen de conceptos (3).pdfPresentación de proyecto y resumen de conceptos (3).pdf
Presentación de proyecto y resumen de conceptos (3).pdf
 
Trabajo de cristalografia. año 2024 mes de mayo
Trabajo de cristalografia. año 2024 mes de mayoTrabajo de cristalografia. año 2024 mes de mayo
Trabajo de cristalografia. año 2024 mes de mayo
 
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptxMETRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
 
368165951-Procedimiento-de-Gruas-e-Izaje.doc
368165951-Procedimiento-de-Gruas-e-Izaje.doc368165951-Procedimiento-de-Gruas-e-Izaje.doc
368165951-Procedimiento-de-Gruas-e-Izaje.doc
 
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
 
bombeo cavidades progresivas en pozos Petróleros
bombeo cavidades progresivas en pozos Petrólerosbombeo cavidades progresivas en pozos Petróleros
bombeo cavidades progresivas en pozos Petróleros
 
EXPOSICION CIENCIA E INGENIERIA DE LOS MATERIALES.doc.pptx
EXPOSICION CIENCIA E INGENIERIA DE LOS MATERIALES.doc.pptxEXPOSICION CIENCIA E INGENIERIA DE LOS MATERIALES.doc.pptx
EXPOSICION CIENCIA E INGENIERIA DE LOS MATERIALES.doc.pptx
 
Deusto Ingeniería 24 (Año 2023) - Universidad de Deusto
Deusto Ingeniería 24 (Año 2023) - Universidad de DeustoDeusto Ingeniería 24 (Año 2023) - Universidad de Deusto
Deusto Ingeniería 24 (Año 2023) - Universidad de Deusto
 

Destacado

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Destacado (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Algoritmos y estructuras de datos, recursion

  • 1. Algoritmos y Estructuras de Datos Cursada 2021 Cursada 2021 Prof. Alejandra Schiavoni (ales@info.unlp.edu.ar) Prof. Catalina Mostaccio (catty@lifia.info.unlp.edu.ar) Prof. Catalina Mostaccio (catty@lifia.info.unlp.edu.ar) Prof. Laura Fava (lfava@info.unlp.edu.ar) Prof. Laura Fava (lfava@info.unlp.edu.ar) Prof. Pablo Iuliano (piuliano@info.unlp.edu.ar)
  • 2. Repaso de Recursión Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 3. Repaso de Recursión Repaso de Recursión  Se dice que un objeto es recursivo cuando forma parte de sí mismo, es decir puede definirse en parte de sí mismo, es decir puede definirse en términos de sí mismo.  En programación, la recursividad es la propiedad que tienen los Algoritmos de llamarse a sí que tienen los Algoritmos de llamarse a sí mismos para resolver un problema. Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 4. Repaso de Recursión Repaso de Recursión  Ejemplos de definiciones recursivas: • Factorial de un número • Factorial de un número 0! = 1 Si n > 0, n! = n * (n-1)! • Potencia de un número x0 = 1 x = 1 Si y > 0, xy = x * xy-1 • Estructuras de datos • Estructuras de datos Árboles Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 5. Repaso de Recursión Repaso de Recursión  Ejemplos de soluciones recursivas: • Buscar un elemento en un arreglo • Ordenar un arreglo de elementos • Recorrer un árbol Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 6. Repaso de Recursión Repaso de Recursión  Soluciones recursivas: • División sucesiva del problema original en problemas más pequeños del mismo tipo • Se van resolviendo estos problemas más sencillos • Con las soluciones de éstos se construyen las soluciones de los problemas más complejos Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 7. Repaso de Recursión  Ejemplo: Repaso de Recursión  Ejemplo: Programar un algoritmo recursivo que permita invertir un número int invertir (int n) { { if (n < 10) //caso base System.out.print(n); System.out.print(n); else System.out.print(n mod 10); // el resto de la división entera invertir (n div 10); } Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 8. Repaso de Recursión int invertir (int n)  Ejecución: int invertir (int n) { if (n < 10) //caso base System.out.print(n); Entrada: 123 System.out.print(n); else System.out.print(n mod 10); // el resto de la división entera invertir (n div 10); invertir (n div 10); } Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Salida:
  • 9. Repaso de Recursión int invertir (int n)  Ejecución: int invertir (int n) { if (n < 10) //caso base System.out.print(n); Entrada: 123 System.out.print(n); else System.out.print(n mod 10); // el resto de la división entera invertir (n div 10); invertir (n div 10); } invertir (123) n = 123 n = 123 print (3) invertir (12) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Salida: 3
  • 10. Repaso de Recursión int invertir (int n)  Ejecución: int invertir (int n) { if (n < 10) //caso base System.out.print(n); Entrada: 123 System.out.print(n); else System.out.print(n mod 10); // el resto de la división entera invertir (n div 10); invertir (12) invertir (n div 10); } invertir (12) n = 12 print (2) invertir (1) invertir (123) n = 123 invertir (123) n = 123 invertir (1) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Salida: 3 2
  • 11. Repaso de Recursión int invertir (int n)  Ejecución: int invertir (int n) { if (n < 10) //caso base System.out.print(n); invertir (1) n = 1 print (1) Entrada: 123 System.out.print(n); else System.out.print(n mod 10); // el resto de la división entera invertir (n div 10); invertir (12) invertir (12) print (1) invertir (n div 10); } invertir (12) n = 12 print (2) invertir (1) invertir (12) n = 12 print (2) invertir (1) invertir (123) n = 123 invertir (123) n = 123 invertir (1) invertir (1) invertir (123) n = 123 n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Salida: 3 2 1
  • 12. Repaso de Recursión int invertir (int n)  Ejecución: int invertir (int n) { if (n < 10) //caso base System.out.print(n); invertir (1) n = 1 print (1) Entrada: 123 System.out.print(n); else System.out.print(n mod 10); // el resto de la división entera invertir (n div 10); invertir (12) invertir (12) print (1) invertir (n div 10); } invertir (12) n = 12 print (2) invertir (1) invertir (12) n = 12 print (2) invertir (1) invertir (123) n = 123 invertir (123) n = 123 invertir (1) invertir (1) invertir (123) n = 123 n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Salida: 3 2 1
  • 13. Repaso de Recursión int invertir (int n)  Ejecución: int invertir (int n) { if (n < 10) //caso base System.out.print(n); invertir (1) n = 1 print (1) Entrada: 123 System.out.print(n); else System.out.print(n mod 10); // el resto de la división entera invertir (n div 10); invertir (12) invertir (12) print (1) invertir (12) invertir (n div 10); } invertir (12) n = 12 print (2) invertir (1) invertir (12) n = 12 print (2) invertir (1) invertir (12) n = 12 print (2) invertir (1) invertir (123) n = 123 invertir (123) n = 123 invertir (1) invertir (1) invertir (123) n = 123 invertir (1) invertir (123) n = 123 n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Salida: 3 2 1
  • 14. Repaso de Recursión int invertir (int n)  Ejecución: int invertir (int n) { if (n < 10) //caso base System.out.print(n); invertir (1) n = 1 print (1) Entrada: 123 System.out.print(n); else System.out.print(n mod 10); // el resto de la división entera invertir (n div 10); invertir (12) invertir (12) print (1) invertir (12) invertir (n div 10); } invertir (12) n = 12 print (2) invertir (1) invertir (12) n = 12 print (2) invertir (1) invertir (12) n = 12 print (2) invertir (1) invertir (123) n = 123 invertir (123) n = 123 invertir (1) invertir (1) invertir (123) n = 123 invertir (1) invertir (123) n = 123 n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Salida: 3 2 1
  • 15. Repaso de Recursión int invertir (int n)  Ejecución: int invertir (int n) { if (n < 10) //caso base System.out.print(n); invertir (1) n = 1 print (1) Entrada: 123 System.out.print(n); else System.out.print(n mod 10); // el resto de la división entera invertir (n div 10); invertir (12) invertir (12) print (1) invertir (12) invertir (n div 10); } invertir (12) n = 12 print (2) invertir (1) invertir (12) n = 12 print (2) invertir (1) invertir (12) n = 12 print (2) invertir (1) invertir (123) n = 123 invertir (123) n = 123 invertir (1) invertir (1) invertir (123) n = 123 invertir (1) invertir (123) n = 123 invertir (123) n = 123 n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Salida: 3 2 1
  • 16. Repaso de Recursión int invertir (int n)  Ejecución: int invertir (int n) { if (n < 10) //caso base System.out.print(n); invertir (1) n = 1 print (1) Entrada: 123 System.out.print(n); else System.out.print(n mod 10); // el resto de la división entera invertir (n div 10); invertir (12) invertir (12) print (1) invertir (12) invertir (n div 10); } invertir (12) n = 12 print (2) invertir (1) invertir (12) n = 12 print (2) invertir (1) invertir (12) n = 12 print (2) invertir (1) invertir (123) n = 123 invertir (123) n = 123 invertir (1) invertir (1) invertir (123) n = 123 invertir (1) invertir (123) n = 123 invertir (123) n = 123 n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) n = 123 print (3) invertir (12) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Salida: 3 2 1
  • 17. Repaso de Recursión  Ejemplo 2: Algoritmo de ordenación MergeSort La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo devuelve (el sub-vector está ordenado). Características recursivas del algoritmo  Se resuelven 2 sub-problemas más pequeños  Se resuelven 2 sub-problemas más pequeños  Se combinan los resultados de cada solución  Se cuenta con un caso base. Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 18. Repaso de Recursión  Ejemplo 2: Algoritmo de ordenación MergeSort La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo devuelve (el sub-vector está ordenado). devuelve (el sub-vector está ordenado). Gráficamente: Ordenar vector Ordenar sub-vector Ordenar sub-vector Ordenar sub-vector izquierdo Ordenar sub-vector derecho sub-vector derecho sub-vector izquierdo sub-vector derecho ordenado sub-vector izquierdo ordenado Merge de los 2 sub- Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Merge de los 2 sub- vectores ordenados
  • 19. Repaso de Recursión  Ejemplo 2: Algoritmo de ordenación MergeSort La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo devuelve (el sub-vector está ordenado). devuelve (el sub-vector está ordenado). Gráficamente: Ordenar vector Ordenar sub-vector Ordenar sub-vector Dividir en 1 o varios sub- problemas Problema Ordenar sub-vector izquierdo Ordenar sub-vector derecho sub-vector derecho sub-vector izquierdo sub-vector derecho ordenado sub-vector izquierdo ordenado Merge de los 2 sub- Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Merge de los 2 sub- vectores ordenados
  • 20. Repaso de Recursión  Ejemplo 2: Algoritmo de ordenación MergeSort La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo devuelve (el sub-vector está ordenado). devuelve (el sub-vector está ordenado). Gráficamente: Ordenar vector Ordenar sub-vector Ordenar sub-vector Dividir en 1 o varios sub- problemas Problema Ordenar sub-vector izquierdo Ordenar sub-vector derecho sub-vector derecho sub-vector izquierdo Resolver los sub- problemas sub-vector derecho ordenado sub-vector izquierdo ordenado Merge de los 2 sub- Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Merge de los 2 sub- vectores ordenados
  • 21. Repaso de Recursión  Ejemplo 2: Algoritmo de ordenación MergeSort La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo devuelve (el sub-vector está ordenado). devuelve (el sub-vector está ordenado). Gráficamente: Ordenar vector Ordenar sub-vector Ordenar sub-vector Dividir en 1 o varios sub- problemas Problema Ordenar sub-vector izquierdo Ordenar sub-vector derecho sub-vector derecho sub-vector izquierdo Resolver los sub- problemas sub-vector derecho ordenado sub-vector izquierdo ordenado Merge de los 2 sub- Combinar las soluciones de los sub-problemas Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Merge de los 2 sub- vectores ordenados de los sub-problemas
  • 22. Repaso de Recursión  Ejemplo 2: Algoritmo de ordenación MergeSort La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- La estrategia del algoritmo consiste en dividir el vector en 2 partes (sub- vectores), ordenarlos y luego hacer un Merge de estos sub-vectores ya ordenados. Cada uno de esos sub-vectores se ordenan aplicando la misma estrategia, hasta tanto el vector contenga sólo un dato y en ese caso se lo devuelve (el sub-vector está ordenado). devuelve (el sub-vector está ordenado). Gráficamente: Ordenar vector Ordenar sub-vector Ordenar sub-vector Dividir en 1 o varios sub- problemas Problema Ordenar sub-vector izquierdo Ordenar sub-vector derecho sub-vector derecho sub-vector izquierdo Resolver los sub- problemas sub-vector derecho ordenado sub-vector izquierdo ordenado Merge de los 2 sub- Combinar las soluciones de los sub-problemas Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Merge de los 2 sub- vectores ordenados Problema resuelto de los sub-problemas
  • 23. Repaso de Recursión Ejemplo 2: Estrategia Ordenar un arreglo con n elementos mergesort(a, 0, 6) Ordenar la 1er mitad del arreglo n/2 elementos Ordenar la 2da mitad del arreglo n/2 elementos mergesort (a, 0, 3) mergesort (a, 4, 6) Mezclar ambas mitades ya ordenadas En cada paso intermedio se aplica la misma estrategia merge (a, 0, 3,6) estrategia Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 24. Repaso de Recursión Ejemplo 2: public static void mergesort (int a[],int izq, int der) { Ejemplo 2: (a) if ( izq<der ) { (b) int m = (izq+der)/2; (c) mergesort (a,izq, m); (d) mergesort (a,m+1, der); (d) mergesort (a,m+1, der); (e) merge (a, izq, m, der); } } } Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 25. Repaso de Recursión Ejemplo 2 (cont.) : public static void merge ( int a[], int izq, int m, int der) { int i, j, k; int [] b = new int [a.length]; //array auxiliar int [] b = new int [a.length]; //array auxiliar for ( i=izq; i<=der; i++ ) { //copia ambas mitades en el array auxiliar b[i]=a[i]; } i=izq; j=m+1; k=izq; i=izq; j=m+1; k=izq; while (i<=m && j<=der) { //copia el siguiente elemento más grande if (b[i]<=b[j]) a[k++]=b[i++]; a[k++]=b[i++]; else a[k++]=b[j++]; } } while (i<=m) //copia los elementos que quedan de la a[k++]=b[i++]; //primera mitad (si los hay) } Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio }
  • 26. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) mergesort(a, 4, 6) Ejemplo 2: Ejecución mergesort(a, 0, 3) mergesort(a, 4, 6) mergesort(a, 0, 1) mergesort(a, 2, 3) mergesort(a, 4, 5) mergesort(a, 6, 6) …….. …….. …….. mergesort(a, 0, 0) …….. …….. …….. merge(a, 0, 0, 1) merge(a, 2, 2, 3) merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. …….. merge(a, 2, 2, 3) merge(a, 6, 6, 6) …….. …….. …….. …….. …….. …….. Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 27. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) Ejemplo 2: Ejecución Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 28. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 0, 3) …….. …….. …….. merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. merge(a, 6, 6, 6) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 29. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 0, 3) mergesort(a, 0, 1) …….. …….. …….. merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. merge(a, 6, 6, 6) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 30. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 0, 3) mergesort(a, 0, 1) mergesort(a, 0, 0) …….. …….. …….. merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. merge(a, 6, 6, 6) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 31. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 0, 3) mergesort(a, 0, 1) …….. …….. …….. mergesort(a, 1, 1) mergesort(a, 0, 0) merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. merge(a, 6, 6, 6) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 32. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 0, 3) mergesort(a, 0, 1) merge(a, 0, 0, 1) mergesort(a, 0, 0) …….. …….. …….. mergesort(a, 1, 1) merge(a, 0, 0, 1) merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. Fin de la llamada recursiva merge(a, 6, 6, 6) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 33. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 0, 3) mergesort(a, 0, 1) …….. …….. …….. 0 8 merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. merge(a, 6, 6, 6) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 34. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 0, 3) mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 0, 1) mergesort(a, 2, 3) …….. …….. …….. 0 8 merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. merge(a, 6, 6, 6) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 35. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 0, 3) mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 2, 3) mergesort(a, 0, 1) …….. …….. …….. 0 8 mergesort(a, 2, 2) merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. merge(a, 6, 6, 6) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 36. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 0, 3) mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 2, 3) mergesort(a, 0, 1) …….. …….. …….. mergesort(a, 2, 2) mergesort(a, 3, 3) 0 8 merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. mergesort(a, 3, 3) merge(a, 6, 6, 6) Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 37. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 0, 3) mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 2, 3) mergesort(a, 0, 1) …….. …….. …….. mergesort(a, 2, 2) mergesort(a, 3, 3) 0 8 merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. mergesort(a, 3, 3) merge(a, 2, 2, 3) merge(a, 6, 6, 6) Fin de la llamada recursiva Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 38. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 0, 3) mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 2, 3) mergesort(a, 0, 1) …….. …….. …….. 0 8 -1 3 merge(a, 0, 1, 3) merge(a, 4, 4, 5) merge(a, 6, 6, 6) …….. merge(a, 0, 1, 3) merge(a, 6, 6, 6) Fin de la llamada recursiva Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 39. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 4, 6) mergesort(a, 0, 3) mergesort(a, 4, 6) mergesort(a, 4, 5) mergesort(a, 4, 5) mergesort(a, 4, 5) mergesort(a, 4, 4) mergesort(a, 5, 5) merge(a, 4, 4, 5) Fin de la llamada recursiva Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 40. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 4, 6) mergesort(a, 0, 3) mergesort(a, 4, 6) mergesort(a, 6, 6) mergesort(a, 4, 5) mergesort(a, 4, 5) mergesort(a, 6, 6) mergesort(a, 4, 5) merge(a, 4, 5, 6) Fin de la llamada recursiva Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 41. Repaso de Recursión Ejemplo 2: Ejecución mergesort(a, 0, 6) mergesort(a, 0, 3) Ejemplo 2: Ejecución mergesort(a, 4, 6) mergesort(a, 0, 3) mergesort(a, 4, 6) merge(a, 0, 3, 6) Fin de la llamada recursiva Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Fin de la llamada recursiva
  • 42. Algoritmos y Estructuras de Datos Cursada 2021 Cursada 2021 Prof. Alejandra Schiavoni (ales@info.unlp.edu.ar) Prof. Catalina Mostaccio (catty@lifia.info.unlp.edu.ar) Prof. Catalina Mostaccio (catty@lifia.info.unlp.edu.ar) Prof. Laura Fava (lfava@info.unlp.edu.ar) Prof. Laura Fava (lfava@info.unlp.edu.ar) Prof. Pablo Iuliano (piuliano@info.unlp.edu.ar)
  • 43. Agenda  Temas de la materia  Temas de la materia  Objetivos de la materia  Objetivos de la materia  Introducción al Análisis de Algoritmos  Introducción al Análisis de Algoritmos  Repaso de Recursión  Repaso de Recursión Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 44. Temas del curso Temas del curso  Árboles  Árboles  Análisis de Algoritmos  Análisis de Algoritmos  Cola de Prioridades  Cola de Prioridades  Grafos  Grafos Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 45. Objetivos de la materia Objetivos de la materia  Analizar algoritmos y evaluar su eficiencia eficiencia  Estudiar estructuras de datos avanzadas: su implementación y avanzadas: su implementación y aplicaciones aplicaciones Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 46. Estructuras de Datos Estructuras de Datos Una estructura de datos es una forma de almacenar y organizar los datos con el fin de facilitar el acceso y las organizar los datos con el fin de facilitar el acceso y las modificaciones. Ejemplo: Ejemplo: Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Modelando la realidad con EEDD Modelando la realidad con EEDD
  • 47. Estructuras de Datos Estructuras de Datos Una estructura de datos es una forma de almacenar y organizar los datos con el fin de facilitar el acceso y las organizar los datos con el fin de facilitar el acceso y las modificaciones. Ejemplo: Ejemplo: Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Modelando la realidad con EEDD Modelando la realidad con EEDD
  • 48. Estructuras de Datos Estructuras de Datos Una estructura de datos es una forma de almacenar y organizar los datos con el fin de facilitar el acceso y las organizar los datos con el fin de facilitar el acceso y las modificaciones. Ejemplo: Ejemplo: Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Modelando la realidad con EEDD Modelando la realidad con EEDD
  • 49. Estructuras de Datos Estructuras de Datos Una estructura de datos es una forma de almacenar y organizar los datos con el fin de facilitar el acceso y las organizar los datos con el fin de facilitar el acceso y las modificaciones. Ejemplo: Ejemplo: Datos sin organización Datos sin organización Datos: libros Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Modelando la realidad con EEDD Modelando la realidad con EEDD
  • 50. Estructuras de Datos Estructuras de Datos Una estructura de datos es una forma de almacenar y organizar los datos con el fin de facilitar el acceso y las organizar los datos con el fin de facilitar el acceso y las modificaciones. Ejemplo: Ejemplo: Datos sin organización Datos organizados en una estructura Datos sin organización Datos: libros Datos organizados en una estructura Estructura de datos: biblioteca Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Modelando la realidad con EEDD Modelando la realidad con EEDD
  • 51. ¿De qué se trata el curso? ¿De qué se trata el curso? Estudiar formas inteligentes de organizar la información, de Estudiar formas inteligentes de organizar la información, de forma tal de obtener algoritmos eficientes. . Listas, Pilas, Colas Insertar Árboles Binarios Árboles Generales Borrar Buscar Árboles Generales Heaps Buscar Caminos mínimos Heaps Grafos Caminos mínimos Ordenación Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Estructuras de Datos Algoritmos
  • 52. Las estructuras de datos y sus Las estructuras de datos y sus algoritmos son…. Seguridad Multimedia Computación Gráfica Internet Biología Inteligencia Artificial Gráfica Internet Física Utilizados en todos lados! Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 53. Ejemplo 1: Árbol de carpetas y archivos Ejemplo 1: Árbol de carpetas y archivos Nodos: Carpetas/Archivos Aristas: representan la relación “contiene” Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Aristas: representan la relación “contiene”
  • 54. Ejemplo 2: Prerrequisitos de un curso Ejemplo 2: Prerrequisitos de un curso Nodos: Cursos Aristas: relación de “prerrequisito” Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Aristas: relación de “prerrequisito”
  • 55. Ejemplo 3: Representación de una expresión Ejemplo 3: Representación de una expresión en un compilador Nodos: Operandos/Operadores Aristas: representan las relaciones entre las operaciones Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Aristas: representan las relaciones entre las operaciones
  • 56. Ejemplo 4: Esquema de una red informática Ejemplo 4: Esquema de una red informática Nodos: Equipos Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Nodos: Equipos Aristas: representan las conexiones
  • 57. Ejemplo 5: Mapa de ciudades Ejemplo 5: Mapa de ciudades Nodos: Ciudades Aristas: Rutas Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Aristas: Rutas
  • 58. Estructuras de Datos: Estructuras de Datos: Qué, Cómo y Por qué?  Los programas reciben, procesan y devuelven  Los programas reciben, procesan y devuelven datos  Necesidad de organizar los datos de acuerdo  Necesidad de organizar los datos de acuerdo al problema que vamos a resolver Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 59. Estructuras de Datos: Estructuras de Datos: Qué, Cómo y Por qué?  Los programas reciben, procesan y devuelven  Los programas reciben, procesan y devuelven datos  Necesidad de organizar los datos de acuerdo  Necesidad de organizar los datos de acuerdo al problema que vamos a resolver Las estructuras de datos son formas de organización de los datos Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio organización de los datos
  • 60. Estructuras de Datos: Estructuras de Datos: Qué, Cómo y Por qué?  Un programa depende fundamentalmente de la organización de los datos  cómo se organizan los datos está relacionado con:  cómo se organizan los datos está relacionado con: Implementación de algunas operaciones: pueden Implementación de algunas operaciones: pueden resultar más fácil o más difícil La velocidad del programa: puede aumentar o La velocidad del programa: puede aumentar o disminuir La memoria usada: puede aumentar o disminuir Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio La memoria usada: puede aumentar o disminuir
  • 61. Objetivos del curso respecto de las Objetivos del curso respecto de las Estructuras de Datos  Aprender a implementar las estructuras de datos  Aprender a implementar las estructuras de datos usando abstracción  Estudiar diferentes representaciones e implementaciones para las estructuras de datos implementaciones para las estructuras de datos  Aprender a elegir la “mejor” estructura de datos  Aprender a elegir la “mejor” estructura de datos para cada problema Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 62. Algoritmos y su Análisis Algoritmos y su Análisis  ¿Qué es un algoritmo?  ¿Qué es un algoritmo? Es una secuencia de pasos que resuelven un problema Es independiente del lenguaje de programación Es independiente del lenguaje de programación  Existen varios algoritmos que resuelven correctamente un problema  La elección de un algoritmo particular tiene un enorme  La elección de un algoritmo particular tiene un enorme impacto en el tiempo y la memoria que utiliza La elección de un algoritmo y de la estructura de datos para resolver un problema son interdependientes Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio para resolver un problema son interdependientes
  • 63. Objetivos del curso respecto del Objetivos del curso respecto del Análisis de los Algoritmos  Entender los fundamentos matemáticos necesarios para analizar algoritmos para analizar algoritmos  Aprender a comparar la eficiencia de diferentes  Aprender a comparar la eficiencia de diferentes algoritmos en términos del tiempo de ejecución  Estudiar algunos algoritmos estándares para el manejo de las estructuras de datos y aprender a manejo de las estructuras de datos y aprender a usarlos para resolver nuevos problemas Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 64. Problemas y algoritmos Problemas y algoritmos  Problemas:  Buscar un elemento en un arreglo  Buscar un elemento en un arreglo  Ordenar una lista de elementos  Encontrar el camino mínimo entre dos puntos Encontrar el algoritmo que lo resuelve Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Encontrar el algoritmo que lo resuelve
  • 65. Caso: Buscar un elemento en un Caso: Buscar un elemento en un arreglo El arreglo puede estar: • desordenado • ordenado Si el arreglo está desordenado Si el arreglo está desordenado 64 13 93 97 33 6 43 14 51 84 25 53 95 64 13 93 97 33 6 43 14 51 84 25 53 95 0 1 2 3 4 5 6 7 8 9 10 11 12 Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 66. Caso: Buscar un elemento en un Caso: Buscar un elemento en un arreglo El arreglo puede estar: • desordenado • ordenado Si el arreglo está desordenado Búsqueda secuencial Si el arreglo está desordenado Búsqueda secuencial 64 13 93 97 33 6 43 14 51 84 25 53 95 64 13 93 97 33 6 43 14 51 84 25 53 95 0 1 2 3 4 5 6 7 8 9 10 11 12 Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 67. Algoritmo: Búsqueda secuencial Algoritmo: Búsqueda secuencial public static int seqSearch(int[] a, int key) key) { int index = -1; for (int i = 0; i < N; i++) for (int i = 0; i < N; i++) if (key == a[i]) index = i; return index; return index; } ¿Cuántas comparaciones hace? Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio ¿Cuántas comparaciones hace?
  • 68. Caso: Buscar un elemento en un Caso: Buscar un elemento en un arreglo El arreglo puede estar: • desordenado • desordenado • ordenado Si el arreglo está ordenado Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 69. Caso: Buscar un elemento en un Caso: Buscar un elemento en un arreglo El arreglo puede estar: • desordenado • desordenado • ordenado Búsqueda binaria: Comparo la clave con Si el arreglo está ordenado Búsqueda binaria: Comparo la clave con la entrada del centro • Si es menor, voy hacia la izquierda • Si es mayor, voy hacia la derecha • Si es mayor, voy hacia la derecha • Si es igual, la encontré Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio lo mid hi
  • 70. Algoritmo: Búsqueda binaria Algoritmo: Búsqueda binaria Adivinar número - Búsqueda lineal o binaria Adivinar número - Búsqueda lineal o binaria https://es.khanacademy.org/computing/computer- https://es.khanacademy.org/computing/computer- science/algorithms/intro-to-algorithms/a/a-guessing-game Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 71. Algoritmo: Búsqueda binaria Algoritmo: Búsqueda binaria public static int binarySearch(int[] a, int key) { int lo = 0, hi = a.length-1; int lo = 0, hi = a.length-1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; int mid = lo + (hi - lo) / 2; if (key < a[mid]) hi = mid - 1; else if (key > a[mid]) lo = mid + 1; else return mid; else return mid; } return -1; } } ¿Cuántas comparaciones hace? Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio ¿Cuántas comparaciones hace?
  • 72. ¿Cuántas operaciones hace ¿Cuántas operaciones hace cada algoritmo? N Cantidad de operaciones N Cantidad de operaciones operaciones 1000 1000 2000 2000 operaciones 1000 ~10 2000 ~11 Búsqueda Búsqueda 2000 2000 4000 4000 2000 ~11 4000 ~12 Búsqueda secuencial Búsqueda binaria 8000 8000 16000 16000 8000 ~13 16000 ~14 16000 16000 16000 ~14 Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 73. ¿Cuántas operaciones hace ¿Cuántas operaciones hace cada algoritmo? N Cantidad de operaciones N Cantidad de operaciones operaciones 1000 1000 2000 2000 operaciones 1000 ~10 2000 ~11 Búsqueda Búsqueda 2000 2000 4000 4000 2000 ~11 4000 ~12 Búsqueda secuencial Búsqueda binaria 8000 8000 16000 16000 8000 ~13 16000 ~14 16000 16000 16000 ~14 Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Hace N operaciones Hace log(N) operaciones
  • 74. ¿Cómo medir el tiempo? ¿Cómo medir el tiempo? En forma empírica Se realiza a posteriori En forma teórica Se realiza a priori Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 75. Análisis empírico Análisis empírico Correr el programa para varios tamaños de la entrada y medir el Correr el programa para varios tamaños de la entrada y medir el tiempo. Suponemos que cada comparación tarda 1 seg. N Tiempo (seg) 1000 1000 N Tiempo (seg) 1000 ~10 1000 1000 2000 2000 1000 ~10 2000 ~11 Búsqueda Búsqueda 4000 4000 ~ 1 hs. 4000 ~12 Búsqueda secuencial Búsqueda binaria 8000 8000 ~ 2 hs 16000 16000 ~ 4 hs. 8000 ~13 16000 ~14 Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 76. Análisis de Algoritmos Análisis de Algoritmos Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 77. Cantidad de operaciones de la Cantidad de operaciones de la búsqueda binaria búsqueda binaria Ejercitación https://es.khanacademy.org/computing/computer- science/algorithms/binary-search/e/running-time-of-binary- science/algorithms/binary-search/e/running-time-of-binary- search Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 78. Caso: Buscar un elemento en una Caso: Buscar un elemento en una lista dinámica Si los elementos están almacenados en una lista dinámica La lista puede estar: La lista puede estar: • desordenada • ordenada • ordenada ¿Cómo sería el algoritmo de búsqueda? ¿Cómo sería el algoritmo de búsqueda? 6 primero 10 2 50 6 10 2 50 null Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 79. Caso: Buscar un elemento en una Caso: Buscar un elemento en una lista dinámica Si los elementos están almacenados en una lista dinámica La lista puede estar: La lista puede estar: • desordenada • ordenada • ordenada ¿Cómo sería el algoritmo de búsqueda? ¿Cómo sería el algoritmo de búsqueda? 6 primero 10 2 50 6 10 2 50 null Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 80. Caso: Buscar un elemento en una Caso: Buscar un elemento en una lista dinámica Si los elementos están almacenados en una lista dinámica La lista puede estar: La lista puede estar: • desordenada • ordenada • ordenada ¿Cómo sería el algoritmo de búsqueda? ¿Cuántas ¿Cómo sería el algoritmo de búsqueda? 6 primero 10 2 ¿Cuántas comparaciones hace? 50 6 10 2 hace? 50 null Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 81. Caso: Buscar un elemento en una Caso: Buscar un elemento en una lista dinámica Si los elementos están almacenados en una lista dinámica La lista puede estar: La lista puede estar: • desordenada • ordenada • ordenada ¿Cómo sería el algoritmo de búsqueda? ¿Cuántas ¿Cómo sería el algoritmo de búsqueda? 6 primero 10 2 ¿Cuántas comparaciones hace? 50 6 10 2 hace? 50 null Hace N comparaciones Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Hace N comparaciones
  • 82. Análisis de Algoritmos Análisis de Algoritmos Marco para predecir la performance y comparar algoritmos Desafío: Escribir programas que puedan resolver en forma eficiente problemas con una gran entrada de datos eficiente problemas con una gran entrada de datos Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio
  • 83. Análisis de Algoritmos Análisis de Algoritmos Factores independientes Factores dependientes del Algoritmo independientes del sistema Hardware: CPU, memoria dependientes del sistema Entrada de datos Software: lenguaje, datos lenguaje, compilador, .. Sistema: SO, red, otras aplicaciones Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio aplicaciones
  • 84. Análisis de Algoritmos Análisis de Algoritmos Factores independientes Factores dependientes del Algoritmo independientes del sistema Hardware: CPU, memoria dependientes del sistema Entrada de datos Software: lenguaje, cantidad y datos lenguaje, compilador, .. cantidad y distribución Sistema: SO, red, otras aplicaciones Cómo se comporta el Algoritmo dependiendo Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio aplicaciones Algoritmo dependiendo de la entrada de datos.
  • 85. Análisis de Algoritmos Análisis de Algoritmos Existe un modelo matemático para medir el tiempo Tiempo total: Suma del costo x frecuencia de todas las Suma del costo x frecuencia de todas las operaciones • Es necesario analizar el algoritmo para determinar el conjunto de operaciones operaciones • Costo depende de la máquina, del compilador, del lenguaje • Frecuencia depende del algoritmo y de la entrada Algoritmos y Estructuras de Datos 2021 Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio • Frecuencia depende del algoritmo y de la entrada
  • 86. Algoritmos y Estructuras de Datos 2021 Constructores • Inicialización de Objetos – Constructores - ¿Qué son los Constructores? - Constructor default. - Constructores con argumentos - Sobrecarga de constructores - Cadena de invocación a constructores • Usos y diferencias entre: - this y this() - super y super()
  • 87. Algoritmos y Estructuras de Datos 2021 Constructores Para crear un objeto se utiliza el operador new. La creación e inicialización de un objeto involucra los siguientes pasos: 1. Se aloca espacio para la variable 2. Se aloca espacio para el objeto en la HEAP y se inicializan los atributos con valores por defecto. 3. Se inicializan explícitamente los atributos del objeto. 4. Se ejecuta el constructor (parecido a un método y tiene el mismo nombre de la clase) 5. Se asigna la referencia del nuevo objeto a la variable. null Memoria STACK 0x99f311 Memoria STACK Memoria HEAP auto public class Vehiculo { private String marca; private double precio; . . . } Objeto Vehiculo public class Test { public static void main(String args[]){ Vehiculo auto; auto = new Vehiculo(); } } auto a g r e g a r C o n t a c t o . . . gerMarca() g e t P r e c i o ( ) marca=null precio=0.0 ...
  • 88. Algoritmos y Estructuras de Datos 2021 public class Vehiculo { private String marca; private double precio; public Vehiculo() { } } ¿Qué son los Constructores? Los constructores son piezas de código -sintácticamente similares a los métodos- que permiten definir un estado inicial específico de un objeto en el momento de su creación. Se diferencian de los métodos tradicionales porque: • Deben tener el mismo nombre que la clase. La regla de que el nombre de los métodos debe comenzar con minúscula, no se aplica a los constructores. • No retornan un valor. • Son invocados automáticamente. La inicialización está garantizada: cuando un objeto es creado, se aloca almacenamiento en la memoria HEAP y se invoca al constructor. Vehiculo v = new Vehiculo(); El operador new() se puede utilizar en cualquier lugar del código. NO retorna nada - La expresión new retorna una referencia al objeto creado recientemente, pero el constructor no retorna un valor. - Java siempre llama automáticamente a un constructor cuando crea un objeto (antes de que el objeto sea usado). De esta forma la inicialización del objeto está garantizada.
  • 89. Algoritmos y Estructuras de Datos 2021 public class Vehiculo { private String marca; private double precio; //métodos } Constructor sin argumentos • Si una clase NO tiene constructores, el compilador inserta automáticamente un constructor default, con cuerpo vacío: Cuando se compila public Vehiculo(){ } Cuando se crea un objeto de la clase Vehiculo, con new Vehiculo(), se invocará el constructor por defecto, aún cuando no se encuentre explícitamente en la clase. • Si la clase tiene al menos un constructor, con o sin argumentos, el compilador NO insertará nada. Un constructor sin argumento o constructor Default, es usado para crear un objeto básico.
  • 90. Algoritmos y Estructuras de Datos 2021 Constructores con argumentos En general los constructores son usados para inicializar los valores del objeto que se está creando. ¿Cómo especificar los valores para la inicialización? Los constructores pueden tener parámetros para la inicialización de un objeto. Si este constructor es el único de la clase, el compilador no permitirá crear un objeto Vehiculo de otra manera que no sea usando este constructor . public class Automotores { public static void main(String[] args){ Vehiculo auto1 = new Vehiculo(“CITROEN”, 13500.00); Vehiculo auto2 = new Vehiculo(“HONDA”,12400.50); } } public class Vehiculo { private String marca; private double precio; public Vehiculo(String mar,double pre){ marca = mar; precio = pre; } } public Vehiculo(String marca,double precio) { this.marca = marca; this.precio = precio; } Codificaciones equivalentes
  • 91. Algoritmos y Estructuras de Datos 2021 ¿Qué pasa si se quiere construir un objeto Vehiculo de distintas maneras? Se escriben en la clase más de un constructor sobrecarga de constructores. Sobrecarga de Constructores public class Vehiculo { private String nroPatente=“”; private String propietario=“SinDueño”; public Vehiculo(){ } public Vehiculo(String marca){ this.marca = marca; } public Vehiculo(String marca,double precio){ this.marca = marca; this.precio = precio; } } public class Botanico { public static void main(String[] args){ Vehiculo a1=new Vehiculo(); Vehiculo a2=new Vehiculo(“HONDA”); Vehiculo a3=new Vehiculo(“HONDA”,12300.50); } } La sobrecarga de métodos permite que el mismo nombre de método sea usado con distintos tipos y cantidad de argumentos.
  • 92. Algoritmos y Estructuras de Datos 2021 this() y this Cuando dentro de una clase, hay más de un constructor, se pueden invocar entre ellos para evitar duplicar código. Para hacer esto se puede usar this(), el cual hace una invocación a otro constructor de la misma clase que coincida con la lista de argumentos. this() public class Vehiculo { private String marca; private double precio; public Vehiculo(String marca){ // podría tener más código this.marca = marca; } public Vehiculo(String marca,double precio){ this(marca); this.precio = precio; } Si tenemos 2 objetos de la clase Vehiculo, llamados a1 y a2 e invocamos al método setNroPatente() sobre ambos objetos, ¿cómo sabe el método para que objetos se llama? Vehiculo a1 = new Vehiculo(); Vehiculo a2 = new Vehiculo(); . . . a1.setMarca(“CITROEN”); a2.setMarca(“HONDA”); El compilador agrega como 1º argumento de cada método una referencia al objeto que está siendo manipulado. this // debe estar en la 1º línea public class Vehiculo { private String marca; private String precio; . . . public setMarca(String marca){ this.marca = marca; } }
  • 93. Algoritmos y Estructuras de Datos 2021 ANEXO
  • 94. Algoritmos y Estructuras de Datos 2021 ¿Cómo se construye un objeto? Recorriendo la jerarquía de herencia en forma ascendente e invocando al constructor de la superclase desde cada constructor, en cada nivel de la jerarquía de clases: Cadena de invocación a constructores crear un objeto de tipo Object crear un objeto de tipo Vertebrado crear un objeto de tipo Mamifero crear un objeto de tipo Perro La clase Object La clase Vertebrado La clase Mamifero La clase Perro new Perro() Constructor de Mamífero() En cada constructor de una clase derivada, debe existir una llamada a un constructor de la superclase. Constructor de Vertebrado() Constructor de Object() Estoy listo!
  • 95. Algoritmos y Estructuras de Datos 2021 public class Perro extends Mamifero{ . . public Perro(){ super(); // si no se pone, igual se invoca System.out.println(“Constructor de Perro”); } public void comer(){ } } public class Mamifero extends Vertebrado { public Mamifero(){ super(); // si no se pone, igual se invoca System.out.println(“Constructor de Mamifero”); } public void comer(){ } } El compilador Java, automáticamente invoca en cada constructor de una clase derivada, al constructor nulo de su clase base, si no se invocó ninguno explícitamente. La clase Object La clase Vertebrado La clase Mamifero La clase Perro super() super() super() new Perro() public class Vertebrado { public Vertebrado (){ super(); // si no se pone, igual se invoca System.out.println(“Constructor de Vertebrado”); } } ¿Cuál sería la salida de la ejecución de new Perro()? Cadena de invocación a constructores
  • 96. Algoritmos y Estructuras de Datos 2021 public class Perro extends Mamifero{ . . public Perro(){ System.out.println(“Constructor de Perro”); } public void comer(){ } } super() public class Mamifero extends Vertebrado { public Mamifero(){ System.out.println(“Constructor de Mamifero”); } public void comer(){ } } super() Error!! ¿Qué pasa si Vertebrado tiene un constructor con argumentos y no tiene el constructor sin argumentos (default)? La clase Object La clase Vertebrado La clase Mamifero La clase Perro new Perro() public class Vertebrado { private int cantpatas; public Vertebrado (int i){ cantpatas = c; System.out.println(“Constructor de Vertebrado”); } } super() Desde el constructor de Mamifero se debe invocar a alguno de los constructores existentes en la superclase Vertebrado usando la palabra clave super(…) y la lista de argumentos apropiada. ¿Cómo hacemos? super() super() super() Cadena de invocación a constructores
  • 97. Algoritmos y Estructuras de Datos 2021 public class Vertebrado { private int cantpatas; public Vertebrado(int c){ cantpatas = c; System.out.println(“Constructor de Vertebrado”); } public void comer(){} } public class Perro extends Mamifero{ . . public Perro(){ System.out.println(“Constructor de Perro”); } public void comer(){ } } super() public class Mamifero extends Vertebrado { public Mamifero(){ super(4); System.out.println(“Constructor de Mamifero”); } public void comer(){} } super() Si un constructor no invoca a ningún constructor de la clase base, el compilador inserta la invocación al constructor nulo (super()). Si un constructor invoca explícitamente a un constructor de la superclase, debe hacerlo en la primera línea de dicho constructor. La clase Object La clase Vertebrado La clase Mamifero La clase Perro super(4) super() super() Perro p = new Perro() ¿Qué pasa si Vertebrado tiene un constructor con argumentos y no tiene el constructor sin argumentos (default)? continuación Cadena de invocación a constructores
  • 98. Algoritmos y Estructuras de Datos 2021 super() y super Super() invoca a un constructor de la superclase y debe estar en la primer línea de código del constructor. JAVA garantiza la correcta creación de los objetos ya que los constructores siempre invocan a los constructores de la superclase. De esta manera todo objeto contiene una referencia al objeto de la superclase habilitando la herencia de estado y comportamiento. super() Todos los métodos de instancia disponen de la variable super (además de this), la cual contiene una referencia al objeto padre. La palabra clave super, permite invocar desde la subclase un método de la superclase. super public class Perro extends Mamifero { private String sonido; public Perro(){ super(4); sonido=new String(“guau”); } . . . } se invoca al constructor de Mamifero con argumento de tipo entero. En este ejemplo, el código del constructor Perro() espera hasta que el padre se inicialice para continuar con su código.
  • 99. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Estructura
  • 100. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Código Fuente package tp03.ejercicio1; public class ArbolBinario<T> { private T dato; private ArbolBinario<T> hijoIzquierdo; private ArbolBinario<T> hijoDerecho; public ArbolBinario() { super(); } public ArbolBinario(T dato) { this.dato = dato; } public T getDato() { return dato; } public void setDato(T dato) { this.dato = dato; } public ArbolBinario<T> getHijoIzquierdo() { return this.hijoIzquierdo; } public ArbolBinario<T> getHijoDerecho() { return this.hijoDerecho; } public void agregarHijoIzquierdo(ArbolBinario<T> hijo) { this.hijoIzquierdo = hijo; } public void agregarHijoDerecho(ArbolBinario<T> hijo) { this.hijoDerecho = hijo; } public void eliminarHijoIzquierdo() { this.hijoIzquierdo = null; } public void eliminarHijoDerecho() { this.hijoDerecho = null; } public boolean esVacio() { return (this.esHoja() && this.getDato()==null); } public boolean esHoja() { return (!this.tieneHijoIzquierdo() && !this.tieneHijoDerecho()); } public boolean tieneHijoIzquierdo() { return this.hijoIzquierdo!=null; } public boolean tieneHijoDerecho() { return this.hijoDerecho!=null; } } Constructores Arbol vacío
  • 101. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Creación
  • 102. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Recorridos Preorden Se procesa primero la raíz y luego sus hijos, izquierdo y derecho. 40, 25, 10, 32, 78 Inorden Se procesa el hijo izquierdo, luego la raíz y último el hijo derecho 10, 25, 32, 40, 78 Postorden Se procesan primero los hijos, izquierdo y derecho, y luego la raíz 10, 32, 25, 78, 40 Por niveles Se procesan los nodos teniendo en cuenta sus niveles, primero la raíz, luego los hijos, los hijos de éstos, etc. 40, 25, 78, 10, 32
  • 103. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Arboles Binarios Recorrido PreOrden Se procesa primero la raíz y luego sus hijos, izquierdo y derecho
  • 104. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Arboles Binarios Recorrido PreOrden Qué cambio harias si el método preorden() debe definirse en otra clase diferente al ArbolBinario<T>?
  • 105. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Arboles Binarios Recorrido PreOrden Qué cambio harías para devolver una lista con los elementos de un recorrido en preorden?
  • 106. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Recorrido por Niveles Recorrido implementado en la clase ArbolBinario
  • 107. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Es árbol lleno? public boolean lleno() { ArbolBinario<T> arbol = null; ColaGenerica<ArbolBinario<T>> cola = new ColaGenerica<ArbolBinario<T>>(); boolean lleno = true; cola.encolar( this); int cant_nodos=0; cola.encolar( null); int nivel= 0; while (!cola.esVacia() && lleno) { arbol = cola.desencolar(); if (arbol != null) { System. out.print(arbol.getDatoRaiz()); if (!arbol.getHijoIzquierdo().esvacio()) { cola.encolar(arbol.getHijoIzquierdo()); cant_nodos++; } if (!(arbol.getHijoDerecho().esvacio()) { cola.encolar(arbol.getHijoDerecho()); cant_nodos++; } } else if (!cola.esVacia()) { if (cant_nodos == Math.pow(2, ++nivel)){ cola.encolar( null); cant_nodos=0; System. out.println(); } else lleno=false;} } return lleno; } Dado un árbol binario de altura h, diremos que es lleno si cada nodo interno tiene grado 2 y todas las hojas están en el mismo nivel (h). Implementar un método para determinar si un árbol binario es “lleno” arbol = null cant_nodos = 2 1 null 2 5 cola Nivel/Prof 0 1 2 arbol = cola.desencolar();
  • 108. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Árbol de Expresión / * + + b a c d e Un árbol de expresión es un árbol binario asociado a una expresión aritmética donde: • Nodos internos representan operadores • Nodos externos (hojas) representan operandos
  • 109. Algoritmos y Estructuras de Datos 2021 public ArbolBinario<Character> convertirPostfija(String exp) { char c = null; ArbolBinario<Character> result; PilaGenerica<ArbolBinario<Character>> p = new PilaGenerica<ArbolBinario<Character>>(); for (int i = 0; i < exp.length(); i++) { c = exp.charAt(i); result = new ArbolBinario<Character>(c); if ((c == '+') || (c == '-') || (c == '/') || (c == '*')) { // Es operador result.agregarHijoDerecho(p.desapilar()); result.agregarHijoIzquierdo(p.desapilar ()); } p.apilar(result); } return (p.desapilar()); } Arboles Binarios Convertir expresión posfija en árbol de Expresión ab+c*de+/ / * + + b a c d e Este método convierte una expresión postfija en un ArbolBinario. Puede estar implementado en cualquier clase.
  • 110. Algoritmos y Estructuras de Datos 2021 public ArbolBinario<Character> convertirPrefija(StringBuffer exp) { char c = exp.charAt(0); ArbolBinario<Character> result = new ArbolBinario<Character>(c); if ((c == '+') || (c == '-') || (c == '/') || c == '*') { // es operador result.agregarHijoIzquierdo(this.convertirPrefija(exp.delete(0,1))); result.agregarHijoDerecho(this.convertirPrefija(exp.delete(0,1))); } // es operando return result; } Este método convierte una expresión prefija en un ArbolBinario. Puede estar implementado en cuaquier clase. Arboles Binarios Convertir expresión prefija en árbol de expresión /*+abc+de / * + + b a c d e
  • 111. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Evaluación de un Árbol de Expresión public Integer evaluar(ArbolBinario<Character> arbol) { Character c = arbol.getDato(); // es operador if ((c == '+') || (c == '-') || (c == '/') || c == '*') { int operador_1 = evaluar(arbol.getHijoIzquierdo()); int operador_2 = evaluar(arbol.getHijoDerecho()); switch (c) { case '+': return operador_1 + operador_2; case '-': return operador_1 - operador_2; case '*': return operador_1 * operador_2; case '/': return operador_1 / operador_2; } } // es operando return Integer.parseInt(c.toString()); } Este método evalúa y retorna un número de acuerdo a la expresión aritmética representada por el ArbolBinario que es enviado como parámetro. / * + + 2 1 9 2 1 retorna 9
  • 112. Algoritmos y Estructuras de Datos 2021 Arboles Binarios Árbol de Frecuencia Natural Investigadores de la Universidad de Regensburg, junto con investigadores del área de medicina del Hospital LMU de Munich, han descubierto que los diagnósticos médicos se pueden realizar con mayor precisión y rapidez con la ayuda de árboles de frecuencias naturales (*). Un árbol de frecuencia natural (AFN) es un árbol binario asociado con ocurrencias, donde para todos los nodos que no son hojas, su valor es la suma del valor de sus dos hijos. La imagen muestra un AFN construido a partir 10.000 mamografía efectuadas a distintas pacientes (*) https://medicalxpress.com/news/2021-02-faster-accurate-diagnosis-natural-frequency.html
  • 113. Algoritmos y Estructuras de Datos 2021 public class Frecuencia { private String detalle; private int valor; public Frecuencia(String detalle, int valor) { super(); this.detalle = detalle; this.valor = valor; } public String getDetalle() { return detalle; } public void setDetalle(String detalle) { this.detalle = detalle; } public int getValor() { return valor; } public void setValor(int valor) { this.valor = valor; } public String toString() { return this.getDetalle()+"("+this.getValor()+")"; } } Arboles Binarios Árbol de Frecuencia Natural Debemos codificar un método que dado un árbol binario verificar si se trata de un AFN o no.
  • 114. Algoritmos y Estructuras de Datos 2021 public static boolean esAFN(ArbolBinario<Frecuencia> ab) { if (!ab.esHoja()) { int valor = 0; if (ab.tieneHijoIzquierdo()) { valor = (ab.getHijoIzquierdo().getDato().getValor()); } if (ab.tieneHijoDerecho()) { valor = valor + (ab.getHijoDerecho().getDato().getValor()); } if (ab.getDato().getValor()==valor) { if (ab.tieneHijoIzquierdo()) { if (!esAFN(ab.getHijoIzquierdo())) return false; } if (ab.tieneHijoDerecho()) { if (!esAFN(ab.getHijoDerecho())) return false; } } else return false; } return true; } Arboles Binarios Árbol de Frecuencia Natural - Solución recursiva
  • 115. Algoritmos y Estructuras de Datos 2021 public static boolean esAFN1(ArbolBinario<Frecuencia> a) { ArbolBinario<Frecuencia> arbol = null; ColaGenerica<ArbolBinario<Frecuencia>> cola = new ColaGenerica<ArbolBinario<Frecuencia>>(); boolean sigue = true; cola.encolar(a); while (!cola.esVacia() && sigue) { arbol = cola.desencolar(); int val_padre = 0; int val_hijos = 0; if (arbol != null) { val_padre = arbol.getDato().getValor(); val_hijos = 0; if (arbol.tieneHijoIzquierdo()) { cola.encolar(arbol.getHijoIzquierdo()); val_hijos = arbol.getHijoIzquierdo().getDato().getValor(); } if (arbol.tieneHijoDerecho()) { cola.encolar(arbol.getHijoDerecho()); val_hijos = val_hijos + arbol.getHijoDerecho().getDato().getValor(); } if (!arbol.esHoja() && val_padre != val_hijos) sigue = false; } } return sigue; } Arboles Binarios Árbol de Frecuencia Natural - Solución iterativa
  • 116. Algoritmos y Estructuras de Datos 2021 public static void main(String[] args) { ArbolBinario<Frecuencia> arbolRaizGral = new ArbolBinario<Frecuencia>(new Frecuencia("Mujeres", 10000)); ArbolBinario<Frecuencia> hijoIzquierdoB = new ArbolBinario<Frecuencia>(new Frecuencia("Con Cancer", 100)); hijoIzquierdoB.agregarHijoIzquierdo(new ArbolBinario<Frecuencia>(new Frecuencia("Mamo +", 80))); hijoIzquierdoB.agregarHijoDerecho(new ArbolBinario<Frecuencia>(new Frecuencia("Mamo -", 20))); arbolRaizGral.agregarHijoIzquierdo(hijoIzquierdoB); ArbolBinario<Frecuencia> hijoDerechoB = new ArbolBinario<Frecuencia>(new Frecuencia("Sin Cancer", 9900)); hijoDerechoB.agregarHijoIzquierdo(new ArbolBinario<Frecuencia>(new Frecuencia("Mamo +", 950))); hijoDerechoB.agregarHijoDerecho(new ArbolBinario<Frecuencia>(new Frecuencia("Mamo -", 8950))); arbolRaizGral.agregarHijoDerecho(hijoDerechoB); if (esAFN(arbolRaizGral)) System.out.println("Es AFN"); else System.out.println("No es AFN"); } Arboles Binarios Árbol de Frecuencia Natural - Construcción