Wenn Sie die Operatoren (dh Sie haben den Energieoperator nicht eingeschlossen), sind wahrscheinlich alle Ihre Probleme entscheidbar.{+,−,×,/}
Gleichheit mit Null testen
Betrachten wir zum Beispiel . Dann können Sie als formales Symbol behandeln, so dass jedes Blatt ein Polynom in (z. B. ist die Ganzzahl das konstante Polynom ; ist das Polynom von Grad 1). Jetzt können Sie den Baum als rationales Polynom über ausdrücken , wobei das formale Unbekannte ist.L=Z∪{π}πZ[π]55ππ+0Zπ
Angenommen, dieses Polynom ist . Testen Sie, ob das Nullpolynom ist (Grad ). Wenn es nicht das Nullpolynom ist, ist der Ausdruck ungleich Null. Wenn das Nullpolynom ist und nicht das Nullpolynom ist, ist der Ausdruck gleich Null. Die Richtigkeit dieses Verfahrens folgt aus der Tatsache , daß ist transzendentalen .p(π)/q(π)p(π)−∞p(π)q(π)π
Wie komplex ist dieses Verfahren? Die Antwort hängt vom Rechenmodell ab. Nehmen wir an, dass jeder Operator eine konstante Zeit für die Auswertung benötigt (unabhängig von der Größe der Operanden). Dann hängt die Komplexität von der Größe der resultierenden Polynome ab. Der Grad des Polynoms kann exponentiell mit der Tiefe des Baums wachsen. Wenn Sie also das Polynom rekursiv erstellen und explizit (in Koeffizientenform) ausdrücken, ist die Laufzeit in der Tiefe des Baums höchstens exponentiell. Glücklicherweise wächst der Grad höchstens linear in der Anzahl der Blätter im Baum, so dass die Laufzeit eines deterministischen Algorithmus in der Größe des Baums linear ist.
Unter der Annahme einer einfachen Darstellung des Baums und eines vereinfachten Rechenmodells erhalten Sie daher einen linearen Zeitalgorithmus für Nulltests, wenn die Operatoren .{+,−,×,/}
Diese Prozedur funktioniert nicht nur für , sondern auch für und .L=Z∪{π}N∪{π}Q∪{π}
Das gleiche Verfahren funktioniert auch für , wenn wir eine vernünftige Vermutung annehmen können: dass und algebraisch unabhängig sind. Es ist nicht bekannt, ob diese Vermutung richtig ist, aber es scheint wahrscheinlich. Wie auch immer, hier ist der Ansatz. Wir behandeln das Polynom als ein multivariates Polynom über zwei Unbekannte anstelle eines Unbekannten, aber angesichts der algebraischen Unabhängigkeit von und überträgt sich alles wie zuvor . Es funktioniert auch für und , wiederum unter der Annahme der Vermutung.L=Q∪{π,e}πeπ,eπeL=Z∪{π,e}L=N∪{π,e}
Wenn Sie Lust haben, können Sie randomisierte Algorithmen für die Prüfung der Polynomidentität verwenden. Wenn , ergeben sie Folgendes: Wählen Sie eine zufällige Primzahl und eine zufällige ganze Zahl ; Ersetzen Sie jede Instanz von durch . und prüfen Sie dann, ob der resultierende Ausdruck ergibt . (Wenn Sie sowohl als auch , wählen Sie zwei zufällige Ganzzahlen und .) Sie können diesen Test mehrmals wiederholen. Wenn diese Prozedur jemals etwas ungleich Null ergibt (moduloL=Z∪{π}rsπ∈{0,…,r−1}πsπ0modrπesπser), dann ist der ursprüngliche Ausdruck sicherlich nicht Null. Wenn Sie immer Null (Modulo ) erhalten, ist der ursprüngliche Ausdruck mit hoher Wahrscheinlichkeit gleich Null. Dies kann in einigen Rechenmodellen effizienter sein (z. B. wenn die Zeit zum Auswerten eines einzelnen Operators von der Größe der Operanden abhängt).r
Zeichenvergleich
Sie können das Vorzeichen des Ausdrucks auch mit ähnlichen Prozeduren finden (wiederum unter der Annahme, dass Sie den Operator ^ ausgeschlossen haben, und erneut unter der Annahme, dass und algebraisch unabhängig sind). Bewerten Sie den Ausdruck als rationales Polynom über . Angenommen, Sie haben festgestellt, dass und . Sie möchten wissen, ob oder nicht.πep(π,e)/q(π,e)Q[π,e]p(π,e)/q(π,e)≠0q(π,e)≠0p(π,e)/q(π,e)>0
Hier ist ein Ansatz. Man beachte, dass wenn . Daher können wir ein neues Polynom und dieses auf das Problem der Bewertung des Vorzeichens von reduzieren. . Grundsätzlich müssen wir das Vorzeichen eines rationalen Polynoms in und bewerten . Wir wissen, dass dies zu etwas ungleich Null führt.p(π,e)/q(π,e)>0p(π,e)⋅q(π,e)>0r(π,e)=p(π,e)⋅q(π,e)r(π,e)πe
Ein Ansatz besteht darin, und mit Genauigkeitsbits zu berechnen und dann entsprechend zu bewerten , wobei untere und obere Grenzen für . Wenn 0 in diesem Intervall enthalten ist, verdoppeln Sie , bis die Untergrenze streng positiv oder die Untergrenze streng negativ ist.πekr(π,e)r(π,e)k
Was ist die Komplexität dieses Ansatzes? Wennergibt einen Wert , dann denke ich, dass die Laufzeit in der Größe der Eingabe und in polynomisch sein wird .|r(π,e)|ϵlg1/ϵ
Es mag einen besseren Algorithmus geben, aber dies ist der beste, den ich derzeit finden kann.
Fazit
Das Mitnehmen ist, dass der Energieversorger (^) die eigentliche Schwierigkeitsquelle ist. Ohne den Netzbetreiber können alle Ihre Probleme ohne allzu große Schwierigkeiten gelöst werden (unter der Annahme einer vernünftigen Vermutung).