Załóżmy, że mam dwie listy liczb całkowitych dodatnich o ograniczonej męskości i biorę iloczyn wszystkich elementów każdej listy. Jaki jest najlepszy sposób ustalenia, który produkt jest większy?
Oczywiście mogę po prostu obliczyć każdy produkt, ale mam nadzieję, że istnieje bardziej wydajne podejście, ponieważ liczba cyfr w produktach wzrośnie liniowo wraz z liczbą terminów, dzięki czemu całe obliczenie będzie kwadratowe.
Gdybym dodawał zamiast zwielokrotniać, mógłbym zastosować „strategię suwaków” polegającą na stopniowym dodawaniu wpisów z pierwszej listy i odejmowaniu od drugiej, unikając potrzeby obliczania (dużych) sum ogólnych. Analogiczne techniki dla produktów polegałyby na sumowaniu logarytmów wpisów, ale problem polega obecnie na tym, że obliczanie logów wymaga użycia niedokładnej arytmetyki. Chyba że istnieje jakiś sposób, aby udowodnić, że błąd numeryczny jest nieistotny?
źródło
Odpowiedzi:
(Rozumiem opis problemu, dlatego liczby wejściowe są ograniczone stałą, więc nie będę śledził zależności od granicy).
Problem można rozwiązać w czasie liniowym i przestrzeni logarytmicznej za pomocą sum logarytmów. Bardziej szczegółowo algorytm wygląda następująco:
źródło