Moje obecne badania:
Wstępna próba ogólnych zasad
Można spróbować ustalić kilka ogólnych zasad rozwiązywania racjonalnego porównania:
Zakładając wszystkie pozytywne :a , b , c , d
a < b ∧ c ≥ d⟹ ab< cre
Zasadniczo oznacza to, że jeśli lewa strona jest mniejsza niż jedna, a prawa strona jest co najmniej jedna, lewa strona jest mniejsza niż prawa strona. W tej samej żyle:
a ≥ b ∧ c ≤ d⟹ ab≮ cre
Kolejna zasada:
(b>d)∧(a≤c)⇒[ab<cd]
Uważam tę zasadę za logiczną, ponieważ im większy mianownik, tym mniejsza liczba, tym większa licznik, tym większa liczba. Dlatego jeśli lewa strona ma większy mianownik
i mniejszy licznik, lewa strona będzie mniejsza.
Odtąd założymy, że , ponieważ w przeciwnym razie możemy albo rozwiązać powyższe reguły, albo odwrócić pytanie do , i tak i tak kończy się ten warunek.ca<c∧b<dcd<?ab
Reguły :
To Reguła zasadniczo stwierdza, że zawsze można odjąć liczniki od mianowników i ustawić wyniki jako liczniki, aby uzyskać równoważny problem. Pominę dowód.
( b - a )b< ( d- c )re⟺[ ab< cre] ∣∣∣a < c , b < d
zab< c - are- b⟺[ ab< cre] ∣∣∣a < c , b < d
Ta reguła pozwala odjąć lewy licznik i mianownik od prawego licznika i mianownika dla równoważnego problemu.
I oczywiście jest skalowanie:
kb k< cre⟺[ ab< cre] ∣∣∣a < c , b < d
You może użyć skalowania, aby zwiększyć znaczenie reguł odejmowania powyżej.
Korzystając z tych zasad, możesz bawić się rzeczami, stosować je wielokrotnie, w inteligentnych kombinacjach, ale zdarzają się przypadki, gdy liczby są bliskie i patologiczne.
Stosując poprzednie reguły, możesz zredukować wszystkie te problemy do:
zab<ap+qbp′+q′⟺ab<qq′∣∣∣a>q,b>q′
Czasami możesz rozwiązać to teraz, a czasem nie. Przypadki patologiczne są zwykle w postaci:
ab<cd∣∣a>c,b>d,c∈O(a),d∈O(b)
Potem odwracasz i dajesz to samo, tylko z odrobiną mniej. Każde zastosowanie reguł + flip zmniejsza to o cyfrę / bit. AFAICT, nie możesz go szybko rozwiązać, chyba że zastosujesz reguły razy (raz dla każdej cyfry / bitu) w przypadku patologicznym, negując ich pozorną przewagę.O(n)
Otwarty problem?
Uświadomiłem sobie, że ten problem wydaje się trudniejszy niż niektóre obecne otwarte problemy.
Jeszcze słabszym problemem jest określenie:
ad=?bc
A jednak słabszy:
ad=?c
Jest to otwarty problem weryfikacji mnożenia . Jest słabszy, ponieważ gdybyś miał sposób ustalić, czy , to możesz łatwo ustalić, czy , testując przy użyciu algorytmu dwa razy, , . Iff jest prawdą, wiesz, że .a d ? = b c a d ? < b c b c ? < a d a d ≠ b cad<?bcad=?bcad<?bcbc<?adad≠bc
Teraz był otwartym problemem, przynajmniej w 1986 roku:ad=?c
Złożoność mnożenia i dzielenia. Zacznijmy od bardzo prostego równania ax = b. W przypadku liczb całkowitych sprawdzenie ich możliwości rozwiązania i znalezienie rozwiązania x jest możliwe poprzez dzielenie liczb całkowitych z resztą zera. Do sprawdzenia danego rozwiązania x wystarczy mnożenie liczb całkowitych, ale interesujący jest otwarty problem, czy istnieją szybsze metody weryfikacji.
- ARNOLD SCHÖNHAGE w rozwiązywaniu równań pod względem złożoności obliczeniowej
Co ciekawe, wspomniał także o kwestii weryfikacji mnożenia macierzy :
Ciekawe jest również pytanie, czy weryfikacja mnożenia macierzy, tj. Sprawdzenie, czy AB = G dla danego C, mogłaby być wykonana szybciej.
- ARNOLD SCHÖNHAGE w rozwiązywaniu równań pod względem złożoności obliczeniowej
Zostało to już rozwiązane i rzeczywiście można zweryfikować w czasie za pomocą algorytmu losowego (gdzie jest rozmiarem macierzy wejściowych, więc jest to zasadniczo czas liniowy w rozmiar wejścia). Zastanawiam się, czy jest możliwe zmniejszenie mnożenia liczb całkowitych do mnożenia macierzy, szczególnie z ich podobieństwami, biorąc pod uwagę podobieństwa mnożenia liczb całkowitych Karatsuba do algorytmów mnożenia macierzy, które następnie. Być może w jakiś sposób możemy wykorzystać algorytm weryfikacji macierzy do mnożenia liczb całkowitych.n × nO(n2)n×n
W każdym razie, skoro jest to, według mojej wiedzy, problem otwarty, silniejszy problem pewnością jest otwarty. Jestem ciekawy, czy rozwiązanie problemu weryfikacji równości miałoby jakiś wpływ na problem weryfikacji nierówności porównania.ad<?cd
Niewielka odmiana naszego problemu byłaby, gdyby zagwarantowano, że ułamki zostaną zredukowane do najniższych wartości; w takim przypadku łatwo jest stwierdzić, czy . Czy może to mieć wpływ na weryfikację porównania dla ułamków zredukowanych?ab=?cd
Jeszcze subtelniejsze pytanie, co by było, gdybyśmy mieli sposób przetestować , czy obejmowałoby to testowanie ? Nie rozumiem, jak możesz użyć tego „w obie strony”, tak jak to zrobiliśmy w przypadku .o d ? = c a d ? < c dad<?cad=?cad<?cd
Związane z:
Przybliżone rozpoznawanie języków nieregularnych przez skończone automaty
Pracują nad przybliżonym pomnożeniem i losową weryfikacją, czego nie do końca rozumiem.
- math.SE: Jak porównać dwa mnożenia bez mnożenia?
- Załóżmy, że wolno nam wstępnie przetworzyć tak długo, jak chcieliśmy w czasie wielomianowym, czy możemy rozwiązać w czasie liniowym?a b = ccab=c
- Czy istnieje niedeterministyczny algorytm mnożenia liczb całkowitych w czasie liniowym? Zobacz http://compgroups.net/comp.theory/nondeterministic-linear-time-multiplication/1129399
Istnieją dobrze znane algorytmy mnożenia liczb n-bitowych przez coś takiego jak złożoność O (n log (n) log (log (n))). Nie możemy zrobić nic lepszego niż O (n), ponieważ przynajmniej musimy spojrzeć na całe dane wejściowe. Moje pytanie brzmi: czy rzeczywiście możemy osiągnąć O (n) dla odpowiedniej klasy algorytmów „niedeterministycznych”?
Mówiąc dokładniej, czy istnieje algorytm, który może zaakceptować dwie n-bitowe liczby binarne „a” i „b” oraz 2n-bitową liczbę „c” i powiedzieć w czasie O (n), czy „a * b = c”? Jeśli nie, to czy istnieje jakaś inna forma certyfikatu C (a, b, c), która może być wykorzystana przez algorytm do testowania produktu w czasie liniowym? Jeśli nie czas liniowy, to czy problem testowania produktu jest co najmniej asymptotycznie łatwiejszy niż jego obliczenie? Wszelkie znane wyniki w tym zakresie byłyby mile widziane.
Jan.
―Johnh4717