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 ) ) ?∀x∀y0≤x<n0≤y<nxyO(nlog⁡(n))O(log2⁡(n))


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(nlog⁡n)

4
n2

5
nf(n)f(n)=Θ(log⁡n)

Odpowiedzi:


14

n

pn#=exp⁡((1+o(1))nlog⁡n).
NnN<exp⁡((1+o(1))nlog⁡n)N<pn#nnlog⁡n∝log⁡(N)nnlog⁡(n)O(nlog⁡log⁡(N))O(nlog⁡log⁡(N)log⁡log⁡log⁡log⁡(N)log⁡log⁡log⁡(N))nlog⁡n∝log⁡NnO(log⁡N/log⁡log⁡N)O(log⁡N)O(log⁡Nlog⁡log⁡log⁡Nlog⁡log⁡log⁡log⁡N)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.