¿Es teóricamente posible que un algoritmo tenga una complejidad negativa?

Hay dos preguntas aquí; uno es “cómo funciona la notación big-O con valores negativos” y el segundo es específicamente sobre algoritmos.

La primera es una pregunta puramente formal. La definición en wikipedia es que [matemáticas] f (x) = O (g (x)) [/ matemáticas] si y solo si

[matemáticas] | f (x) | \ le M | g (x) | [/ math] para todos [math] x> x_0 [/ math].

Esta definición solo arroja valores absolutos alrededor de todo, por lo que las constantes negativas tienen mucho sentido en la notación O grande.

En cuanto a si tiene sentido aplicar la notación big-O negativa a los algoritmos … técnicamente, según la definición anterior, cualquier algoritmo [math] O (N ^ 3) [/ math] también es [math] O (-N ^ 3) [/mates]. Pero eso no significa que el algoritmo tome tiempo negativo ni nada. Obviamente, ningún algoritmo puede tomar tiempo negativo. *

(*) Puedo pensar en un caso extraño en el que podría tener sentido pensar en algo que toma “tiempo” negativo: estructuras de datos con tiempo de consulta amortizado. La forma en que generalmente se analizan es con una función potencial . Si una operación lleva tiempo t, y la función potencial tiene el valor [math] \ phi [/ math] antes de la operación, y [math] \ phi ‘[/ math] después de la operación, decimos que la operación tiene “costo” [ matemáticas] t + \ phi ‘- \ phi [/ matemáticas]. Es posible que ese costo a veces sea negativo (¡pero no siempre puede ser negativo! El “tiempo amortizado” del algoritmo siempre debe ser positivo).

No, no tiene sentido.

Uno podría explicar matemáticamente, pero déjame ser poco convencional y abordarlo desde el otro extremo.

Filosóficamente, la complejidad es una medida que se multiplica, no se agrega. Es decir, un Algoritmo “dorado” inexistente tiene la complejidad de O (1), y este número puede multiplicarse por algo no negativo o dividirse por algo no negativo.

Por ejemplo, agregar un bucle externo da como resultado que O (N) se “agregue”, que es, de hecho, un múltiplo de. El uso de la búsqueda binaria en lugar de una exploración lineal mejora O (N) a O (log (N)), dividiendo efectivamente el valor bajo O grande por un N / log no negativo (N).

Los “trucos” amortizados a veces pueden “sustituir” la multiplicación agregando, pero el principio general es válido.

Por lo tanto, la complejidad algorítmica, como la entropía, existe en un reino donde O (0) es efectivamente “menos infinito” y los valores negativos son inalcanzables.

No tiene sentido como dijo Dima. Cuando analizas un algoritmo, estás contando cómo la cantidad de pasos que se ejecutan aumenta con el tamaño del problema. Básicamente, estás multiplicando el número de iteraciones que estás haciendo con el número de operaciones primitivas que se realizan en tiempo constante. No tiene sentido que una operación primitiva se pueda realizar en una cantidad negativa de pasos.

More Interesting

¿Hay algún fractal completo de Turing?

¿Los ingenieros de software necesitan saber matemáticas?

¿Cuál es el tipo de datos de optimización de memoria más apropiado en Matlab para importar un archivo de audio que tiene un valor máximo de 0.495971679687500 y el valor mínimo es -0.488983154296875?

¿Los libros de texto de lógica formal en idiomas que no usan el alfabeto latino todavía representan proposiciones con P y no con P?

¿Qué es un algoritmo de aproximación?

Cómo comenzar con estructuras de datos y algoritmos, considerando que no he sido bueno en matemáticas

¿Cuál es la prueba de primitiva determinista más rápida?

¿Cuál es el límite y cómo puedo probar: [math] \ lim_ {n \ rightarrow \ infty} {n ^ dn ^ c} [/ math] cuando [math] 0 \ leq c <d [/ math]?

¿Cuál es un ejemplo de un operador XOR que utiliza conceptos del mundo real?

¿Cómo es útil la optimización convexa en la industria tecnológica?

Cómo hacer una forma generalizada a partir de un conjunto dado de expresiones (pasos / algoritmo de deseo)

¿Qué módulo será más útil, análisis multivariado o análisis bayesiano?

¿Cómo se puede determinar la coincidencia más cercana de un vector dado entre un conjunto de vectores si el origen de los vectores también es importante?

¿Es la arquitectura de las computadoras de Von Neumann, se basó en su trabajo ... o fue alguien más?

Cómo mejorar mi forma analítica de pensar para trabajar matemáticamente para la programación de computadoras