Article View: pl.comp.programming
Article #216819Jak najszybciej obliczyć wieloskładnikową sumę potęg?
From: osobliwy nick
Date: Fri, 07 Feb 2020 12:48
Date: Fri, 07 Feb 2020 12:48
23 lines
2907 bytes
2907 bytes
Mam do wykonania pewną procedurę i zastanawiam się jak skonstruować algorytm, który wykonałby to najszybciej. Weźmy pewną liczbę zapisaną binarnie. Docelowo mają to być liczby 128-bitowe, ale w tym przykładzie weźmy liczbę 1011011 = 64+32*0+16+8+4*0+2+1. Interesują nas tylko bity, które mają wartość niezerową: 64+16+8+2+1. Dla tych bitów musimy policzyć następujące współczynniki: x1=64/2^(y-1) * 1 x2=16/2^(y-1) * 2 x3=8/2^(y-1) * 3 x4=2/2^(y-1) * 4 x5=1/2^(y-1) * 8 Współczynników będzie tyle samo, co jedynek w zapisie binarnym naszej liczby. y to liczba jedynek w zapisie binarnym naszej liczby, w naszym przykładzie wynosi 5. Gdy mamy te współczynniki: x1=4 x2=2 x3=2 x4=1 x5=1 Obliczamy liczbę: L = (a^0*x1+a^1*x2+a^2*x3+a^3*x4+a^4*x5)*2^(y-1) "a" może by równe jakiejś liczbie całkowitej podzielonej przez 2, na przykład: 0.5, 1.5, 2.5, -3.5 itd. Zastanawiam się jak to najszybciej wykonać. Jeśli liczba ma mieć wiele bitów np. 128, to ostatnia potęga również wynosić aż 127. Stąd niezbędny jest algorytm szybkiego potęgowania. Jednak nawet wówczas może zajść potrzeba wykonania aż 128 potęgowań. Czy da się te potęgowania wykonać jakoś symultanicznie? Algorytm nie musi czekać na obliczenie np. a^10, żeby móc zacząć liczyć a^11. Mógłby liczyć wszystkie potęgi na raz. Liczenie tego po kolei zajmie t1+t2+t3+...tn czasu, gdzie "ti" to czasy potęgowania kolejnych a^i. A gdyby algorytm liczył symultanicznie, to zajmie mu to co najwyżej tyle czasu ile potrzebuje dla najwyższej, ostatniej potęgi. Czy coś takiego jest możliwe? Ma to jakąś nazwę w branży?
Technical Details
Message-ID:
<e033f360-7c36-45f9-8399-7196d5549805@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.128.87.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mailShow Full Headers
Complete Article Headers
X-Received: by 2002:adf:fa87:: with SMTP id h7mr4838181wrr.172.1581079710542; Fri, 07 Feb 2020 04:48:30 -0800 (PST) X-Received: by 2002:a05:6214:1149:: with SMTP id b9mr6463731qvt.227.1581079710232; Fri, 07 Feb 2020 04:48:30 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.128.87.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Fri, 7 Feb 2020 04:48:30 -0800 (PST) Complaints-To: groups-abuse@google.com Injection-Info: google-groups.googlegroups.com; posting-host=185.186.156.102; posting-account=5sNFBgoAAAAxlae8lv99mPyGsDs6ynwB NNTP-Posting-Host: 185.186.156.102 User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <e033f360-7c36-45f9-8399-7196d5549805@googlegroups.com> Subject: Jak najszybciej obliczyć wieloskładnikową sumę potęg? From: osobliwy nick <osobliwy.nick@gmail.com> Injection-Date: Fri, 07 Feb 2020 12:48:30 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit