Académique Documents
Professionnel Documents
Culture Documents
Metodologas para el anlisis de algoritmos Notacin asinttica Elementos matemticos Otras tcnicas de anlisis
1
- startTime;
n
50 100
- startTime) / counter;
6
Pseudocdigo
Pseudocdigo es una descripcin de un algoritmo ms estructurada que la verbal pero menos formal que la de un lenguaje de programacin. Ejemplo: hallar el elemento mayor de un array. Algorithm arrayMax(A, n): Input: Un array A que almacena n enteros. Output: El mximo elemento en A. currentMax A[0] for i 1 to n -1 do if currentMax < A[i] then currentMax A[i] return currentMax Pseudocdigo es la notacin preferida para describir algoritmos. 9
Qu es pseudocdigo
Una mezcla de lenguaje natural y conceptos de programacin de lato nivel que describen las proncipales ideas que estn en una implementacin genrica de una estructura de datos o algoritmo. -Expresiones: usa smbolos matemticos standard para describir expresiones numricas y booleanas
-usa for assignment (= in Java) -usa = for the equality relationship (== in Java)
-Algorithm nombre(param1, param2) - decision structures: if ... then ... [else ... ] - while-loops: while ... do - repeat-loops: repeat ... until ... - for-loop: for ... do - array indexing: A[i] - llamadas: - returns: object method(args) return value
-Mtodos:
10
Anlisis de algoritmos
Operaciones Primitivas: se pueden identificar en el pseudocdigo instrucciones de bajo nivel independientes del lenguaje de programacin. Ejemplos: llamar un mtodo y retornar de un mtodo operaciones aritmticas (e.g. suma) comparacin de dos nmeros, etc. Inspeccionando el pseudocdigo se puede contar el nmero de operaciones primitivas ejecutadas por un algoritmo.
11
Ejemplo de conteo
Algorithm arrayMax(A, n): Input: Un array A que almacena n enteros. Output: El mximo elemento en A. currentMax A[0] 2 for i 1 to n -1 do 1 n if currentMax < A[i] then currentMax A[i] 4(n-1) | 6(n-1) return currentMax 1 t(n) = 2 + 1 + n +4(n-1) + 1 = 5n (mnimo) = 2 + 1 + n +6(n-1) + 1 = 7n - 2 (mximo)
12
Notacin asinttica
Objetivo: simplificar el anlisis eliminando la informacin innecesaria (como redondeo 1,000,0011,000,000) Queremos decir de manera formal 3n 2 n2 Notacin O-grande (Big-Oh): dadas las funciones f(n) and g(n), decimos que f(n) es O(g(n) ) si y solo si hay constantes positivas c y n0 tal que f(n) c g(n) para n n0
13
c g(n) = 4n
g(n) = n n 14
15
Notacin asinttica
Nota: Aun cuando es correcto decir que 7n - 3 es
O(n3), es mejor decir 7n - 3 es O(n), esto es, se debe hacer la aproximacin lo ms cerca posible
Regla simple: Eliminar los trminos de bajo orden y las constantes 7n-3 es O(n) 8n2log n + 5n2 + n es O(n2log n)
16
Alternativos de Big-Oh (f(n)): Big Omega-- cota inferior asinttica (f(n)): Big Theta-- cota promedio asinttica
17
Tiempo de ejecucin
Usar la notacin Big-Oh para expresar el nmero de operaciones primitivas ejecutadas como funcin del tamao de entrada. Ejemplo: decimos que el algoritmo arrayMax se ejecuta en tiempo O(n). Comparacin de tiempos de ejecucin asintticos - un algoritmo que corre en tiempo O(n) es mejor que uno que corre en tiempo O(n2) - de forma similar, O(log n) es mejor que O(n) - jerarqua de funciones: log n << n << n2 << n3 << 2n Cuidado! Con los factores constantes muy grandes. Un algoritmo que corre en tiempo 1,000,000 n todava es O(n) pero puede ser menor eficiente para un conjunto de datos que uno que corre en tiempo 2n2, que es O(n2) 18
A[i ] =
j =0
X [ j]
i = 0,..., n 1
Anlisis: O(n2)
19
Algorithm prefixAverages2(X): Input: Array X de nmeros de n-elementos. Output: Array A de nmeros de n -elementos tal que A[i] es el promedio de los elementos X[0], ... , X[i]. Sea A un array de n nmeros. s 0 for i 0 to n do s s + X[i] A[i] s/(i+ 1) return array A
Anlisis: O(n)
20
Complejidad en la prctica
Considerando 109 instrucciones/segundo
n
1000
n
1mic
nlogn n2
10mic 1milli
n3
1sec
n
1000
10
13
n
283
17min
10000 106
10mic
130mic
100milli
17min
10000
116 days
1milli
20milli
17min
32years
10^6
??????
21
Elementos matemticos
Sumatorios y series Logaritmos y exponentes propiedades de logaritmos:
logb(xy) = logbx + logby logbxa = alogbx logb (x/y) = logbx - logby logba= logxa/logxb
propiedades de exponenciales: a(b+c) = aba c abc = (ab)c ab /ac = a(b-c) b = a logab bc = a c*logab Funciones especiales Floor: x = el mayor entero x Ceiling: x = el menor entero x 23
Elementos matemticos
Tcnicas de justificacin (demostracin) Ejemplo y contraejemplo Contrapositivo y Contradiccin Induccin Invariantes de bucle Probabilidades (algoritmos que usan random o anlisis de rendimiento promedio de un algoritmo)
24
Otras tcnicas
Amortizacin Mtodo contable Funciones potenciales Experimentacin
Configuracin Seleccin de la cuestin Decisin de lo que va a medir (Referencias a memoria, Comparaciones, Operaciones aritmticas) Generacin de los datos de prueba Codificacin de la solucin y realizacin del experimento
25