Sei sulla pagina 1di 1

Computación II

Unidad 1. Estructuras de datos y análisis de algoritmos

Actividad 3. Análisis de complejidad

Instrucciones: En esta actividad vas a programar y determinar la complejidad de un algoritmo


previamente escogido.

1. Considera el siguiente código para hacer ordenamientos


def algoritmo( entrada )
n = len( entrada )
for i in range( n-1 ):
smallidx = i
for j in range( i+1, n ):
if entrada[j] < entrada[smalidx]: smallidx = j

if smalidx != i:
tmp = entrada[i]
entrada[i] = entrada[ smalidx ]
entrada[smalidx] = tmp

2. Considera la siguiente situación. Cuando el diseño de las computadoras no estaba


completamente estandarizado, algunas firmas de electrónica (IBM, Motorola) leían el
contenido de los bits en memoria de izquierda a derecha (big endian), y otros, como DEC,
de derecha a izquierda (little endian). Esto claramente causaba discrepancias graves a la
hora de correr programas hechos para una y otra máquina cuando el problema no es tan
grave. De hecho, únicamente hay que leer una cadena de bytes en memoria en orden
invertido, sin olvidar que lo que tienes son cadenas de bytes, es decir, si en una máquina
tienes la siguiente cadena, en una máquina diseñada con el principio big endian
00110101 11010110 10110110 00111011
Debe ser leída en la máquina con little endian de la siguiente manera
10101100 01101011 01101101 110111100

3. Contesta las siguientes preguntas


a) ¿Cuál es la complejidad asociada al algoritmo recién presentado?
b) Diseña un algoritmo que invierta los bytes en un tiempo ; (recuerda que la
definición de representa una cota superior del orden de , es decir, el
tiempo máximo que debería tomar al algoritmo ejecutarse).
c) Demuestra que , y que

1
Educación Abierta y a Distancia * Ciencias Exactas, Ingenierías y Tecnologías

Potrebbero piacerti anche