¿Qué término puedo usar para describir algo con complejidad O (N log N)?
Por ejemplo:
O (1): constante
O (log N): logarítmico
O (N): lineal
O (N log N): ??????
O (N 2 ): Cuadrático
O (N 3 ): cúbico
¿Qué término puedo usar para describir algo con complejidad O (N log N)?
Por ejemplo:
O (1): constante
O (log N): logarítmico
O (N): lineal
O (N log N): ??????
O (N 2 ): Cuadrático
O (N 3 ): cúbico
Respuestas:
"N log N" es tan bueno como lo que vas a obtener, y los programadores profesionales deben entenderlo bien. No puede esperar que haya una sola palabra para describir cada clase de complejidad que existe.
Hay un término jerárquico linearithmic que significa exactamente esto.
No creo que todos los programadores lo entiendan universalmente, así que si no tienes cuidado, oscurecerá más de lo que informa. Personalmente, normalmente no lo uso, y si lo hiciera, probablemente lo definiría en el primer uso, por ejemplo, "este artículo considera los O(N log N)
algoritmos linearithmic ( )".
A veces se le llama "loglinear", aunque esa palabra en realidad significa algo diferente. Sin embargo, me quedaría con "N log N", como sugiere la respuesta de @ Philip .
Debido a que el factor log n
crece lentamente, una descripción cualitativa para O(n log n)
sería "casi lineal". Dependiendo de su audiencia, la clase de O(n log n)
algoritmos puede ser bien conocida, como por ejemplo este es el caso de la clasificación rápida de n
elementos por comparación.
O(n · f(n))
dóndef(n) << n
. Pero esto también coincide con cosas comoO(n · log log n)
yO(n α(n))
dóndeα(n)
es la inversa de la función de Ackermann.