MEDICIÓN DE TIEMPO EN ALGORITMOS DE PROGRAMACIÓN

JULIÁN CRUZ
ANDRÉS GIOVANNI LARA COLLAZOS

CORPORACIÓN UNIVERSITARIA AUTÓNOMA DEL CAUCA
FACULTAD DE INGENIERÍA
INGENIERÍA DE SISTEMAS
POPAYÁN
MARZO
2013

MEDICIÓN DE TIEMPO EN ALGORITMOS DE PROGRAMACIÓN

INFORME DE LABORATORIO

JULIÁN CRUZ
ANDRÉS GIOVANNI LARA COLLAZOS

PRESENTADO A: DANIEL RODRIGO ORTEGA ALEGRÍA

CORPORACIÓN UNIVERSITARIA AUTÓNOMA DEL CAUCA
FACULTAD DE INGENIERÍA
INGENIERÍA DE SISTEMAS
POPAYÁN
MARZO
2013

Índice de contenido
1. Introducción........................................................................................................................4
2. Lenguaje de programación..................................................................................................5
3. Requisitos del sistema.........................................................................................................6
4. Método para medición de tiempo........................................................................................6
5. Serie Fibonacci....................................................................................................................7
5.1 Código..........................................................................................................................7
5.2 Medición de tiempo......................................................................................................7
5.3 Peores tiempos..............................................................................................................7
5.4 Mejores tiempos...........................................................................................................8
5.5 Media y Desviación Estándar.......................................................................................8
5.6 Eficiencia del algoritmo...............................................................................................8
6. Factores primos...................................................................................................................9
6.1 Código..........................................................................................................................9
6.2 Medición de tiempo......................................................................................................9
6.3 Peores tiempos............................................................................................................10
6.4 Mejores tiempos.........................................................................................................10
6.5 Media y Desviación Estándar.....................................................................................10
6.6 Eficiencia del algoritmo.............................................................................................10
7. Derivada............................................................................................................................11
7.1 Código........................................................................................................................11
7.2 Medición de tiempo....................................................................................................12
7.3 Peores tiempos............................................................................................................12
7.4 Mejores tiempos.........................................................................................................13
7.5 Media y Desviación Estándar.....................................................................................13
7.6 Eficiencia del algoritmo.............................................................................................13
8. Serie 1................................................................................................................................14
8.1 Código........................................................................................................................14
8.2 Medición de tiempo....................................................................................................14
8.3 Eficiencia del algoritmo.............................................................................................15
9. Serie...................................................................................................................................16
9.1 Código........................................................................................................................16
9.2 Medición de tiempo....................................................................................................16
9.3 Eficiencia del algoritmo.............................................................................................16

1. Introducción
El Análisis de algoritmos computacionales, es muy importante para nuestro
entorno de sistemas, dado que es una parte importante para entender el
cómo funcionan las cosas en los programas avanzados.
Con este trabajo, queremos profundizar en cuestión de análisis de algunos
algoritmos matemáticos básicos y usando como herramienta la recursividad y
el lenguaje PHP.

1

2. Lenguaje de programación
En este caso usaremos como lenguaje de programación PHP, dado que es
sencillo de usar y fácil de portar.

3. Requisitos del sistema

4. Método para medición de tiempo
Se usará el siguiente código para medir el tiempo de ejecución de cada Script
en PHP
// Codigo a insertar al principio de la web
function getTiempo() {
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$TiempoInicial = getTiempo();

//Código a insertar al final de la web
$TiempoFinal = getTiempo();

2

$Tiempo = $TiempoFinal - $TiempoInicial;
$Tiempo = round($Tiempo,6);
echo "Esta web ha cargado en $Tiempo segundos.";

5. Serie Fibonacci
Realizar un algoritmo recursivo para el cálculo del n-èsimo numero de la serie
Fibonacci, Variable de entrada: n.simo termino a calcular. Una vez se tengan
generados los términos, se tendrá una variable de entrada, la cual va a solicitar
un término cualquiera, de los términos anteriormente generados.
Variable de entrada: posición de un término cualquiera.

5.1 Código
function fibo($n){
if($n==1) return 1; //0 si n=0
if($n==0) return 0; //1 si n=1
return fibo($n-1) + fibo($n-2);
}

5.2 Medición de tiempo
Número

Tiempo

5

7.1E-5 segundos.

10

9.1E-5 segundos.

15

0.001017 segundos.

20

0.006712 segundos.

25

0.056871 segundos.

30

0.608906 segundos.

35

0.608906 segundos.

36

10.826393 segundos.

37

17.675453 segundos.

38

28.983141 segundos.

3

5.3 Peores tiempos
Número

Tiempo

36

10.826393 segundos.

37

17.675453 segundos.

38

28.983141 segundos.

Promedio: 19,17 Segundos

5.4 Mejores tiempos
Número

Tiempo

5

7.1E-5 segundos.

10

9.1E-5 segundos.

15

0.001017 segundos.

Promedio: 0,000344333 Segundos

5.5 Media y Desviación Estándar
Media: 5,877 Segundos.
Desviación: 10,138 Segundos.

5.6 Eficiencia del algoritmo
if($n==1) return 1; // Línea 1
if($n==0) return 0; // Línea 2
return fibo($n-1) + fibo($n-2); Línea 3

En la línea 1, hay una operación de comparación.
En la línea 2, hay una operación de comparación.
En la línea 3, hay dos saltos, por llamadas de función.
Total: 4 operaciones.
4

6. Factores primos
Hacer un programa que descomponga un número en sus factores primos.

6.1 Código
$num = 10; echo 'Los factores primos de ' . $num . ' son: ';
$num_copy = $num;
do{
if(($num_copy%2)==0){
$num_copy = $num_copy / 2;
echo '<h1>' . $num_copy . '</h1>';
}
if(($num_copy%3)==0){
$num_copy = $num_copy / 3;
echo '<h1>' . $num_copy . '</h1>';
}
if(($num_copy%5)==0){
$num_copy = $num_copy / 5;
echo '<h1>' . $num_copy . '</h1>';
}
}while($num_copy!=1);

6.2 Medición de tiempo
Número

Tiempo

5

4.4E-5 segundos.

10

5.1E-5 segundos.

100

6.0E-5 segundos.

200

7.1E-5 segundos.

900

4.7E-5 segundos.

1200

5.1E-5 segundos.

900000

0.001988 segundos.

9000000

9.3E-5 segundos.

90000000

7.5E-5 segundos.

90000000000

0.000129 segundos.
5

6.3 Peores tiempos
Número

Tiempo

90000000000

0.000129 segundos.

900000

0.001988 segundos.

9000000

9.3E-5 segundos.

Promedio: 0,000705667 Segundos

6.4 Mejores tiempos
Número

Tiempo

900

4.7E-5 segundos.

5

4.4E-5 segundos.

10

5.1E-5 segundos.

Promedio: 0,000004733 Segundos

6.5 Media y Desviación Estándar
Media: 0,0020432 Segundos.
Desviación: 0,000626729 Segundos.

6.6 Eficiencia del algoritmo
$num = 10; // Línea 1
echo 'Los factores primos de ' . $num . ' son: '; // Línea 2
$num_copy = $num; // Línea 3
do{ // Línea 4
if(($num_copy%2)==0){ // Línea 5
$num_copy = $num_copy / 2; // Línea 6
echo '<h1>' . $num_copy . '</h1>'; // Línea 7
} // Línea 8
if(($num_copy%3)==0){ // Línea 9
$num_copy = $num_copy / 3; // Línea 10
echo '<h1>' . $num_copy . '</h1>'; // Línea 11
} // Línea 12

6

if(($num_copy%5)==0){ // Línea 13
$num_copy = $num_copy / 5; // Línea 14
echo '<h1>' . $num_copy . '</h1>'; // Línea 15
} // Línea 16
}while($num_copy!=1); // Línea 17

En la línea 1, hay una operación de asignación
En la línea 3, hay una operación de asignación.
En la línea 5, hay una operación de división, luego 2 de comparación.
En la línea 6, hay una operación de asignación.
En la línea 9, hay una operación de división, luego 2 de comparación.
En la línea 10, hay una operación de asignación.
En la línea 13, hay una operación de división, luego 2 de comparación.
En la línea 14, hay una operación de asignación.
En la línea 17, hay una operación de comparación.
Total: 15 operaciones.

7. Derivada
Hacer un programa que calcule la derivada de una función de la forma:
F(x)= ax n +b x n−1 +cx , donde a, b, c son constantes y se pueden ingresar al
programa.

7.1 Código
$a = 5; $b = 5; $x = 5;$n = 5;
$fx=(($a)*($x^$n)) + (($b)*($x^($n-1)));
$dfx=(($a)*($n)*($x^($n-1))) + (($b)*($n-1)*($x^($n-2)));
echo "El valor de la funci&oacute;n en el punto X es: ".$fx ."<br/>";
echo "El valor de la derivada de la funci&oacute;n: ". $dfx;

7

7.2 Medición de tiempo
Números

Tiempo

a=5, b=6, c=7, x=34

6.8E-5 segundos.

a=400, b=300, c=200, x=100

5.6E-5 segundos.

a=4000, b=3000, c=2000, x=1000

5.2E-5 segundos.

a=400000, b=300000, c=200000,
x=100000

5.8E-5 segundos.

a=43210, b=3210, c=210, x=1000000

3.3E-5 segundos.

a=11111, b=22222, c=33333, x=44444

6.2E-5 segundos.

a=666, b=777, c=888, x=999

4.5E-5 segundos.

a=767676, b=767676, c=767676,
x=767676

4.3E-5 segundos.

a=69696969696969,
b=69696969696969,
c=69696969696969,
x=69696969696969

4.4E-5 segundos.

a=267487189278,
b=555555555555555,
c=267487189278, x=555555555555

3.7E-5 segundos.

7.3 Peores tiempos
Número

Tiempo

a=5, b=6, c=7, x=34

6.8E-5 segundos.

a=11111, b=22222, c=33333, x=44444

6.2E-5 segundos.

a=400000, b=300000, c=200000,
x=100000

5.8E-5 segundos.

Promedio: 0,000006267 Segundos

8

7.4 Mejores tiempos
Número

Tiempo

a=267487189278,
b=555555555555555,
c=267487189278, x=555555555555

3.7E-5 segundos.

a=43210, b=3210, c=210, x=1000000

3.3E-5 segundos.

a=767676, b=767676, c=767676,
x=767676

4.3E-5 segundos.

Promedio: 0,000003767 Segundos

7.5 Media y Desviación Estándar
Media: 0,0000492 Segundos.
Desviación: 1,0922Segundos.

7.6 Eficiencia del algoritmo
$a = 267487189278; // Línea 1
$b = 555555555555555; // Línea 2
$x = 267487189278; // Línea 3
$n = 555555555555; // Línea 4
$fx=(($a)*($x^$n)) + (($b)*($x^($n-1))); // Línea 5
$dfx=(($a)*($n)*($x^($n-1))) + (($b)*($n-1)*($x^($n-2))); // Línea 6
echo "El valor de la funci&oacute;n en el punto X es: ". $fx ."<br/>"; // Línea 7
echo "El valor de la derivada de la funci&oacute;n: ". $dfx; // Línea 8

En la línea 1, hay una operación de asignación
En la línea 2, hay una operación de asignación.
En la línea 3, hay una operación de asignación.
En la línea 4, hay una operación de asignación.
En la línea 5, hay dos operación de multiplicación, una resta, dos potencias y
una suma
En la línea 6, hay 4 operaciones de multiplicación, tres restas, dos potencias y
9

una suma
Total: 20 operaciones.

8. Serie 1
Mostrar los primero 1000 números de la serie

8.1 Código
$n = 1000;
for($i=0;$i<=$n;$i++){
$resultado = ((pow (3,$i))*5);
echo "el resultado para $i es $resultado <br/>";
}

8.2 Medición de tiempo
El algoritmo funciona bien, sin problemas hasta el número 644. En donde PHP
no alcanza más su memoria y bota un resultado INF como lo muestra la
imagen:

10

Tiempo total del código: 0.004961 segundos (Sin incluir números desde el 644).
Números

Tiempo

635

4.6877749214589E+303 Segundos.

636

1.4063324764377E+304 Segundos.

637

4.218997429313E+304 Segundos.

638

1.2656992287939E+305 Segundos.

639

3.7970976863817E+305 Segundos.

640

1.1391293059145E+306 Segundos.

641

3.4173879177435E+306 Segundos.

642

1.0252163753231E+307 Segundos.

643

3.0756491259692E+307 Segundos.

644

9.2269473779075E+307 Segundos.

645

INF

646

Así continua con INF

8.3 Eficiencia del algoritmo
$n = 1000; // Línea 1
for($i=0;$i<=$n;$i++){ // Línea 2
$resultado = ((pow (3,$i))*5); // Línea 3
echo "el resultado para $i es $resultado <br/>"; // Línea 4
} // Línea 5

En la línea 1, hay una operación de asignación
En la línea 2, hay una operación de asignación, una operación de comparación
y una operación de incrementación.
En la línea 3, hay una operación de potenciación, una operación de
multiplicación y por último una de asignación.
Total: 7 operaciones.
11

9. Serie
Mostrar los primero 1000 números de la serie

9.1 Código
$n = 1000;
for($i=0;$i<=$n;$i++){
$resultado = ((pow (3,$i))*5);
echo "el resultado para $i es $resultado <br/>";
}

9.2 Medición de tiempo
El algoritmo se ejecutó sin problemas, demorándose 0.002417 segundos en su
labor.
Tiempo total del código: 0.004961 segundos (Sin incluir números desde el 644).

9.3 Eficiencia del algoritmo
$n = 1000; // Línea 1
for($i=1;$i<=$n;$i++){ // Línea 2
$resultado = ((($i-1)*$i)/2); // Línea 3
echo "el resultado para $i es $resultado <br/>"; // Línea 4
} // Línea 5

En la línea 1, hay una operación de asignación
En la línea 2, hay una operación de asignación, una operación de comparación
y una operación de incrementación.
En la línea 3, hay una operación de resta, y una operación de multiplicación,
una operación de división y una de asignación.
Total: 8 operaciones.
12

Realizar las siguientes actividades para cada algoritmo
1. Programe cada algoritmo, introduciendo una rutina para medir sus tiempos de ejecución.
2. Varié los datos de entrada y obtenga el tiempo de ejecución de cada algoritmo en cada instancia.
Aquí determine tres situaciones asociadas al mejor, peor y caso promedio, para el caso promedio
genere aleatoriamente los datos 10 datos
3. Para cada instancia realice diez corrimientos del algoritmo, calcule la media y la desviación
estándar del tiempo de ejecución.
4. Realice una tabla para cada algoritmo, donde organice la información.
5. Haga un estudio de eficiencia de los algoritmos basado en la comparación entre ellos.

Este trabajo está con licencia Creative Commons, su uso es libre (Copia, modificación y redistribución);
siempre y cuando se nombre al autor (Andrés Giovanni Lara Collazos y Julián Cruz). Para más información
visite:
http://co.creativecommons.org/
“El conocimiento es libre, compártelo”

13

Sign up to vote on this title
UsefulNot useful