Professional Documents
Culture Documents
Contenido
Algoritmos
Caractersticas de los algoritmos
La importancia de los algoritmos
Calculabilidad, Diseo, Complejidad, Verificacin, Terminacin
Complejidad
Recursos computacionales
Tamao de la entrada, operaciones bsicas
Complejidad en el caso mejor, peor y medio
Clases de complejidad y notacin asinttica
Anlisis de algoritmos no recursivos: algoritmos de ordenacin
Anlisis de Algoritmos Recursivos
Resolucin de ecuaciones de recurrencia
El teorema maestro
Algoritmo de bsqueda binaria
Qu es un algoritmo?
Definicin:
Un algoritmo es una secuencia de instrucciones no
ambiguas que resuelven un problema, es decir, que
producen un salida correcta para cualquier entrada
correcta en un tiempo finito.
Nota Histrica: La palabra algoritmo es
de origen rabe y proviene del
matematico Abu Abdullah Muhammad
Bin Musa, quien tom como seudnimo
Al-Khwarizmi (780-850), lugar donde
haba nacido, el estado de Khowarizm,
en la actual repblica de Uzbiekistn.
Problema
Algoritmo 1
Algoritmo 2
Espec. 1
Espec. 2
Programa
Formalizacin
Formalmente, un problema es una funcin
Especificacin en pseudolenguaje
y en Java
Pseudolenguaje
Java
/**
* @param a y b: valores cuyo mcd calculamos
* @return el mcd de a y b mediante el algoritmo de Euclides.
*/
public static int euclides(int a,int b){
if (a<0 || b<0 || (a ==0) && (b==0))
throw new IllegalArgumentException("valores no vlidos");
while(b!=0){
int r = a % b;
a = b;
b = r;
}
return a;
}
Por ejemplo, si a = 60 y b = 24
60 = 2 * 2 * 3 * 5
24 = 2 * 2 * 2 * 3
mcd(60,24) = 2 * 2 * 3 = 12
2.
3.
Problema
Algoritmo
Programa
2.
Algoritmo
Programa
2.
Calculabilidad
3.
Complejidad
4.
Correccin
5.
Podemos probar que un algoritmo calcula las salidas correctas para todas las
entradas posibles?
Terminacin
Introduccin a la Calculabilidad
David Hilbert (1862-1943) crea que toda afirmacin (problema)
descrita matemticamente podra demostrarse (calcularse), si era
cierta, o bien podra probarse su falsedad.
Alan Turing
1912-1954
El teorema de la parada
Enunciado: No existe ningn algoritmo A que tenga como entrada otro
algoritmo B y unos datos D, y que devuelva S, si B(D) termina o No, si
B(D) no termina (tiene un bucle infinito).
Demostracin: Por reduccin al absurdo.
Supongamos que existe A, entonces su comportamiento sera
A(B,D) =
S, si B(D) termina
No, si B(D) no termina
S, si B(B) termina
No, si B(B) no termina
Fin , sii A(B) = No, sii B(B) no termina (tiene un bucle infinito)
Bucle infinito, sii A(B) = S, sii B(B) termina
El teorema de la parada
Enunciado: No existe ningn algoritmo A que tenga como entrada otro
algoritmo B y unos datos D, y que devuelva S, si B(D) termina o No, si
B(D) no termina (tiene un bucle infinito).
Demostracin: (sigue)
Cul es el comportamiento de Malo(Malo)?
Por definicin:
Malo(Malo) =
es decir,
Malo(Malo) = fin, sii Malo(Malo) no termina
Malo(Malo) = Bucle infinito, sii Malo(Malo) termina
Absurdo
Hay que probar que las dos igualdades son siempre ciertas:
Introduccin a la complejidad
tiempo y memoria
Problemas computables
Problemas computables en la prctica
Recursos computacionales
1.
2.
Tamao de la entrada =
nmero de dgitos a multiplicar
Comparando complejidades
Algoritmo escolar
Algoritmo DV
Dado un algoritmo A, la complejidad se establece como una funcin que asocia a cada
entrada del algoritmo su tiempo de ejecucin.
Tamao de la entrada
Tiempo de ejecucin
En muchos casos es fcil decidir cmo medir la entrada de un algoritmo, por ejemplo:
La dimensin n de la matriz
El nmero de elementos de la matriz n*n
o
o
o
0
La base de los
logaritmos y de las
exponenciales no es
relevante
complejidad
lineal
complejidad
cuadrtica
Complejidad
exponencial
10
Clases de complejidad y
notacin asinttica: O(n)
Clases de complejidad y
notacin asinttica: O(n)
Clases de complejidad y
notacin asinttica: (n)
Clases de complejidad y
notacin asinttica: (n)
Clases de complejidad y
notacin asinttica: (n)
Clases de complejidad y
notacin asinttica: (n)