Anda di halaman 1dari 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

2.1 Objetivos en la eleccin de un algoritmo a) Qu el algoritmo sea fcil de entender, codificar y depurar. b) Qu el algoritmo use eficientemente los recursos de la computadora y en especial que se ejecute con la mayor rapidez. 2.1.1 Anlisis de Algoritmos vs. Anlisis Emprico Una vez que se ha definido un algoritmo para resolver un problema y se ha probado que es correcto, el siguiente paso es determinar la cantidad de recursos tales como tiempo y espacio que el algoritmo requerir para su aplicacin. La determinacin del tiempo de ejecucin puede hacerse mediante anlisis emprico o con anlisis de algoritmos. Anlisis emprico. La comparacin de dos o ms algoritmos se lleva a cabo ejecutndolos, por lo que requiere que ambos algoritmos esten correctamente implementados. Determina el uso de recursos y tiempo requerido en la misma mquina, con los mismos datos y el mismo ambiente. Por lo tanto es muy importante la seleccin de datos de prueba, estos pueden ser aleatorios, datos reales o datos riesgosos. El cdigo puede ejecutarse a diferentes velocidades dependiendo de la carga del sistema.

Anlisis de Algoritmos El anlisis matemtico es ms informativo y barato, pero puede dificultarse si no se conocen todas las frmulas matemticas. El cdigo de programacin de alto nivel podra no reflejar correctamente la ejecucin en trminos de lenguaje mquina. En ocasiones la optimizacin con la que se haya configurado el compilador puede afectar el cdigo ejecutable. Identifica las operaciones abstractas en las cuales el algoritmo est basado y separa el anlisis de la implementacin. Identifica los datos para el mejor caso, el caso promedio y el peor de los casos.

2.1.2 Tiempo de Ejecucin El tiempo de ejecucin de un algoritmo es una funcin que mide el nmero de operaciones (elementales o significativas) que realiza el algoritmo para un tamao de entrada dado. El tiempo de ejecucin de un algoritmo es, por tanto, funcin del tamao de entrada. El valor exacto de esta funcin depende de muchos factores, tales como velocidad de la mquina, la calidad del compilador, y en algunos casos, la calidad del programa. Por ejemplo: para un mismo procesador efectuar el producto de dos nmeros es mucho ms lento si los nmeros son de tipo real que si son enteros. Con mucha frecuencia, el costo de un algoritmo depende no solo del tamao de la entrada sino de los datos en particular. Se presentan tres posibles situaciones: a) Tsup(n): costo del peor caso, el costo mximo del algoritmo. b) Tinf(n): costo del mejor caso, el costo mnimo del algoritmo. c) Tmed(n): costo del caso promedio.

Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007

Pgina 1 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

2.1.3 Pseudocdigo. Pseudocdigo es una herramienta algortmica que mezcla el lenguaje natural y las construcciones de programacin de alto nivel, para describir las ideas bsicas de una implementacin genrica de un algoritmo. No hay reglas que determinen que es o no pseudocdigo, ya que vara de un programador a otro. El objetivo del pseudocdigo es que el programador se concentre en la lgica para solucionar el problema y no en la sintaxis de un lenguaje de programacin. 2.1.3.1 Reglas del Pseudocdigo Tipos de datos Numrico: Entero y Real. Lgico Caracter Cadenas
Operadores Aritmticos Operadores de Relacin Operadores de Lgicos

* / ^ + mod div

Menos Unitario Multiplicacin Divisin Real Exponenciacin Adicin Resta Mdulo Divisin Entera

= <> < > <= >=

Igual Distinto Menor que Mayor que Menor o igual que Mayor o igual que

no Y O O_X eqv imp

negacin lgica And Or O exclusiva equivalencia Implicacin

Jerarqua de los Operandos () ^ no *,/,div, mod, Y +,-,O, O_X =,<,>,<>,>=,<= Parntesis Exponenciacin Operador Unario Operadores Multiplicativos Operadores Aditivos Operadores Relacionales

Expresiones: se usan smbolos matemticos normales para expresiones numricas y booleanas. Asignacin: se usa la flecha a la izquierda. Por Ejemplo, A0. Declaraciones de mtodo: nombre algoritmo (parmetro1, parmetro2, ..., parmetro n) Estructura de decisin: if condicin then acciones [else acciones para falso]. Se hace sangra para indicar que acciones se deben incluir para cierto y cules se deben incluir para falso. Ciclos while: while condicin do acciones. Se utiliza indentacin para indicar qu acciones incluye en el ciclo. Ciclos repeat: repeat acciones until condicin. La sangra marca el inicio y final del bloque de acciones que ejecuta el ciclo. Ciclo for: for incremento to condicin do acciones. Se usa sangra para indicar qu acciones deben ser las del ciclo.
Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007 Pgina 2 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

ndices de Arreglo: A[i] representa la i-sima celda del arreglo A. Las celdas de un arreglo A de n celdas se identifican con los ndices A[0] hasta A[n-1]. Llamadas de mtodo: objeto.mtodo(args); donde objeto es opcional si se sobreentiende qu objeto hace la llamada. Retornos de mtodo: return valor. Devuelve el valor especificado al mtodo que hizo la la llamada. Es conveniente comenzar un algoritmo con una breve explicacin de sus entradas y salidas, lo qu hace y las ideas principales que se usan en l. 2.1.3.2 Ejemplo de Pseudocdigo /*Bsqueda de un elemento*/ int busqueda (int vector[],int n, int b) { int i, pos; i=0; pos=-1; do { if (vector[i]==b) pos=i; i++; }while(pos==-1 &&i<n); return (pos); } Algoritmo busqueda (vector,n,b) Entradas: vector de n enteros, n tamao del vector b elemento a buscar Salida: La posicin de b en el vector. i0 pos-1 repeat if vector[i]=b then posi ii+1 until pos =-1 Y i<n return pos

2.2 Conceptos Matemticos Bsicos 2.2.1 Leyes de los Exponentes

1)

xa = x a b xb

2) x a = x a . b 3) x n + x n = 2 x n
4)2 n + 2 n = 2(2 )
n

( )

2.2.2 Logaritmos El logaritmo base b de N es un valor A tal que b elevado a N es igual a A. En computacin cuando la base se omite, por omisin es 2. Propiedades de los Logaritmos

1) log b ac = logb a + logb C a 2) log b = log b a log b c c 3) log b a c = c log b a

4) log b a =

log c a log c b

5)b logc a = a log c b


Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007 Pgina 3 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

2.2.3 Series
n

1) 2 i = 2 n +1 1
i =0 n

a n +1 1 a 1 i =0 n 1 para 0>a>1 3) a i = 1 a i =0 n n(n + 1) 4) i = 2 i =1 n n(n + 1)(2n + 1) 5) i 2 = 6 i =1 2) a i =


n

6) i k =
i =1

n k +1 ,k 1 k +1

N 1 7) log e N i =1 i

8) f (n ) = nf (n )
i =1 N

9) f (i ) = f (i ) f (i )
i = n0 i =1 i =1

n0 1

Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007

Pgina 4 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

2.3 Recursin El concepto de recursin es fundamental en Matemticas y Ciencias de la Computacin. La definicin 3. ms simple es que un programa recursivo es aquel que se invoca a s mismo. La recursin se utiliza porque permite expresar algoritmos complejos en forma compacta y elegante sin reducir la eficiencia. Un algoritmo recursivo es aquel que resuelve un problema resolviendo una o ms instancias menores que el mismo problema. Los algoritmos recursivos se implementan con mtodos recursivos.

Reglas de la recursin 1) 2) 3) 4) Caso base. Siempre debe existir casos base que se resuelven sin hacer uso de la recursin. Progreso. Cualquier llamada recursiva debe progresar hacia un caso base. Diseo. Asumir que toda llamada recursiva interna funciona correctamente. Regla de Inters compuesto: Evitar duplicar el trabajo resolvindo la misma instancia de un problema en llamadas recursivas compuestas.

Ejemplo 1: Clculo del n nmero de la serie fibonacci int fibonacci (int n) { if (n<=1) return 1; // Caso Base else return fibonacci(n-1)+ fibonacci(n-2); } Ejemplo 2: Evaluacin del factorial de n public static long factorial(int n) { if (n<=1) return 1; // Caso Base else return n* factorial(n-1); } 2.3 Fundamentos Matemticos del Anlisis de Algoritmos El anlisis experimental, permite conocer el tiempo de ejecucin exacto de un algoritmo, pero es muy complicado, porque requiere el manejo de lenguaje de bajo nivel del programa generado al compilar un cdigo y del ambiente en que se ejecuta dicho programa. As que, en vez de lo anterior, se hace el anlisis en forma directa en el programa de alto nivel o en el pseudocdigo. Se definen una serie de operaciones primitivas de alto nivel. Entre ellas se cuentan: Asignacin de un valor a una variable. Llamada a un mtodo. Ejecucin de una operacin aritmtica. Comparaciones. Poner ndices a un arreglo. Seguir referencia de objeto. Regresar de un mtodo.

[3] Algorithms in Java. Mark Allen Weiss

Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007

Pgina 5 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

En vez de determinar el tiempo exacto de ejecucin de cada operacin primitiva, slo se contarn cuntas operaciones primitivas se ejecutan y esta cantidad se usar como estimado, en alto nivel, del tiempo de ejecucin del algoritmo. En un anlisis de algoritmos es til enfocarse en la tasa de crecimiento del tiempo de ejecucin, en funcin del tamao n de la entrada, adoptando un mtodo de panormica y no detenerse en los pequeos detalles. Se formaliza este mtodo de analizar estructuras de datos y algoritmos usando una notacin matemtica para funciones, que no tiene en cuenta a los factores constantes. Funciones de Crecimiento Tpicas C Constante La mayora de las instrucciones se ejecutan una o cuando mucho unas cuantas veces. Si todas las instrucciones de un programa tienen esta propiedad, decimos que el tiempo de ejecucin del programa es constante. Esta funcin de crecimiento, es deseable, pero difcil de conseguir Logartmicas Cuando el tiempo de ejecucin de un programa es logartmico el programa es ligeramente ms rpido que el crecimiento de N. Esta funcin de crecimiento se presenta en programas que solucionan un problema transformndolo en una serie de pequeos problemas, esto es, dividen el tamao del problema en una fraccin constante en cada iteracin. Para nuestro inters consideraremos el tiempo de ejecucin menor al de una constante grande. La base del logaritmo cambia la constante, pero no por mucho, por ejemplo, cuando N=1000, log10N=3 y log2N=9.96; cuando N=1000000 log10N=6 y log2N=19.93. Se observa que cada que N se duplica, el log N se incrementa 2 en una constante, pero no se duplica hasta que N es N . Lineal El tiempo de ejecucin lineal, generalmente se encuentra cuando cada elemento de entrada requiere una pequea parte de procesamiento. Cuando N es 10000 el tiempo de ejecucin tambin. Cuando N se duplica el tiempo tambin se duplica. Esta situacin es ptima para un algoritmo que debe procesar N entradas. NlogN El tiempo de ejecucin NlogN se presenta cuando los algoritmos solucionan un problema dividindolo en pequeos problemas, los resuelve en forma independiente y luego combina las soluciones. Cuando N es 1,000,000 NlogN es 20,000,000. Cuando N se duplica el tiempo aumenta un poco ms del doble. Esta funcin de crecimiento es tpica de los algoritmos divide y vencers. cuadrtica Cuando el tiempo de ejecucin de un algoritmo es cuadrtico, el algoritmo slo es prctico para problemas relativamente pequeos. Esta funcin de crecimiento surge en algoritmos que procesan todos los pares de datos, por ejemplo, en ciclos anidados. Cuando N=1000 el tiempo de ejecucin es 100,000. Cuando N se duplica el tiempo de ejecucin se cuadriplica. Un ejemplo donde se observa esta funcin de crecimiento es el peor caso de Quicksort. Cbica Un algoritmo que procesa ternas de datos tiene tiempos cbicos, por ejemplo la multiplicacin de matrices implementada en ciclos triples. El uso de estos algoritmos es prctico slo en problemas pequeos. Cuando N es 100 el tiempo de ejecucin es 1,000,000. Al duplicar N el tiempo de ejecucin se 3 incrementa 8 veces (2 ). Exponencial Pocos algoritmos con tiempo de ejecucin exponencial son apropiados para su uso, aunque surgen naturalmente como soluciones forzadas. Por ejemplo, cuando N es 20, el tiempo de ejecucin es 1000000. Cuando N se duplica el tiempo de ejecucin se eleva al cuadrado.

log N

NlogN

Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007

Pgina 6 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

2.3.1 Notacin Asinttica O (<=) Asntota: Las asntotas son rectas a las cuales una funcin se aproxima indefinidamente, cuando x o f(x) tienden al infinito. Para expresar los lmites de complejidad de un algoritmo se usa una notacin asinttica. La mas comn es la O (big Oh). La Notacin O es un recurso matemtico que permite suprimir los detalles en el anlisis de algoritmos. Sea f(n) y t(n) funciones que representan como enteros no negativos a nmeros reales. Se dice que:

T (n ) = ( f (n )) si existen constantes C y n0 tal que T (n ) a + cf (n ) cuando n > n0


La variable a representa el costo de cualquier tarea o labor cotidiana. c es una constante de multiplicacin que representa el costo en unidades de ejecucin de una operacin fundamental. Esta definicin se lee T(n) es O de f(n). De otra forma, la complejidad de una funcin t(n) est limitada por la funcin f(n); es decir, el nmero mximo de operaciones fundamentales ejecutadas por T(n) no ser mayor que f(n). La notacin O es similar al menor o igual, cuando estamos refirindonos a tasas de crecimiento. En la prctica ignoramos los efectos de a, c y cualquier operacin de poca importancia cuando comparamos complejidades. La trascendencia global de a tiende a ser insignificante conforme el tamao del conjunto de la informacin se incrementa y el costo de una operacin crtica (c) debe ser ms o menos el mismo para algoritmos de clase semejante. La notacin Big-Oh tiene tres propsitos: 1. Compensar el error que se comete al ignorar trminos pequeos en una frmula matemtica. 2. Compensar el error que se comete al ignorar partes del programa que contribuye en una pequea cantidad de tiempo. 3. Permite clasificar algoritmos de acuerdo al lmite superior de su tiempo de ejecucin.

2.3.1.1 Reglas de la Notacin O 1) Si

T1 (n ) = ( f (n )) y T2 (n ) = ( g (n )) , entonces:

a )T1 (n ) + T2 (n ) = ( f (n) + g (n))

b)T1 (n ).T2 (n ) = ( f (n).g (n))


2) Si T(x) es un polinomio de grado n, entonces 3)

T (x ) = x n

( )

log k n = (n ) para cualquier constante k

No se considera apropiado incluir factores constantes y trminos de orden inferior en la notacin O. Por ejemplo, no es correcto decir O(4n+6n), bastar con indicar O(n).

Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007

Pgina 7 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

2.3.2 Notacin Omega (>=) Existen otras notaciones que nos permiten hacer comparaciones entre funciones. Una de ellas es la notacin Omega T (n ) = (F (n )) , esta indica que la tasa de crecimiento de T(n) es mayor o igual que la de F(n). 2.3.3 Notacin Theta (=) La notacin Theta T (n ) = (F (n )) , esta indica que la tasa de crecimiento de T(n) es igual que la de F(n). Cuando utilizamos la notacin theta estamos proporcionando no solamente un lmite superior del tiempo de ejecucin, sino que garantizamos que el anlisis que nos lleva a este lmite superior es lo ms ajustado posible.

2.4 Modelo para el anlisis de algoritmos El modelo para el anlisis de algoritmos es una computadora normal, en la cual las instrucciones se ejecutan secuencialmente. Esta tiene el tpico conjunto de instrucciones: Asignacin, comparacin, suma, etc. El tiempo de ejecucin de cada instruccin ser una unidad de tiempo. Tambin se asume una memoria infinita.

2.5 Conteo de Operaciones primitivas para el Anlisis de Algoritmos 1) 2) 3) 4) 5) 6) El acceso a un arreglo a travs de un ndice contar como una operacin. La asignacin de un valor a una variable tiene un tiempo de ejecucin de 1. La inicializacin de un contador tiene valor de 1. La comparacin de la condicin de salida de un ciclo cuenta como una unidad. El regreso de valores de una funcin o mtodo tiene un peso de 1. El tiempo de ejecucin de un ciclo es el tiempo de ejecucin de las instrucciones dentro del ciclo, multiplicado por el nmero de iteraciones. 7) El tiempo de ejecucin de las instrucciones dentro de un grupo de ciclos anidados es el tiempo de ejecucin de las instrucciones multiplicado por el tamao de todos los ciclos. 8) Los enunciados consecutivos solo se suman. 9) El tiempo de ejecucin de una instruccin if-else es el tiempo de la condicin mas el tiempo de la parte verdadera o falsa que requiera mayor tiempo de ejecucin.

Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007

Pgina 8 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

Ejemplo 1: int encontrarMayor(int arreglo [], int n) {int mayor, i; mayor=arreglo[0]; // 2 for (i=0;i<n;i++) //1; 1*n; 2*n-1 if (mayor<arreglo[i]) //2 mayor = arreglo[i]; //2 return(mayor); }

Anlisis para el Peor caso


n

O
por lo tanto se dice que es O(n)

2+1+n+

6 +1
i =1 n

= 2+1+n +1 +6n +1 = 7n+5

Anlisis para el Mejor caso 2+1+n+

4 +1
i =1

= 2+1+ n+1 +4n+1 = 5 n+ 5 por lo tanto se dice que es (n)

Ejemplo 2: int encontrarMayor(int arreglo [], int n) {int mayor, i; mayor=arreglo[0]; // 2 for (i=1;i<n;i++) //1; 1*n; 2*n-1 if (mayor<arreglo[i]) //2 mayor = arreglo[i]; //2 return(mayor); }

Anlisis para el Peor caso


n 1

O
7n-2 por lo tanto se dice que es O(n)

2+1+n+

6 +1
i =1 n 1

= 2+1+n+6(n-1)+1 = 2+1+n+6n-6+1 =

Anlisis Mejor caso 2+1+n+

4 +1
i =1

= 2+1+n+4(n-1)+1 = 2 +1+n+4n-4+1 =

5 n por lo tanto se dice que es (n)

2.6 Medidas Significativas El conteo de las operaciones se puede hacer usando diferentes medidas significativas, estas son: a) b) c) d) Nmero de Asignaciones Totales Nmero de Operaciones Aritmticas Nmero de Accesos al arreglo. Nmero de Operaciones Elementales.

Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007

Pgina 9 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

2.6.1 Ejemplo Dado el siguiente algoritmo que suma los elementos de una matriz cuadrada de tamao n. suma=0; i=0; while (i<n) { j=0; while(j<n) { suma=suma+matriz[i][j]; j++; } i++; } a) El anlisis para el peor de los casos considerando nmero de asignaciones totales es:
n i =1 n n

2 + 2 + 2 = 2 + 2n + 2n 2 por lo tanto el algoritmo es O(n)


i =1 j =1 n n n

b) Tomando como medida significativa el nmero de operaciones aritmticas el algoritmo tiene un tiempo de ejecucin O(n).

1 + 2 = n + 2n 2
i =1 i =1 j =1 n n 2

c) Si se toma como medida significativa el nmero de accesos al arreglo: tiempo de ejecucin del algoritmo es O(n)

1 = n
i =1 j =1

entonces el

d) Tomando como medida significativa el nmero de operaciones elementales


n i =1 n j =1

2 + n + 1 + (1 + n + 1 + 5 + 2) =
n

3 + n + ( 2 + n + 5 + 2) =
i =1

3 + n + 2n + n 2 + 5n 2 + 2n 6n 2 + 5n + 3
entonces el algoritmo tiene un tiempo de ejecucin O(n).

Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007

Pgina 10 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

2.6.2 Ejercicios. En cada ejercicio encuentre el tiempo de ejecucin para el peor de los casos considerando las operaciones significativas. 1) for (i=1;i<=n;i++) x++;

2) for (i=1;i<=n;i++) for (j=1;j<=n;j++) for (k=1;k<=n;k++) x++; 3) i=1; do { x++; i=i+2; } while(i<=n); 4) for (i=1;i<=n;i++) for (j=1;j<=n;j++) x++;

5)

x=1; while(x<N) x=2*x;

Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007

Pgina 11 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

void main() {int N=20,i,j,k,suma=0; clrscr(); for(i=1;i<=N;i++) for(j=i;j<=N;j++) for(k=j;k<=N;k++) suma++; }


N N j N N

1
i =1 j =i k = i N N

j i + 1
i =1 j =i
n

considerando que 1+2+3+ +(N-i+1) entonces lo anterior se puede escribir

N i + 1 aplicando
i =1 j =i N

i =
i =1

n( n + 1) 2

i =1

( N i + 1)( N i + 1 + 1) N ( N i + 1)( N i + 2) = 2 2 i =1
=

1 N ( N i + 1)( N i + 2) 2 i =1

1 N 2 N iN + 2 N iN + i 2 2i + N i + 2 2 i =1
=

1 N 2 N 2iN + 3N + i 2 3i + 2 2 i =1

1 N 1 N ( N 2 + 3 N + 2) + (i 2 2iN 3i ) 2 i =1 2 i =1
n

N 1 N 1 N 1 ( N 2 + 3 N + 2) + i 2 (2 N + 3) i Aplicando 2 i =1 2 i =1 2 i =1

i =
i =1

n( n + 1) y 2

i
i =1

n( n + 1)(2n + 1) 6

1 1 N ( N + 1)(2 N + 1) 1 ( N )( N + 1) N ( N 2 + 3 N + 2) + (2 N + 3) 2 2 6 2 2 1 3 1 1 N + 3N 2 + 2 N + N 2 + N (2 N + 1) (2 N + 3) N 2 + N 2 12 4

( ( (

) ) )

( ( (

) )

1 3 1 1 N + 3N 2 + 2 N + 2 N 3 + N 2 + 2 N 2 + N 2 N 3 + 2 N 2 + 3N 2 + 3N 2 12 4

1 3 1 1 N + 3N 2 + 2 N + 2 N 3 + 3N 2 + N 2 N 3 + 5 N 2 + 3N 2 12 4

6 N 3 + 18 N 2 + 12 N + 2 N 3 + 3 N 2 + N 6 N 3 15 N 2 9 N 12 3 2 3 2N + 6N + 4N N + 3N 2 + 2 N = = 6 12
Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007 Pgina 12 de 13

Algoritmos y Estructuras de Datos

Unidad II Fundamentos del Anlisis de Algoritmos

Prcticas para esta Unidad 1) Aplicando el concepto de recursividad encontrar el mximo comn divisor de dos numero enteros positivos a y b , segn los siguientes criterios: si a>b entonces mcb(a-b,b) si a<b entonces mcb(a,b-a) a=b 2) Dado un nmero entero no negativo implementar una funcin recursiva para convertirlo a binario.

Ing. Alma Leticia Palacios Guerrero D:\lety\algoritmos y estructura de datos\Unidad II Fundamentos del Anlisis de Algoritmos.doc Fecha de Actualizacin: 21/02/2007

Pgina 13 de 13

Anda mungkin juga menyukai