EI 的第二代多項式板子整體架構理念

2021-09-12 19:17:20 字數 2472 閱讀 1474

這是一次將多項式模板的易用性高效性結合的嘗試。進度見此 pastebin

怎樣有易用性?

封裝,用乙個vector來存多項式,過載各種運算,特點是用的時候比較輕鬆,但本身的特性導致效率必然不能達到最優。

大概開放形如這樣的介面:

struct poly ;`

int*

base()

;// iterator

int&

operator

(int index)

;// reference

poly operator+(

const poly& rhs)

const

;// basic calculation

// operator + - * /

poly inv()

const

;// basic elementary function

poly pow

(int k)

;// power};

struct evaluationhelper

;struct polymod

;poly operator

""_z

(unsigned

long

long a);}

// sugar in c++11(?), you can use a_z to express a polynomial az now.

怎樣有高效性?

用的時候看不見的地方,在封裝的內部盡量提高效率,盡量使用較為友好的 ntt 方式,並且計算多項式帶入初等函式時,使用 negiizhao 整理的 fft 次數更少的迭代方法。

這點倒是沒什麼新穎的,頂多就是把位翻轉能做的某些工作在初始化的時候就幫忙做一下,有時間試一下 montgomery 約化什麼的管不管用:

struct ntt 

void

fft(

int* a,

int lgn,

int d =1)

// ...

}} ntt;

經過測試,某些形式特殊的陣列的 ntt 改良版本,看似省略了部分計算,實則快取不友好,還不如直接做……

在比較普遍的做法中,我們倍增時通常會遞迴地計算需要的一些子部分,例如大部分初等函式中途都會用到倒數,而倍增的時候倒數內部本來是沒有必要重複計算一些東西的。這時為了效率,我們必須改遞迴為同輪遞推的倍增方法,也可以認為是一種記憶化搜尋。這樣一來我們呼叫的時候就達到了**中真正等價的 fft 次數。為此我搞了乙個牛頓迭代的外包結構體

struct newton  nit;
它的外包作用就是幫助進行迭代的細節,因此我們在寫別的巢狀使用的時候就可以像這樣:

poly poly::

sqrt()

const

}return g.

slice

(deg()

);}

求積分的時候就要這種東西。

沒有必要每次都重新算一遍,設計乙個倍增式預處理的結構。

struct ****** 

******()

void

check

(int k)

}int

gfac

(int k)

// ...

} simp;

還不打算整合板子,見提交。

所謂的polymod類的用法是類似實現乙個binaryoperator的協議。特點在於多次取模同乙個多項式的時候,可以預處理這個多項式翻轉後的逆元的 ntt 的值。這樣能夠有效節省之後重複的計算。在單次乘法消耗大的情況下,減少快速冪過程中乘法的次數是極為有效的減小常數的方法,由四毛子 (four russians) 方法可以做到 log⁡2

n+θ(

log⁡

nlog

⁡log⁡n

)\log_2 n + \theta\left(\frac\right)

log2​n

+θ(log

logn

logn​)

次乘法。所以封裝了乙個快速冪裝置

template

<

classt,

class

comp

>

struct additionchain

static additionchain fourrussians

(const t &t,

const comp &comp,

int lgn,

const t &unit =1)

t pow

(int n)

const

};

第二代的Linux發行版

美國有乙個叫做 451集團 的組織,專門研究企業 it環境中的技術創新問題,發布需要付費購買的研究報告,並以此 為生 451集團 的研究報告是要賣錢的,言之無物的文章,對他們毫無用處。451集團 裡面有個 caos 理論部落格,這裡 caos 是指 commercial adoption of op...

5 理想中的Redis5 1 第二代Codis

codis作者談到第二代codis,即reborndb的發展方向 很值得學習 在開源codis後,我們收到了很多社群的反饋,大多數的意見是集中在zookeeper的依賴,redis的修改,還有為啥需要proxy上面,我們也在思考,這幾個東西是不是必須的。當然這幾個部件帶來的好處毋庸置疑,上面也闡述過...

組態王基於第二代Web發布平台的資訊整合解決方案

解決方案技術亮點 組態畫面遠端發布,圖形監控變數資料 以列表 曲線方式顯示變數實時資料 以列表 曲線方式顯示變數歷史資料 以圖表方式顯示及查詢資料庫資料 遠端使用者管理 分配操作許可權 遠端監控技術的挑戰 隨著internet的普及以及組態軟體開發能力的不斷提高,web server技術對於大多數組...