La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Eficiencia en uso de recursos y memoria

Presentaciones similares


Presentación del tema: "Eficiencia en uso de recursos y memoria"— Transcripción de la presentación:

1 Eficiencia en uso de recursos y memoria
Programación avanzada C++

2 Ejemplo práctico para calcular tiempo de ejecución.
#include <iostream> #include <time.h> //librería para calcular tiempo de ejecución #include <math.h> //librería para obtener números aleatorios using namespace std; void tiempoProc1(void);//procedimiento que contiene instrucciones para calcular // tiempo que tarda cierto algoritmo int main(){ tiempoProc1(); //procedimiento para calcular el tiempo que tarda cierto //algoritmo system("pause"); return 0; }//fin main

3 void tiempoProc1(void){
int inicio, fin, t; float tiempoSeg; inicio = clock();//guarda tiempo inicial /*Código a calcular el tiempo---lo podemos cambiar para ver cómo se comportan diferentes algoritmos*/ for (int i = 0; i<1000; i++) cout <<i<<"\n"; /*Se puede poner el código al cuál queremos calcular el tiempo*/ fin = clock();//guarda tiempo final t = fin - inicio;//calcula tiempo transcurrido tiempoSeg=((float)t) / CLOCKS_PER_SEC;//investiga qué // significa esta línea cout << "El tiempo transcurrido fue: " << tiempoSeg << "\n"; }//fin tiempoProc1

4 Probemos este código con varios sub-algoritmos

5 Usando el ejemplo anterior, investiga y responde lo siguiente

6 ¿Cuánto tarda en ejecutarse este ciclo for?
for(int i=0; i<1000;i++) cout <<i<<"\n";

7 ¿Cuánto tarda este procedimiento de arreglo estático?
void arregloEstatico(void){ int aE[10]; //aquí se declara el arreglo estático cuyo tamaño fijo //está definido por la constante TAM srand(5);//"semilla" para generar números aleatorios cout << "\nARREGLO ESTATICO\n"; //ciclo para llenar el arreglo estático for (int i = 0; i < 10; i++){ cout << "\nElemento " << i << " del arreglo: "; aE[i] = rand(); cout << aE[i]; } cout << "\n";//imprime en pantalla una línea en blanco //ciclo para mostrar arreglo estático for (int i = 0; i < 10; i++) cout << aE[i] << " "; cout << "\n";//imprime en pantalla una línea en blanco }//fin procedimiento arregloEstatico

8 ¿Cuánto tarda este procedimiento de arreglo dinámico?
void arregloDinamico(void){ int tamDin = 0; //variable para que el usuario indique el tamaño del arreglo que quiere cout << "\nARREGLO DINAMICO\n"; cout << "Calcula el tamaño del arreglo de enteros: ";//indica a usuario tamaño deseado srand(5);//"semilla" para generar números aleatorios tamDin = rand(); //se guarda el tamaño en variable tamDin cout << " " << tamDin << "\n";//se muestra el tamaño aleatorio elegido int *pArregloDin; //apuntador para guardar dirección de inicio del arreglo dinámico pArregloDin = new int[tamDin]; //se aparta memoria dinámica para el arreglo pArregloDin //ciclo para llenar los elementos del arreglo dinámico for (int i = 0; i < tamDin; i++){ cout << "\nElemento " << i << " ";//pide al usuario ingrese cada uno de //los elementos del arreglo pArregloDin[i] = rand(); }//fin for cout << "\n";//imprime en pantalla una línea en blanco //ciclo para mostrar arreglo dinámico for (int i = 0; i < tamDin; i++) cout << pArregloDin[i] << " "; //fin for delete pArregloDin; //librea la memoria dinámica reservada para el arreglo }//fin procedimiento arreglo dinámico

9 Continuación – otros algoritmos a probar tiempo de ejecución

10 Escribe el tiempo de ejecución encontrado para las tres subrutinas que se indicaron en la sección anterior.

11 For: Arreglo estático: Arreglo dinámico:

12 Ahora probaremos con un algoritmo más complejo
Probemos el tiempo que tarda en realizarse algunos algoritmos de ordenamiento Primero veamos el ordenamiento burbuja

13 void ordenamientoBurbuja(void){
int c[100], num, b; //Llenar arreglo rand(); for (int i = 0; i<100; i++){ num = rand() % 100; if (i>0){ for (int j = 0; j<i; j++) if (num == c[j]){ num = rand() % 100; j = -1; } c[i] = num; //ordenar arreglo for (int x = 0; x<100; x++){ for (int y = 0; y<99; y++){ if (c[y]>c[y + 1]){ b = c[y]; c[y] = c[y + 1]; c[y + 1] = b; //mostrar arreglo for (int h = 0; h<100; h++) cout << c[h] << "\t"; cout << endl;

14 Ahora veamos el tiempo para el ordenamiento por inserción
Copia todo el código que se muestra a continuación

15 //parte del ordenamiento de insercion
int inicial(int o[], int c){ int p = c; int d = o[c]; for (int h = c; h<100; h++){ if (o[h]<d){ d = o[h]; p = h; } return p;

16 void ordenamientoInsercion(void){
int m, pos_m, num; int k[100]; //Llenar arreglo rand(); for (int i = 0; i<100; i++){ num = rand() % 100; if (i>0){ for (int j = 0; j<i; j++) if (num == k[j]){ num = rand() % 100; j = -1; } k[i] = num; //ordenar arreglo for (int l = 0; l<99; l++){ pos_m = inicial(k, l); if (k[l]>k[pos_m]){ m = k[pos_m]; for (int g = pos_m - 1; g >= 1; g--){ k[g + 1] = k[g]; k[l] = m; for (int h = 0; h<100; h++) cout << k[h] << "\t"; cout << endl;

17 ¿Cuál es el tiempo de ejecución de cada código
¿Cuál es el tiempo de ejecución de cada código? -El código y la respuesta a esta pregunta deberá enviarse por el 27 de octubre. Con tu investigación sobre la notación “Big-O”, analiza ambos algoritmos de ordenamiento y describe cuál es su comportamiento de acuerdo con esta notación. Ambos deben entregarse en MRR el 28 de octubre en la clase.


Descargar ppt "Eficiencia en uso de recursos y memoria"

Presentaciones similares


Anuncios Google