Está en la página 1de 9

Logaritmos

Algoritmos y
Estructura de
Datos I

1
Logaritmos
Al analizar los tiempos de ejecución de los distintos algoritmos, se pueden
encontrar algoritmos de distintos órdenes. Así, por ejemplo, si se quiere
buscar un elemento en una lista de n elementos, en el peor de los casos, se
deberá transitar por todos los elementos y el tiempo que se empleará será
de orden lineal O(n): se recorrerá cada uno de los elementos, de principio a
fin. Esto implica que, mientras más grande sea n, mayor será el tiempo de
ejecución y será un crecimiento proporcional al lote de los datos de entrada.

Pero, no todos los algoritmos son de orden lineal. Existen otros que
responden a órdenes de distintas funciones, como polinomios (cuadráticas,
cúbicas), exponenciales, logarítmicas, entre otras. Se concentrará en el caso
de los de orden logarítmico O(Log(n)).

Análisis matemático
Los logaritmos son operaciones en las que, dado un número real positivo a y
una base b, permiten calcular el exponente c de la potencia.

𝐿𝑜𝑔 𝑏 𝑎 = 𝑐 → 𝑎𝑐 = 𝑏 ; ∀𝑎 >0

En la práctica, en el ámbito de la informática, se usan siempre logaritmos de


base 2, comúnmente conocidos como logaritmos binarios. Esto es posible
debido a que la base no condiciona la capacidad de cálculo de un logaritmo
de cualquier base. Se puede demostrar lo anteriormente afirmado a través
de la propiedad de cambio de base que estipula lo siguiente:

𝐿𝑜𝑔 𝑘 𝑎
𝐿𝑜𝑔 𝑏 𝑎 = donde 𝑘 será la nueva base
𝐿𝑜𝑔 𝑘 𝑏

En el caso de tener un logaritmo con una base b cualquiera, se puede


traducirla a un logaritmo binario:

𝐿𝑜𝑔 2 𝑎
𝐿𝑜𝑔 𝑏 𝑎 = donde 𝑘 = 2 será la nueva base
𝐿𝑜𝑔 2 𝑏

La propiedad mencionada surge del desarrollo del teorema de cambio de


base, explicado a continuación:

𝐿𝑜𝑔 𝑎 𝑋
𝐿𝑜𝑔 𝑏 𝑋 =
𝐿𝑜𝑔 𝑎 𝑏

2
Sea:
𝐿𝑜𝑔 𝑎 𝑋 = 𝐴 → 𝑎 𝐴 = 𝑋
𝐿𝑜𝑔 𝑏 𝑋 = 𝐵 → 𝑏 𝐵 = 𝑋

Por lo tanto, se deducen las siguientes igualdades:

𝑋 = 𝑋 → 𝑎 𝐴 = 𝑏𝐵

Se aplica el logaritmo en base a en ambos lados de la igualdad:

𝐿𝑜𝑔 𝑎 𝑎 𝐴 = 𝐿𝑜𝑔 𝑎 𝑏 𝐵

Por propiedad, los exponentes de las potencias pasan a multiplicar los


logaritmos:

𝐴 . 𝐿𝑜𝑔 𝑎 𝑎 = 𝐵 . 𝐿𝑜𝑔 𝑎 𝑏

Dado que 𝐿𝑜𝑔 𝑎 𝑎 = 1

𝐴 = 𝐵 . 𝐿𝑜𝑔 𝑎 𝑏

Se despeja B

𝐴
𝐵=
𝐿𝑜𝑔 𝑎 𝑏

Se reemplaza con los valores de A y B mencionados en el primer paso:

𝐿𝑜𝑔 𝑎 𝑋
𝐿𝑜𝑔 𝑏 𝑋 =
𝐿𝑜𝑔 𝑎 𝑏

Queda demostrado, entonces, que la base de un logaritmo puede ser


reemplazada por el valor que mayor conveniencia aporte.

Logaritmos en el análisis de algoritmos


Es importante destacar por qué una función logarítmica es de importancia
en el ámbito informático. Esta se caracteriza por crecer lentamente y es un
orden deseable de conseguir en la práctica, siempre que se pueda, debido a
que, ante valores de n grandes, la función no diverge mucho. En
comparación con la función logarítmica, la tasa de crecimiento de una
función lineal es proporcional a la cantidad de datos de entrada. Es decir, si
se ingresa el doble de datos, el tiempo de ejecución se duplica también. Una

3
función logarítmica no se verá muy afectada ante una duplicación de los
datos de entrada y es ahí donde radica su importancia.

Como se comentó anteriormente, existen algoritmos que presentan un


comportamiento logarítmico cuando se analiza su tiempo de ejecución. Pero
también existen otras funciones que se componen de un logaritmo. Una
función común de encontrar en el orden del tiempo de ejecución de un
algoritmo es O(n*Log(n)). Los algoritmos de este orden se utilizan para
resolver problemas, a través de su división en problemas más pequeños. Tal
es el caso de los algoritmos de ordenamiento conocidos como Heapsort y
Quicksort. La tasa de crecimiento que ofrecen no es tan buena como la de
orden logarítmico O(Log(n)) y mantienen un rendimiento similar a los
algoritmos de orden lineal O(n).

Logaritmos en la práctica
En la vida diaria, se enfrentarán distintos problemas que podrán ser
resueltos haciendo uso de logaritmos. A continuación, se mencionan
ejemplos reales en el ámbito informático que serán de gran utilidad.

Cálculo de cantidad de bits necesarios para representar un


entero

A la hora de crear redes de computadoras, surge la pregunta de cuántos bits


se necesitan para crear una red con N hosts, computadoras en este ejemplo.
El resto de los bits será usado para direccionar redes.

Las IPv4 son definidas, comúnmente, con números decimales. Están


compuestas por 4 bytes y cada byte es un octeto de bits.

Por ejemplo, la IP 8.20.15.1 también podría escribirse como una secuencia


de bits: 00001000.00010100.00001111.00000001.

Sucede que, dentro de una IP, parte de ella se usa para identificar un número
de red y la última parte, para identificar un número de host.

Se supone que se quiere crear una red para 150 hosts. Para ello, se necesita
saber cuántos bits se deben usar de la IP para poder representar a todos los
hosts y evitar usar más bits de los necesarios, que luego no se utilicen.

Para resolver este problema, los logaritmos surgen como una gran solución.
𝐻𝑜𝑠𝑡𝑠 = 150

4
𝐿𝑜𝑔2 150 ≅ 8

Se redondea al siguiente valor entero mayor.

Es decir, se necesitarán 8 bits para poder representar a 150 computadoras.


Con 8 bits, será posible tener hasta 256 hosts. No se puede usar 7 bits,
debido a que 128 no es suficiente.

27 = 128 28 = 256

Entonces, podremos asignar en la dirección IP valores de hosts que van


desde el 1 al 151:

RRRR.RRRR.0000.0001 correspondiente al HOST 1


RRRR.RRRR.0000.0010 correspondiente al HOST 2
Así, sucesivamente hasta llegar a:
RRRR.RRRR.1001.0110 correspondiente al HOST 150
… quedan 106 hosts disponibles para ser usados
RRRR.RRRR.1111.1111 correspondiente al HOST 256

Los bloques R representan los valores de red correspondientes.

Como se evidencia en este ejemplo, un simple cálculo como un logaritmo


facilita el cálculo de una situación por demás cotidiana en aquellas personas
que se dedican a crear redes.

Búsqueda binaria

El algoritmo de búsqueda “búsqueda binaria” es también llamado algoritmo


de búsqueda logarítmica. Estos últimos son métodos creados para poder
encontrar un elemento x en una estructura de datos de n elementos (listas,
vectores, bases de datos, etc.). La búsqueda binaria busca un elemento
dentro de un vector ordenado, es decir, los elementos se ubican según un
criterio de orden. Por ejemplo, de mayor a menor.

Si se tiene un vector de valores numéricos:

1 8 2 6 4 7

Ordenados de menor a mayor, se tendrá:

1 2 4 6 7 8

5
Se llama búsqueda binaria, debido a que va subdividiendo la estructura de
datos en dos partes y desecha aquellas en donde no se encuentra el valor
que se busca. Esta premisa indica que, en el peor de los casos, se deberán
realizar Log(n) iteraciones hasta llegar al valor x buscado. En la próxima
lectura, se abordará el análisis de los algoritmos de búsqueda estática y se
adentrará en este método de búsqueda.

Árboles binarios de búsqueda

Existen otras estructuras como los árboles. Son colecciones de valores


organizados que imitan a un árbol: parten de un nodo raíz, del cual se
desprenden las ramas con nodos hijos. Un árbol binario es un árbol, pero con
la particularidad de que un nodo padre solo puede tener hasta dos nodos
hijo. Estos son muy usados en el ámbito informático. Particularmente, para
realizar las búsquedas, se usan árboles binarios. Se abordará este tema en
mayor profundidad más adelante. Por el momento, a los fines de explicar
dónde intervienen los logaritmos en los árboles de búsqueda binaria, se
comentará que se suelen realizar algunos cálculos de utilidad para poder
trabajarlos. Uno de ellos es el cálculo de la altura del árbol. Esta es un
número que indica la cantidad de nodos que se transitan hasta llegar a un
nodo hoja (aquel que no tiene hijos), pero transitando el camino más largo
y contando a partir del nodo raíz.

6
Figura 1: Altura de un árbol

Fuente: elaboración propia.

En este ejemplo, se puede notar que se tiene un árbol de altura 4. Sin


embargo, en la práctica, es necesario poder llegar a este valor sin tener que
graficar árboles de gran dimensión y luego tener que contarlos.

En el peor de los casos, un árbol se puede asemejar a una lista y tener altura
n:

Figura 2: Peor caso de un árbol

7
Fuente: elaboración propia.

Este caso es un árbol binario, dado que cada padre no tiene más de dos hijos.
Sin embargo, se dice que es el peor caso, debido a que no se diferencia de
una lista, cuando el objetivo de un árbol binario es lograr la organización de
un árbol para facilitar la búsqueda de sus elementos.

En el mejor de los casos, un árbol puede tener una altura calculable


analíticamente. Es posible hacerlo haciendo uso de la siguiente expresión:

𝐴𝑙𝑡𝑢𝑟𝑎 = 𝐿𝑜𝑔2 (𝑛 + 1)

Donde n representa la cantidad de nodos o elementos del árbol.

Figura 3: Mejor caso de un árbol

Fuente: elaboración propia.

Por lo tanto, en el ejemplo, la expresión valuada será:

𝐴𝑙𝑡𝑢𝑟𝑎 = 𝐿𝑜𝑔2 (7 + 1) = 𝐿𝑜𝑔2 (8) = 3

La altura de los árboles juega un rol importante a la hora de cuidar el tiempo


de ejecución de un algoritmo.

8
Referencias
Weiss, M. A. (2013). Análisis de algoritmos. En M. Martín-Romo (Ed.), Estructuras
de datos en Java (pp. 202-204). Madrid, ES: Pearson.

También podría gustarte