Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Taller 2/Parcial 2
Entregar soluciones antes del lunes 26 de mayo a las 5pm. Para los ejercicios 8,9,10 (marcados con ?) también
debe implementar el algortimo en pyhton (enviar por correo además de incluir en la solución escrita/impresa).
Para todos debe escribir el algoritmo en pseudocódigo. Justfique y explique sus respuestas. Puede discutir con
compañeros, pero debe escribir su solución independientemente.
2. Dada una lista L, qué regresa la siguiente función ranFun(L) ? Cuál es su tiempo esperado de ejecución
en términos de n=len(L) ? (asuma que M.append toma tiempo constante).
import random
def ranFun (L):
p = random.choice(range(len(L)))
candidato = L[p]
M = []
for i in L:
if i > candidato:
M.append(i)
if M == []:
return candidato
else:
return ranFun (M)
import random
El algoritmo resultante no es estable, es decir, si al comienzo se tienen i < j y A[i] = A[j], entonces es
posible que al final estos mismos objetos estén en posiciones k, l respectivamente con k > l. Estabilidad
1
puede ser importante cuando además de las llaves usadas para el ordenamiento, cada objeto tiene otra
información asociada.
Modifique la función partition de tal manera que el algoritmo de ordenamiento resultante sea estable.
Sólo puede utilizar, si es necesario, una cantidad constante de espacio adicional (en particular no puede
usar otra lista auxiliar).
4. Se tiene una lista con n elementos posiblemente con repeticiones. Describa un algoritmo que determine
el elemento con más repeticiones, ó uno de ellos si hay más de uno. Trate de que sea los más eficiente
posible. Ayuda si los elementos son números enteros en {0, 1, 2, . . . , 4n − 1} ?
5. Un arreglo A[0 : n] se dice unimodal si consiste de un sucesión creciente seguida de una sucesión decre-
ciente. Más precisamente, si existe un ı́ndice m ∈ {0, . . . , n − 1} tal que
a) Dé un algoritmo para determinar el máximo de un arreglo unimodal A[0 : n] en tiempo O(log n).
Justifique que el algoritmo es correcto y que el tiempo de ejecución es O(log n).
Un polı́gono es convexo si todos sus ángulos interiores son menores que 180 grados (y no hay intersecciones
entre aristas). Representamos un polı́gono por medio de un arreglo V[0 : n] donde V[i] es un vértice (xi , yi )
del polı́gono, y estos aparecen en el arreglo en el orden contrario a las manecillas del reloj comenzando
con el vérticeHandout
de coordenada x más
5: Problem Set 1 pequeña, y si hay más de uno, el de coordenada y3 más pequeña entre
estos (en la figura este es el marcado como V[1], y que deberı́a ser V[0]).
b) DescribaFigure
un algoritmo para determinar el vértice con máxima coordenada
1: An example of a convex polygon represented by the array .
x.
is the vertex
c) Describawith
unthealgoritmo
minimum -coordinate,
que, paraand cualquierarevector
ordered(a,
counterclockwise.
b), determina el vértice V[i] = (xi , yi ) tal que
axi + byi es máximo.
d) Describa (b)
un Give
algoritmo que,to para
an algorithm find thecualquier recta
vertex with the `, especificada
maximum coordinate inpor parámetros
time. a y b y la ecuación
determina
ax + by =(c)1,Give si to` find
an algorithm intersecta
the vertex P y the
with en maximum
caso afirmativo
coordinateelinpunto ótime.
los puntos de intersección.
6. a) Para cada una de las funciones en la figura 1, caracterice el tiempo de ejecución en términos de n
usando notación big-O .
b) Para cada una de las funciones en la figura 2, caracterice el tiempo de ejecución en términos de n
usando notación big-O .
7. Suponga que las operaciones de insertar y borrar un elemento en una tabla de dispersión (hash) es
constante, O(1). Para asegurar que la tabla es suficientemente constante, sin desperdiciar mucha memoria,
se siguen las siguentes reglas para reconstrucción:
2
3.5. Exercises 143
1 def example1(S):
2 ”””Return the sum of the elements in sequence S.”””
3 n = len(S)
4 total = 0
5 for j in range(n): # loop from 0 to n-1
6 total += S[j]
7 return total
8
9 def example2(S):
10 ”””Return the sum of the elements with even index in sequence S.”””
11 n = len(S)
12 total = 0
13 for j in range(0, n, 2): # note the increment of 2
14 total += S[j]
15 return total
16
17 def example3(S):
18 ”””Return the sum of the prefix sums of sequence S.”””
19 n = len(S)
20 total = 0
21 for j in range(n): # loop from 0 to n-1
22 for k in range(1+j): # loop from 0 to j
23 total += S[k]
24 return total
25
26 def example4(S):
27 ”””Return the sum of the prefix sums of sequence S.”””
28 n = len(S)
29 prefix = 0
30 total = 0
31 for j in range(n):
32 prefix += S[j]
33 total += prefix
34 return total
35
36 def example5(A, B): # assume that A and B have equal length
37 ”””Return the number of elements in B equal to the sum of prefix sums in A.”””
38 n = len(A)
39 count = 0
40 for i in range(n): # loop from 0 to n-1
41 total = 0
42 for j in range(n): # loop from 0 to n-1
43 for k in range(1+j): # loop from 0 to j
44 total += A[k]
45 if B[i] == total:
46 count += 1
47 return count
Code Fragment 3.10: Some sample algorithms for analysis.
Figura 1: Programas para el ejercicio 6a
3
Figura 2: Programas para el ejercicio 6b
Después de una inserción, si la table está ocupada una fraccı́on mayor que 3/4, entonces se crea una
nueva tabla con el doble del tamaño, se copian todos los datos a la nueva tabla y se “libera” la tabla
anterior.
Después de un borrado, si la tabla está ocupada una fracción menor que 1/4, entonces se crea una
nueva tabla con la mitad del tamaño, se copian todos los datos a la nueva tabla, y se “libera” la
tabla anterior.
Note que a pesar de las operaciones normales toman un tiempo O(1), una operación que lleva a la creación
de una nueva tabla, toma un tiempo O(s) donde s es el tamaño de la nueva tabla. Justifique que, a pesar
de esto, para cualquier secuencia de inserciones y borrados, se puede decir que el costo/tiempo amortizado
por operación es constante, O(1).
8. ? Describa un algoritmo que dado una lista de n intervalos [ai , bi ], i = 0, . . . , n − 1 determina si existen
dos de los intervalos que se intersectan. Trate de hacerlo tan eficiente como sea posible.
Por ejemplo, en [3,8], [12,15], [9,11], [13,16], los intervalos [12,15] y [13,16] se intersectan.
9. ? Describa un algortimo que dada una lista de números encuentra una subsecuencia creciente de máxima
longitud posible. Trate de hacerlo tan eficiente como sea posible.
Por ejemplo, en [5,3,-1,4,2,5,6,-1,8,9,0,13], se tiene la subsecuencia creciente [3,4,5,6,8,9,13].
10. ? Sistema de ecuaciones lineales tridiagonal. Describa un algoritmo para resolver un sistema tridiagonal:
b0 c0 0 ··· 0 0 0 x0 d0
a1 b1 c1 ··· 0 0 0
x1
d1
0 a2 b2 ··· 0 0 0
x2
d2
.. .. .. .. .. .. .. .. ..
· =
. . . . . . . . .
0
0 0 ··· bn−3 cn−3 0 xn−3
dn−3
0 0 0 ··· an−2 bn−2 cn−2 xn−2 dn−2
0 0 0 ··· 0 an−1 bn−1 xn−1 dn−1
Sugerencia. Sumando un múltiplo de la primera ecuación a la segunda se elimina la variable x1 . Ahora
sumando un múltiplo de esta ecuación resultante se suma a la tercera para eliminar x2 , y ası́ sucesivamente
se obtienen ecuaciones con dos variables hasta que al llegar a la última se tiene una ecuación con sólo xn−1
que se puede resolver. Ahora reemplazando hacia atrás en las ecuaciones de dos variables sucesivamente
se pueden determinar todas las variables. Qué puede fallar ?
4
Juan camilo garzon upegui
Taller/Parcial 2
pos=0
if len(lst)<2:
return
for i in range(len(lst[start:end])):
lst[i],lst[pos]=lst[pos],lst[i]
pos+=1
elif i==(len(lst[start:end])-1):
lst[end],lst[pos]=lst[pos],lst[end]
return pos
if start<=pos<=end :
else:
return lst
4) para L=lista (vector)
K=lista()
Para n en rango L
Si L[i]=L[i+n]
Agrego L[i] a K
Sino i=i+1
O(3/4+1/4)=O(4/4)=O(1)
9)
S=lista de elementos
función:
l0=0
solución: máximo li
m = len(X)
n = len(Y)
if X[i-1] == Y[j-1]:
C[i][j] = C[i-1][j-1] + 1
B[i][j] = u’\u2196′
else:
B[i][j] = u’\u2191′
else:
B[i][j] = u’\u2190′
return B, C
10) (i = 0, 1, \dots, n-1 donde n es el número de incógnitas).
d[0] /= b[0]
c[i] /= ptemp
#Back Substitution
x = [0 for i in xrange(nmax)]
x[-1] = d[-1]
for i in range(-2,-nmax-1,-1):
return x