我目前執行傅立葉變換的一些物理問題,我的算法的一個巨大的瓶頸來自於標產品模2最有效的方法來評估一個二進制標產品模2
對於一個給定的評價整數N,我必須用二進制表示所有數字,最多2^N-1。 (例如15 = 2^3 + 2^2 + 2 + 2^0 =(1,1,1,1,0,...,0,1,2) 0))我必須評估它的標量乘以0到2^N-1的二進制數形式的模數2.
(例如,標量乘積1.15 =(1,0,0,... ,0)。(1,1,1,1,0,...,0)= 1 * 1 + 1 * 0 + ... = 1 mod 2)
請注意,組件保持二進制(1,1)= 1 * 1 + 1 * 1而不是1 * 1 + 2 * 2
這基本上是2 ^(2N)的標量積,我必須執行和減少模2
我有困難獲得超過N = 18。
我想知道是否一些巧妙的數學訣竅可以用來大大減少花在做它們上的時間。
我正在考慮某種遞歸(即在文件中保存N的結果並推導N + 1的結果),但我不確定這會有所幫助。事實上,通過這種遞歸,知道N的結果,我可以將N + 1的矢量對應於N部分加上一個附加數字,然後在每個標量乘積上剪切,而不是評估標量乘積,我不得不告訴我的電腦去讀大文件(因爲我可能無法將它全部保存在動態存儲器中),這可能比較耗時,可能比我必須爲每個產品執行的約20次乘法運算。
是否有任何已知的優化的數理論算法允許非常快速地評估這樣的標量乘積模2?有沒有我不知道我可以利用的規則或想法?
對不起,糟糕的格式,我只是無法讓LateX在這裏工作。
您可以只計算[按位與](https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#and(java.math.BigInteger))的這兩個數字,然後檢查奇偶性(見,如果[數的1比特](https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#bitCount())很奇怪)。 – kennytm
他們是如何使用的,也許評估的數量也可以減少?你是否只想要高層次的建議或針對特定體系結構的實施策略(哪些?)? Btw乳膠沒有在SO上啓用。 – harold
* N *有最大值嗎? – trincot