Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
if smallidx != i:
tmp = entrada[i]
entrada[i] = entrada[ smallidx ]
entrada[smallidx] = 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
b) Diseña un algoritmo que invierta los bytes en un tiempo 𝑂(𝑛2 ); (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).
Notemos que tenemos un for dentro de otro for (se remarcan con recuadro rojo en el código), con lo cual tenemos que la
complejidad del algoritmo presentado es 𝑂(𝑛2 ) por ser la parte del código más compleja.
c) Demuestra que log(6𝑛) = 𝑂 (log 𝑛), 3𝑛3 = 𝑂(𝑛4 ) y que 6𝑛2 + 2 ≠ 𝑂(𝑛)
log(6(2)) ≤ 𝑐 ∙ log 2
log(12)
≤𝑐
log 2
3.58493 ≤ 𝑐
Con lo cual podemos dar 𝑐 = 4 en (1)
log(6𝑛) ≤ 4 ∙ log 𝑛
3≤𝑐
Con lo cual podemos dar 𝑐 = 3 en (2)
3𝑛3 ≤ 3 ∙ 𝑛4
3𝑛3 1
lim 4
= lim =0
𝑛→∞ 3𝑛 𝑛→∞ 𝑛
Por lo tanto se cumple 3𝑛3 = 𝑂(𝑛4 )
8≤𝑐
Con lo cual podríamos dar 𝑐 = 8 en (3)
6𝑛2 + 2 ≤ 8𝑛
6𝑛2 + 2 3𝑛 1
lim = lim + = ∞ 𝑒𝑠 𝑑𝑒𝑐𝑖𝑟 𝑙𝑎 𝑐𝑜𝑛𝑠𝑡𝑎𝑛𝑡𝑒 𝑐𝑟𝑒𝑐𝑒𝑟á 𝑐𝑎𝑑𝑎 𝑣𝑒𝑧 𝑚á𝑠
𝑛→∞ 8𝑛 𝑛→∞ 4 4𝑛