Meine aktuelle Forschung:
Erster Versuch mit einigen allgemeinen Regeln
Man kann versuchen, einige allgemeine Regeln für die Lösung des rationalen Vergleichs aufzustellen:
Angenommen, alle positiven :a,b,c,d
a<b∧c≥d⟹ab<cd
Dies bedeutet im Grunde, wenn die linke Seite kleiner als eins ist und die rechte Seite mindestens eins ist, ist die linke Seite kleiner als die rechte Seite. In der gleichen Richtung:
a≥b∧c≤d⟹ab≮cd
Eine andere Regel:
Ich halte diese Regel für logisch, denn je größer der Nenner, desto kleiner die Zahl, und je größer der Zähler, desto größer die Zahl. Wenn also die linke Seite einen größeren Nennerundeinen kleineren Zähler hat, ist die linke Seite kleiner.
(b>d)∧(a≤c)⇒[ab<cd]
Ab jetzt nehmen wir an, dass , da wir es sonst entweder mit den obigen Regeln lösen oder die Frage in c umkehren könnena<c∧b<d , und wir haben sowieso diese Bedingung.cd<?ab
Regeln :
(b−a)b<(d−c)d⟺[ab<cd]∣∣∣a<c,b<d
Diese Regel besagt grundsätzlich, dass Sie die Zähler immer von den Nennern abziehen und die Ergebnisse als Zähler festlegen können, um ein gleichwertiges Problem zu erhalten. Ich werde den Beweis weglassen.
ab<c−ad−b⟺[ab<cd]∣∣∣a<c,b<d
Mit dieser Regel können Sie den linken Zähler und Nenner vom rechten Zähler und Nenner für ein gleichwertiges Problem abziehen.
Und natürlich gibt es Skalierung:
akbk<cd⟺[ab<cd]∣∣∣a<c,b<d
Sie können die Skalierung verwenden, um die obigen Subtraktionsregeln signifikanter zu machen.
Mithilfe dieser Regeln können Sie mit Dingen herumspielen, sie wiederholt in intelligenten Kombinationen anwenden, aber es gibt Fälle, in denen Zahlen nahe beieinander liegen und pathologisch sind.
Durch Anwenden der vorherigen Regeln können Sie all diese Probleme auf Folgendes reduzieren:
a
ab<ap+qbp′+q′⟺ab<qq′∣∣∣a>q,b>q′
Manchmal kann man das jetzt direkt lösen, manchmal nicht. Die pathologischen Fälle sind in der Regel in der Form:
ab<cd∣∣a>c,b>d,c∈O(a),d∈O(b)
Dann drehen Sie es um und erhalten dasselbe Ergebnis, nur mit einem bisschen weniger. Jede Anwendung der Regeln + Flip reduziert sie um eine Ziffer / Bit. AFAICT, Sie können es nicht schnell lösen, es sei denn, Sie wenden die Regeln mal (einmal für jede Ziffer / Bit) im pathologischen Fall an und negieren ihren scheinbaren Vorteil.O(n)
Offenes Problem?
Mir wurde klar, dass dieses Problem schwieriger zu sein scheint als einige derzeit offene Probleme.
Ein noch schwächeres Problem besteht darin, festzustellen:
ad=?bc
Und doch schwächer:
ad=?c
Dies ist das offene Problem der Überprüfung der Multiplikation . Es ist schwächer, denn wenn du einen Weg hättest, zu bestimmen ? < b c , dann können Sie leicht ein d bestimmen ? = b c , durch zweimaliges Testen mit dem Algorithmus, a d ? < b c , b c ? < a d . Wenn beides zutrifft, wissen Sie, dass a d ≠ b c .ad<?bcad=?bcad<?bcbc<?adad≠bc
Nun, war zumindest 1986 ein offenes Problem:ad=?c
Die Komplexität von Multiplikation und Division. Beginnen wir mit der sehr einfachen Gleichung ax = b. Über die ganzen Zahlen betrachtet ist es möglich, die Lösbarkeit zu testen und eine Lösung x durch ganzzahlige Division mit dem Rest Null zu finden. Für die Überprüfung einer gegebenen Lösung x reicht die ganzzahlige Multiplikation aus, aber es ist ein interessantes offenes Problem, ob es schnellere Überprüfungsmethoden gibt.
- ARNOLD SCHÖNHAGE beim Lösen von Gleichungen in Bezug auf die Komplexität von Rechnern
Sehr interessanterweise erwähnte er auch die Frage der Überprüfung der Matrixmultiplikation :
Es ist auch eine interessante Frage, ob die Überprüfung der Matrixmultiplikation, dh die Überprüfung, ob für gegebenes C AB = G ist, möglicherweise schneller durchgeführt werden könnte.
- ARNOLD SCHÖNHAGE beim Lösen von Gleichungen in Bezug auf die Komplexität von Rechnern
Dies ist seitdem gelöst worden, und es ist tatsächlich möglich, in -Zeit mit einem zufälligen Algorithmus zu verifizieren (wobei n × n die Größe der Eingabematrizen ist, so dass es sich im Grunde genommen um eine lineare Zeit in der Größe der Eingabe handelt ). Ich frage mich, ob es möglich ist, die Ganzzahlmultiplikation auf die Matrixmultiplikation zu reduzieren, insbesondere aufgrund ihrer Ähnlichkeiten, da die Ganzzahlmultiplikation von Karatsuba Ähnlichkeiten mit den nachfolgenden Matrixmultiplikationsalgorithmen aufweist. Dann können wir vielleicht auf irgendeine Weise den Matrixmultiplikations-Verifizierungsalgorithmus für die ganzzahlige Multiplikation nutzen.O(n2)n×n
Wie auch immer, da dies meines Wissens immer noch ein offenes Problem ist, das stärkere Problem ist sicherlich offen. Ich bin gespannt, ob die Lösung des Problems der Überprüfung der Gleichheit einen Einfluss auf das Problem der Überprüfung der Vergleichsungleichheit hat.ad<?cd
Eine geringfügige Abweichung von unserem Problem wäre, wenn die Brüche garantiert auf die niedrigsten Werte reduziert werden; In diesem Fall ist es leicht zu erkennen, ob . Kann dies einen Einfluss auf die Vergleichsprüfung für reduzierte Brüche haben?ab=?cd
Eine noch subtilere Frage: Was wäre, wenn wir einen Weg hätten, zu testen ? < c , würde sich dies auf das Testen eines d erstrecken ? = c ? Ich verstehe nicht, wie Sie diese "beiden Möglichkeiten" nutzen können, wie wir es für ein d getan haben ? < c d .ad<?cad=?cad<?cd
Verbunden:
Ungefähre Erkennung von nicht regulären Sprachen durch endliche Automaten
Sie arbeiten an der ungefähren Multiplikation und der randomisierten Verifikation, die ich nicht vollständig verstehe.
- math.SE: Wie kann man zwei Multiplikationen ohne Multiplikation vergleichen?
- Angenommen, wir durften in der Polynomzeit so weit vorverarbeiten, wie wir wollten. Können wir a b = c in linearer Zeit lösen ?cab=c
- Gibt es einen linearen nichtdetermistischen Ganzzahl-Multiplikationsalgorithmus? Siehe http://compgroups.net/comp.theory/nondeterministic-linear-time-multiplication/1129399
Es gibt bekannte Algorithmen zum Multiplizieren von n-Bit-Zahlen mit so etwas wie der Komplexität von O (n log (n) log (log (n)). Und wir können es nicht besser machen als O (n), weil wir uns zumindest die gesamten Eingaben ansehen müssen. Meine Frage ist: Können wir tatsächlich O (n) für eine geeignete Klasse von "nicht deterministischen" Algorithmen erreichen?
Genauer gesagt, gibt es einen Algorithmus, der zwei n-Bit-Binärzahlen "a" und "b" und eine 2n-Bit-Zahl "c" akzeptieren und Ihnen in O (n) -Zeit mitteilen kann, ob "a * b = c" ist? Wenn nicht, gibt es eine andere Form von Zertifikat C (a, b, c), mit der ein Algorithmus das Produkt in linearer Zeit testen kann? Wenn nicht die lineare Zeit, ist es dann einfacher, das Produkt zumindest asymptotisch zu testen, als es zu berechnen? Alle bekannten Ergebnisse in dieser Richtung wären willkommen.
John.
―Johnh4717