Práctica 4

Anuncio
Práctica 4
Introducción a la computación
Primer cuatrimestre de 2010
Ejercicio 1. Decida si las siguientes afirmaciones son verdaderas o falsas:
n2 − 4n + 2 ∈ O(n2 )
n! + n2 ∈ O(n2 )
(n2 + 3n)3 ∈ O(n6 )
Si una función h(n) ∈ O(f (n)) y además f (n) ∈ O(g(n)), entonces h(n) ∈ O(g(n)).
Ejercicio 2. Ordene de menor a mayor los siguientes órdenes de complejidad.
O(1)
√
O( 2)
O(n!)
O(2n )
√
O( n)
O(n2 )
O(log(n))
O(n log(n))
O(nn )
O(n + 1)
Ejercicio 3. Determine el orden de complejidad temporal de peor caso de los siguientes algoritmos,
presumiendo que todas las operaciones sobre arreglos y matrices son O(1):
1
2
3
4
i n t s u m a t o r i a ( i n t * a , i n t tam ) {
// p r e : {tam es el tamaño del arreglo a}
// p o s : {ret value == la suma de los elementos del arreglo a@pre}
i n t suma = 0 ;
5
f o r ( i n t i =0; i <tam ; i ++){
total = total + a[ i ];
}
6
7
8
9
return total ;
10
11
1
2
3
}
// p r e : {tam es el tamaño del arreglo a}
// p o s : {a tiene los mismos elementos que a@pre y está ordenado de menor a mayor}
v o i d i n s e r t i o n S o r t ( i n t * a , i n t tam ) {
4
f o r ( i n t i = 0 ; i < tam ; i ++) {
f o r ( i n t j = i ; 0 < j && a [ j ] < a [ j − 1 ] ; j −−) {
i n t aux = a [ j ] ;
a [ j ] = a [ j −1];
a [ j −1] = aux ;
}
}
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
}
// p r e : {tam es el tamaño del arreglo arr}
// p o s : {ret value == true si y solo si n@pre está en el arreglo arr@pre}
b o o l b u s q u e d a B i n a r i a ( i n t * a r r , i n t tam , i n t n ) {
i n t d e s d e = 0 ; i n t h a s t a = tam ; i n t a c t u a l ;
bool res = f a l s e ;
w h i l e ( d e s d e < h a s t a && ! r e s ) {
a c t u a l = ( desde + hasta ) /2;
i f ( a r r [ a c t u a l ] == n ) {
res = true ;
} else {
i f ( arr [ actual ] > n){
hasta = actual ;
} else {
d e s d e = a c t u a l +1;
}
}
}
return res ;
}
1
1
2
3
4
5
6
7
// p r e : {m1 y m2 son matrices cuadradas de dimensión dim}
// p o s : {ret value es la matriz resultante de la suma entre m1@pre y m2@pre}
i n t ** s u m a M a t r i c e s ( i n t ** m1 , i n t ** m2 , i n t dim ) {
i n t ** r e s = new i n t * [ dim ] ;
f o r ( i n t i =0; i <dim ; i ++){
r e s [ i ] = new i n t [ dim ] ;
}
8
f o r ( i n t f i l =0; f i l <dim ; f i l ++){
f o r ( i n t c o l =0; c o l <dim ; c o l ++){
r e s [ f i l ] [ c o l ] = m1 [ f i l ] [ c o l ] + m2 [ f i l ] [ c o l ] ;
}
}
9
10
11
12
13
14
return res ;
15
16
}
Ejercicio 4. Para los siguientes ejercicios, dar una especificación, un programa en C++ y determine el orden de complejidad temporal de peor caso:
a) Dado un entero n, devolver un arreglo de enteros que contenga a todos los divisores positivos
de n.
b) Dados dos enteros no negativos n y m y una matriz de reales M de n × m, devolver M t , la
matriz traspuesta de M . (Recordar que (M t )i,j = Mj,i .)
c) Escribir un algoritmo que dadas dos matrices devuelva una tercera con el resultado de la suma
entre ellas.
2
Descargar