Mi investigación actual:
Intento inicial de algunas reglas generales
Uno puede tratar de hacer algunas reglas generales para resolver la comparación racional:
Asumiendo todos los positivos :a,b,c,d
a<b∧c≥d⟹ab<cd
Básicamente, esto significa que si el lado izquierdo es menor que uno y el lado derecho es al menos uno, el lado izquierdo es menor que el derecho. En la misma vena:
a≥b∧c≤d⟹ab≮cd
Otra regla:
(b>d)∧(a≤c)⇒[ab<cd]
Creo que esta regla es lógica, ya que cuanto mayor es el denominador, menor es el número, mientras mayor el numerador, cuanto mayor sea el número. Por lo tanto, si el lado izquierdo tiene un denominador mayor
y un numerador más pequeño, el izquierdo será más pequeño.
De ahora en adelante, asumiremos que , porque de lo contrario podemos resolverlo con las reglas anteriores o revertir la pregunta a , y terminamos con esta condición de todos modos.ca<c∧b<dcd<?ab
Reglas :
Esto La regla básicamente establece que siempre se pueden restar los numeradores de los denominadores y establecer los resultados como numeradores para obtener un problema equivalente. Dejaré fuera la prueba.
(b−a)b<(d−c)d⟺[ab<cd]∣∣∣a<c,b<d
ab<c−ad−b⟺[ab<cd]∣∣∣a<c,b<d
Esta regla le permite restar el numerador y el denominador izquierdos del numerador y el denominador correctos para un problema equivalente.
Y, por supuesto, hay escala:
akbk<cd⟺[ab<cd]∣∣∣a<c,b<d
You puede usar la escala para hacer que las reglas de resta anteriores sean más significativas.
Usando estas reglas puedes jugar con cosas, aplicarlas repetidamente, en combinaciones inteligentes, pero hay casos en que los números son cercanos y patológicos.
Al aplicar las reglas anteriores, puede reducir todos estos problemas a:
ab<ap+qbp′+q′⟺ab<qq′∣∣∣a>q,b>q′
A veces puedes resolver esto directamente ahora, a veces no. Los casos patológicos suelen tener la forma:
ab<cd∣∣a>c,b>d,c∈O(a),d∈O(b)
Luego lo voltea y da como resultado lo mismo, solo que con un poco menos. Cada aplicación de las reglas + volteo lo reduce en un dígito / bit. AFAICT, no puede resolverlo rápidamente, a menos que aplique las reglas veces (una vez por cada dígito / bit) en el caso patológico, negando su aparente ventaja.O(n)
¿Problema abierto?
Me di cuenta de que este problema parece ser más difícil que algunos problemas abiertos actuales.
Un problema aún más débil es determinar:
ad=?bc
Y aún más débil:
ad=?c
Este es el problema abierto de verificar la multiplicación . Es más débil, porque si tuviera una manera de determinar , ¿entonces puede determinar fácilmente el , al probar usando el algoritmo dos veces, , . Iff tampoco es cierto, ya sabes que .ad<?bcad=?bcad<?bcbc<?adad≠bc
Ahora, ¿ era un problema abierto, al menos en 1986:ad=?c
La complejidad de la multiplicación y división. Comencemos con la ecuación muy simple ax = b. Cuando se considera sobre los enteros, es posible probar su capacidad de solución y encontrar una solución x mediante la división de enteros con el resto cero. Para verificar una solución dada x, la multiplicación de enteros será suficiente, pero es un problema abierto interesante si existen métodos de verificación más rápidos.
- ARNOLD SCHÖNHAGE en resolución de ecuaciones en términos de complejidad computacional
Muy interesante, también mencionó la cuestión de verificar la multiplicación de matrices :
También es una pregunta interesante si la verificación de la multiplicación de matrices, es decir, verificar si AB = G para un C dado, podría hacerse más rápido.
- ARNOLD SCHÖNHAGE en resolución de ecuaciones en términos de complejidad computacional
Esto se ha resuelto desde entonces, y de hecho es posible verificar en tiempo con un algoritmo aleatorio (con siendo el tamaño de las matrices de entrada, por lo que es básicamente un tiempo lineal en el tamaño de la entrada). Me pregunto si es posible reducir la multiplicación de enteros a la multiplicación de matrices, especialmente con sus similitudes, dadas las similitudes de la multiplicación de enteros de Karatsuba con los algoritmos de multiplicación de matrices que siguieron. Entonces, tal vez de alguna manera podamos aprovechar el algoritmo de verificación de multiplicación de matrices para la multiplicación de enteros.O(n2)n×n
De todos modos, dado que esto sigue siendo, que yo sepa, un problema abierto, ¿el problema más fuerte de seguramente está abierto. Tengo curiosidad por saber si resolver el problema de verificación de igualdad tendría alguna relación con el problema de verificación de desigualdad de comparación.ad<?cd
Una ligera variación de nuestro problema sería si se garantiza que las fracciones se reduzcan a los términos más bajos; en este caso es fácil saber si . ¿Puede esto tener alguna relación con la verificación de comparación para fracciones reducidas?ab=?cd
Una pregunta aún más sutil, ¿y si tuviéramos una forma de probar , ¿esto se extendería a probar ? ¿No veo cómo puede usar estas "dos formas" como lo hicimos para .ad<?cad=?cad<?cd
Relacionado:
Reconocimiento aproximado de idiomas no regulares por autómatas finitos
Trabajan un poco en la multiplicación aproximada y la verificación aleatoria, que no entiendo completamente.
- mates.SE: ¿Cómo comparar dos multiplicaciones sin multiplicar?
- Supongamos que se nos permite preprocesar tanto como quisiéramos en tiempo polinómico, ¿podemos resolver en tiempo lineal?cab=c
- ¿Existe un algoritmo de multiplicación de enteros no determinista de tiempo lineal? Ver http://compgroups.net/comp.theory/nondeterministic-linear-time-multiplication/1129399
Existen algoritmos bien conocidos para multiplicar números de n bits con algo como la complejidad O (n log (n) log (log (n))). Y no podemos hacerlo mejor que O (n) porque al menos tenemos que mirar las entradas completas. Mi pregunta es: ¿podemos realmente llegar a O (n) para una clase adecuada de algoritmos "no deterministas"?
Más precisamente, ¿hay un algoritmo que pueda aceptar dos números binarios de n bits "a" y "b" y un número de 2 n bits "c" y decirle en O (n) tiempo si "a * b = c"? Si no es así, ¿existe alguna otra forma de certificado C (a, b, c) de manera que un algoritmo pueda usarlo para probar el producto en tiempo lineal? Si no es el tiempo lineal, ¿es el problema de probar el producto al menos asintóticamente más fácil que calcularlo? Cualquier resultado conocido en este sentido sería bienvenido.
John.
―Johnh4717