Jak blisko liniowego mnożenia, dodawania i porównywania (na liczbach całkowitych)?

21

Nawiązując do artykułu KW Regana „Połącz gwiazdy” , na końcu wspomina, że ​​wciąż otwartym problemem jest znalezienie reprezentacji liczb całkowitych, tak że operacje dodawania, mnożenia i porównywania można obliczać w czasie liniowym:

Czy istnieje reprezentacja liczb całkowitych, aby dodawanie, mnożenie i porównywanie były wykonalne w czasie liniowym? Zasadniczo, czy istnieje liniowy czas dyskretnie uporządkowany pierścień?

(1) Jak blisko możemy zbliżyć się do liniowego mnożenia i dodawania czasu bez porównywania? Zakładam, że rozmiary problemów mogą się różnić, dlatego potrzebujemy struktury danych / algorytmu, który umożliwia zmianę rozmiarów liczb całkowitych.

(2) W przypadku pełnego problemu możemy założyć, że znajdziemy optymalny schemat mnożenia, dodawania i porównywania liczb całkowitych. Jak bardzo zbliżamy się do najwolniejszej z tych trzech operacji (w najgorszym przypadku) względem czasu liniowego? A w tej notatce, jak szybkie byłyby inne operacje?

FORMALNE OŚWIADCZENIE O PROBLEMACH

Jak wspomina Emil Jeřábek, chcielibyśmy wykluczyć trywialne przypadki i skoncentrować się na najgorszym przypadku tego pytania.

Pytamy więc, dla nieujemnych liczb całkowitych i y, gdzie 0 x < n i 0 y < n , czy możemy znaleźć strukturę danych / algorytm, który może wykonywać dodawanie, mnożenie i porównywać z \ między x i y w czasie O ( n log ( n ) ) i przestrzeni O ( log 2 ( n ) ) ?xy0x<n0y<nxyO(nlog(n))O(log2(n))

Matt Groff
źródło
1
Wspomnę, że możliwe jest stworzenie schematu, który wykonuje te operacje w czasie na nieujemnych liczbach całkowitych, gdzie n jest bitem największej liczby całkowitej (zakładając, że znamy n wcześniej). Zastanawiam się, czy możemy to zrobić lepiej i zrobić to w czasie proporcjonalnym do obliczanych bieżących liczb całkowitych. Θ(n)nn
Matt Groff,
5
@TysonWilliams: Tak! Dwójkowy!
Jeffε
2
O(nlogn)
4
n2
5
nf(n)f(n)=Θ(logn)

Odpowiedzi:

14

n

pn#=exp((1+o(1))nlogn).
NnN<exp((1+o(1))nlogn)N<pn#nnlognlog(N)nnlog(n)O(nloglog(N))O(nloglog(N)loglogloglog(N)logloglog(N))nlognlogNnO(logN/loglogN)O(logN)O(logNlogloglogNloglogloglogN)
Joe Fitzsimons
źródło
1
@vzn: Tak, chciałem wspomnieć o tym dla porównań, ale potem przyszło mi do głowy, że może być szybsza operacja porównania dzięki mieszanej reprezentacji radix.
Joe Fitzsimons