You are on page 1of 5

LABORATORI D’AMPLIACIÓ D’INFORMÀTICA.

Curs 2014-2015

PRÀCTICA Nº 1: Anàlisi d’algorismes. Ordenació


Data de realització: Setmana del 20 al 24 d’octubre
Duració: 1 sessió

PRÁCTICA Nº 1: Análisis de algoritmos. Ordenación


Fecha de realización: Semana del 20 al 24 de octubre
Duración: 1 sesión

Objectius/Objetivos

• Modificar algorismes d’ordenació per a adaptar-los a requeriments concrets.


Modificar algoritmes de ordenación para adaptarlos a requerimientos concretos.

• Analitzar i comparar costs d’algorismes d’ordenació sobre tipus de dades simples.


Analizar y comparar costes de algoritmes de ordenación sobre tipos de datos simples.

• Comentar els resultats empírics observats i extraure’n les conclusions.


Comentar los resultados empíricos observados y extraer las conclusiones.

Documentació a entregar/Documentación a entregar

Document/Documento Entrega Com(format)/Cómo(formato)


Full d’exercicis 24h després de la sessió
Aula Virtual. (pdf)
Hoja de ejercicios 24h después de la sesión
24h després de la sessió
Programa Aula Virtual. (.zip)
24h después de la sesión

#include <ctime>
using namespace std;

clock_t ini_time, fin_time;


float time_total;

//Iniciar la medida de tiempo
ini_time = clock();
//aquí las instrucciones cuyo tiempo de ejecución se va a medir
//Parar la medida de tiempo
fin_time = clock();

//Calcular el tiempo transcurrido y traducirlo a segundos


time_total = (fin_time - ini_time) / (float) CLOCKS_PER_SEC; //tiempo en segundos

Figura 1. Codi d’exemple/Código de ejemplo.

Pràctica  1        1  
LABORATORI D’AMPLIACIÓ D’INFORMÀTICA. Curs 2014-2015

Introducció
L’ordenació és omnipresent en moltes aplicacions i implementacions relacionades amb la
informàtica. Fins al punt que dóna nom a les màquines que executen programes: els ordinadors.
Com a tasca, està íntimament relacionada amb la cerca (binària) i en general presenta costs que
són un ordre de magnitud majors, la qual cosa duu a que siga extremadament important
aconseguir millores computacionals i caracteritzar les condicions sota les quals aquestes es
produeixen.

En la pràctica s’estudiaran només 3 algorismes, 2 directes (quadràtics) i un més el·laborat


(recursiu) que han sigut presentats i estudiats en les classes teòriques. Concretament, caldrà
calcular els nombres totals d’operacions (comparacions i assignacions) fetes per cada algorisme,
per a diverses grandàries del vector i diferents continguts.

Es dóna un programa que genera les dades i duu a terme l’ordenació mitjançant els 3 algorismes
(fitxer practica1.zip en Aula Virtual). El programa mostra com comptar les operacions d’un
dels algorismes. Caldrà modificar o refer aquest per resoldre els exercicis que es proposen.

COMPILACIÓ SEPARADA EN DEV-C++ (Projectes)


El programa està dividit en diversos mòduls (arxius): un amb extensió .cpp que conté el programa
principal i altres 2 amb extensions .h i .cpp que contenen diversos tipus de funcions auxiliars
(associades a vectors i a ordenació, respectivament).
Els IDEs (entorns de desenvolupament integrats) en general i el DEV-C++ en particular fan servir
el concepte de projecte que agrupa un conjunt de fitxers que donen lloc a un únic programa
executable. En el nostre cas es proporciona un fitxer practica1.dev que caldrà obrir
(Archivo/Abrir Proyecto en Dev-C++) amb la qual cosa es disposarà de tota la informació relativa
als fitxers esmentats. Dev-C++ té les opcions compilar, executar, compilar i executar, així com
reconstruir tot. Hi ha un manual resumit sobre el Dev-C++ en l’enllaç
http://www.rickygzz.com.mx/win32/b-dev.html

Per als qui preferesquen treballar directament amb el compilador lliure de GNU i l’editor que els
vinga de gust, es proporciona també un fitxer Makefile.

UTILITZACIÓ DEL CRONÒMETRE DEL SISTEMA


Per a calcular el temps transcorregut durant l’execució d’un grup de sentències en un programa en
C++ és possible utilitzar el rellotge del sistema i comptabilitzar els tics. A mode d’exemple es pot
consultar el codi en la Figura 1.
Les definicions de  clock_t,  clock() i  CLOCKS_PER_SEC estan incloses en  <ctime>. La idea
bàsica és arrancar el cronòmetre de temps abans d’iniciar l’execució de les sentències i parar-lo
immediatament després. Es calcula el temps transcorregut entre l’arrancada i la parada (mesurat
en tics o polsos de rellotge) i es converteix en segons en dividir per la constant , que indica el
nombre de tics per segon. El resultat és un nombre real que es pot processar convenientment.    

Pràctica  1        2  
LABORATORI D’AMPLIACIÓ D’INFORMÀTICA. Curs 2014-2015

Introducción
La ordenación es omnipresente en muchas aplicaciones e implementaciones relacionadas con la
informática. Hasta el punto que da nombre a las máquinas que ejecutan programas: los
ordenadores. Como tarea, está íntimamente relacionada con la búsqueda (binaria) y en general
presenta costes que son un orden de magnitud mayores, lo que lleva a que sea extremadamente
importante conseguir mejoras computacionales y caracterizar las condiciones para que éstas se
produzcan.

En la práctica se estudiarán solo 3 algoritmos, 2 directos (cuadráticos) y uno más elaborado


(recursivo) que han sido presentados y estudiados en las clases teóricas. Concretamente, habrá
que calcular el número total de operaciones (comparaciones y asignaciones) hechas por cada
algoritmo, para diversos tamaños del vector y diferentes contenidos.

Se da un programa que genera los datos y lleva a cabo la ordenación mediante los 3 algoritmos
(fichero practica1.zip en Aula Virtual). El programa muestra cómo contar las operaciones de
uno de los algoritmos. Habrá que modificar o rehacer éste para resolver los ejercicios que se
propone.

COMPILACIÓN SEPARADA EN DEV-C++ (Proyectos)


El programa está dividido en varios módulos (archivos): uno con extensión .cpp que contiene el
programa principal y otros 2 con extensiones .h y .cpp que contienen diversos tipos de funciones
auxiliares (asociadas a vectores y a ordenación, respectivamente.
Los IDEs (entornos de desarrollo integrados) en general y el DEV-C++ en particular, usan el
concepto de proyecto que agrupa un conjunto de ficheros que dan lugar a un único ejecutable. En
nuestro caso se proporciona un fichero, que habrá que abrir (Archivo/Abrir Proyecto en Dev-C++)
con lo cual se dispondrá de toda la información relativa a los ficheros mencionados. Dev-C++ tiene
opciones compilar, ejecutar, “compilar y ejecutar”, así como “reconstruir todo”. Hay un manual
resumido sobre el Dev-C++ en el enlace
http://www.rickygzz.com.mx/win32/b-dev.html

Para los que prefieran trabajar directamente con el compilador libre de GNU y su editor
preferido, se proporciona también un fichero Makefile.

UTILIZACIÓN DEL CRONÓMETRO DEL SISTEMA


 
Para calcular el tiempo transcurrido durante la ejecución de un conjunto de sentencias dentro de
un programa en C++ es posible usar el reloj del sistema y contabilizar el número de pulsos de reloj
transcurridos durante la ejecución de dichas sentencias. A modo de ejemplo se puede consultar el
código en la Figura 1.
Las definiciones de clock_t, clock() y CLOCKS_PER_SEC están incluidas en <ctime>. La idea
básica es arrancar el cronómetro de tiempo antes de iniciar la ejecución de las sentencias y
pararlo después de las mismas. Se calcula el tiempo transcurrido entre la arrancada y la parada
del cronómetro (medido en pulsos de reloj) y se convierte a segundos dividiendo por la constante
CLOCKS_PER_SEC, que indica el número de pulsos en cada segundo. El resultado es un
número real que se puede almacenar, imprimir, etc.

Pràctica  1        3  
LABORATORI D’AMPLIACIÓ D’INFORMÀTICA. Curs 2014-2015

FULL D’EXERCICIS. PRÀCTICA 1

Nom:
Nom:

Exercici 1: Indica per què és necessari copiar el vector cada vegada que es fa una crida
a l’ordenació.

Exercici 2: El programa només calcula el nombre d’operacions (sobre elements del


vector) que fa el primer algorisme d’ordenació. Modifica’l per que calcule també les dels
altres dos.

Exercici 3: canvia l’assignació rang=5*tam en el programa principal i fes proves amb


rang=tam/5. Explica si canvien o no alguns costs i per què. Fixa rang=tam per a la
resta de la pràctica.

Exercici 4: El programa ha de permetre ordenar vectors de diferents grandàries en una


mateixa execució. Introdueix un bucle que permetesca obtindre resultats per als següents
valors de grandàries: 32, 128, 512, 2048, y 8192. Modifica també la funció que mostra els
resultats per a que indique la grandària del vector que s’ha ordenat.

Exercici 5: Com que els costs varien en funció del contingut (aleatori) del vector, cal
repetir ordenacions amb la mateixa grandària per tal de mesurar els costs mitjans.
Modifica el programa de manera que calcule la mitjana dels valors obtinguts en repetir els
algorismes d’ordenació sobre 30 vectors aleatoris. Omple la següent taula amb aquests
valors i comenta els resultats.
Nombre d’elements
32 128 512 2048 8192

Algorismes As. Com. T As. Com. T As. Com. T As. Com. T As. Com. T

Inserció Directa

Selecció Directa

Quicksort

Exercici 6: Modifica el programa per calcular el temps mitjà en segons de cada algorisme.
Tin en compte que per a vectors petits el temps és pròxim a zero i pot ser necessitaràs
acumular temps o repetir ordenacions. Posa els resultats en la taula anterior.

Pràctica  1        4  
LABORATORI D’AMPLIACIÓ D’INFORMÀTICA. Curs 2014-2015

HOJA DE EJERCICIOS. PRÁCTICA 1

Nombre:
Nombre:

Ejercicio 1: Indica por qué es necesario copiar el vector cada vez que se hace una
llamada a la ordenación.

Ejercicio 2: El programa solo calcula el número de operaciones (sobre elementos del


vector) que hace el primer algoritmo de ordenación. Modifícalo para que calcule también
los de los otros dos.

Ejercicio 3: cambia la asignación rang=5*tam en el programa principal y haz pruebas


con rang=tam/5. Explica si cambian o no algunos costes y por qué. Fija rang=tam para
el resto de la práctica.

Ejercicio 4: El programa tiene que permitir ordenar vectores de diferentes tamaños en


una misma ejecución. Introduce un bucle que permita obtener resultados para los
siguientes valores de tamaños: 32, 128, 512, 2048, y 8192. Modifica también la función
que muestra los resultados para que indique el tamaño del vector que se ha ordenado.

Ejercicio 5: Como los costes varían en función del contenido (aleatorio) del vector, hay
que repetir ordenaciones con el mismo tamaño para medir los costes medios. Modifica el
programa de manera que calcule la media de los valores obtenidos al repetir los
algoritmos de ordenación sobre 30 vectores aleatorios. Llena la siguiente tabla con estos
valores y comenta los resultados.
Número de elementos
32 128 512 2048 8192

Algoritmos As. Com. T As. Com. T As. Com. T As. Com. T As. Com. T

Inserción Directa

Selección Directa

Quicksort

Ejercicio 6: Modifica el programa para calcular el tiempo medio en segundos de cada


algoritmo. Ten en cuenta que para vectores pequeños el tiempo es próximo a cero y tal
vez necesitarás acumular tiempos o repetir ordenaciones. Pon los resultados en la tabla
anterior.
Pràctica  1        5  

You might also like