3. Un algoritmo es:
• Una secuencia de pasos para resolver un
problema, sus características son:
– Independiente: Del lenguaje de programación y de
la máquina.
– Definido: De pasos claros y concretos.
– Finito: En el número de pasos que usará.
– Preciso: Cada paso arroja un cálculo correcto.
– Recibe datos: Debe poseer datos de entrada.
4. Recursos necesarios para un programa
• Tiempo de procesador
• Memoria RAM
• Uso de recursos de procesador
• Los recursos no son infinitos, por eso se debe
analizar la eficiencia y desempeño de cada
algoritmo, para encontrar el equilibrio adecuado
entre realizar la tarea del programa usando la
menor cantidad de recursos posibles.
5. Tiempo de ejecución
• Tiempo de Ejecución
– El tiempo de Ejecución de un programa se mide
en función de N, lo que designaremos como T(N).
– Esta función se puede calcular físicamente
ejecutando el programa acompañados de un reloj,
o calcularse directamente sobre el código,
contando las instrucciones a ser ejecutadas y
multiplicando por el tiempo requerido por cada
instrucción.
6. Tiempo de ejecución (cont.)
• Así, un trozo sencillo de código como:
S1;
for(int x = 0; x < N; x++)
S2;
Va a tardar: T(N) = t1 + t2 * N
• Donde t1 es el tiempo que lleva ejecutar la
serie S1 de sentencias, y t2 es el que lleva la
serie S2.
7. Tiempo de ejecución (cont.)
• Habitualmente todos los algoritmos contienen
alguna sentencia condicional o selectiva,
haciendo que las sentencias ejecutadas
dependan de la condición lógica, esto hace
que aparezca más de un valor para T(N), es
por ello que debemos hablar de un rango de
valores:
Tmin(N) ≤ T(N) ≤ Tmax(N)
8. Ejemplo práctico para calcular tiempo
de ejecución.int main(){
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*/
/*Fin del código a 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 (en segundos) transcurrido en el procedimiento fue:
" << tiempoSeg << "n";
system("pause");
return 0;
}//fin main
11. ¿Cuánto tarda en ejecutarse este ciclo
for?
for(int i=0; i<1000;i++)
cout <<i<<"n";
12. ¿Cuánto tarda este procedimiento de
arreglo estático?
int const TAM = 5;
int aE[TAM]; //aquí se declara el arreglo estático cuyo tamaño fijo
//está definido por la constante TAM
cout << "nARREGLO ESTATICOn";
srand(5);//"semilla" para generar números aleatorios
//ciclo para llenar el arreglo estático
for (int i = 0; i < TAM; i++){
cout << "Elemento " << i << " del arreglo: ";
aE[i] = rand();
cout << aE[i]<<"t";
}
cout << "n";//imprime en pantalla una línea en blanco
//ciclo para mostrar arreglo estático
for (int i = 0; i < TAM; i++)
cout << aE[i] << " ";
cout << "n";//imprime en pantalla una línea en blanco
13. ¿Cuánto tarda este procedimiento de
arreglo dinámico?
int tamDin = 0; //variable que guarda el tamaño del arreglo
cout << "nARREGLO DINAMICOn";
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 << " ";
pArregloDin[i]=rand();
cout << pArregloDin[i];
}//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
cout << "n";//imprime en pantalla una línea en blanco
delete pArregloDin; //librea la memoria dinámica reservada para el arreglo