Sí, para una N adecuadamente pequeña. Siempre habrá una N, sobre la cual siempre tendrá el pedido O (1) < O (lg N) < O (N) < O (N log N) < O (N ^ c) < O (c ^ N) (donde O (1) < O (lg N) significa que en un algoritmo O (1) tomará menos operaciones cuando N es adecuadamente grande y c es una constante fija que es mayor que 1) .
Supongamos que un algoritmo O (1) particular toma exactamente f (N) = 10 ^ 100 (a googol) y un algoritmo O (N) toma exactamente g (N) = 2 N + 5 operaciones. El algoritmo O (N) dará un mayor rendimiento hasta que N sea más o menos un googol (en realidad, cuando N > (10 ^ 100 - 5) / 2), por lo que si solo espera que N esté en el rango de 1000 a mil millones sufrirías una penalización mayor con el algoritmo O (1).
O para una comparación realista, digamos que están multiplicando números de n dígitos. El algoritmo de Karatsuba es como máximo 3 n ^ (lg 3) operaciones (que es aproximadamente O (n ^ 1.585)) mientras el Schönhage – Strassen algorithm es O (N log N log log N) es un pedido más rápido , pero para citar wikipedia:
En la práctica, el algoritmo de Schönhage-Strassen comienza a superar
Métodos más antiguos, como Karatsuba y Toom-Cook, multiplicación para
números más allá de 2 ^ 2 ^ 15 a 2 ^ 2 ^ 17 (10,000 a 40,000 decimales
dígitos). [4] [5] [6]
Entonces, si estás multiplicando números de 500 dígitos, no tiene sentido usar el algoritmo que es "más rápido" por los grandes argumentos de O.
EDITAR: puede encontrar determinar f (N) en comparación con g (N), tomando el límite N- > infinito de f (N) / g (N). Si el límite es 0, entonces f (N) < g (N), si el límite es infinito, entonces f (N) > g (N), y si el límite es alguna otra constante, entonces f (N) ~ g (N) en términos de notación O grande.