Sí, para un N. adecuadamente pequeño Siempre habrá una N, por encima de la cual siempre tendrá el orden 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 )
Digamos que un algoritmo O (1) particular toma exactamente f (N) = 10 ^ 100 (un googol) operaciones 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 aproximadamente un googol (en realidad cuando N> (10 ^ 100 - 5) / 2), por lo que si solo esperaba que N estuviera en el rango de 1000 a mil millones sufriría una penalización importante usando el algoritmo O (1).
O para una comparación realista, digamos que está multiplicando números de n dígitos. El algoritmo de Karatsuba es a lo sumo 3 n ^ (lg 3) operaciones (que es aproximadamente O (n ^ 1.585)) mientras que el algoritmo de Schönhage-Strassen es O (N log N log log N) que es un orden más rápido , pero para citar wikipedia:
En la práctica, el algoritmo Schönhage – Strassen comienza a superar a los métodos más antiguos, como la multiplicación de Karatsuba y Toom – Cook para números más allá de 2 ^ 2 ^ 15 a 2 ^ 2 ^ 17 (10,000 a 40,000 dígitos decimales). [4] [5] [6 ]
Entonces, si está multiplicando números de 500 dígitos, no tiene sentido usar el algoritmo que es "más rápido" por grandes argumentos O.
EDITAR: Puede encontrar determinar f (N) comparado 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.