數學與樹學(娛樂向)

數學:

背景:在一次模擬賽中,Deepinc、DuanYue和Remarkable分別用了三個式子表示了同一個東西,而他們的式子目測毫無關係,並且是從不一樣的角度分析的,致使他們的作法確定是正確的,但卻各不相同,咱們來看一下。
數據結構

Deepinc:$ans=\frac{\sum\limits_{i=1}^{m}(i^k-(i-1)^k)*w[i]}{m^k}*(n-k+1)$spa

DuanYue:$g[x]=\sum\limits_{i=1}^{k}C_k^i(x-1)^{k-i}$code

                $ans=\frac{\sum\limits_{i=1}^{m}g(i)*w[i]}{m^k}*(n-k+1)$遞歸

Remarkable:$Max(x)=\sum\limits_{i=0}^{k-1}x^i(x-1)^{k-1-i}$數學

                    $ans=\frac{\sum\limits_{i=1}^{m}Max(i)*w[i]}{m^k}*(n-k+1)$it

下面咱們來證實它們是一個式子。class

證實:遍歷

首先咱們很容易發現一些相同的部分,那麼$n-k+1$和$m^k$這些部分咱們忽略掉。並且最後的式子中都有一個$\sum\limits_{i=1}^m$的統計答案式子,那麼咱們將求和項證實相等便可獲得三個式子相等。im

因此通過上述過程咱們的問題變爲:證實$x^k-(x-1)^k(1)=\sum\limits_{i=0}^{k-1}x^i(x-1)^{k-i-1}(2)=\sum\limits_{i=1}^{k}C_k^i(x-1)^{k-i}(3)$便可。統計

首先若是你有n次方差公式的話(1)=(2)應該能夠秒掉,那麼咱們來證實一下:

$a^k-b^k=(a-b)\sum\limits_{i=0}^{k-1}a^ib^{k-i-1}$

$a^k-b^k=a^k-a^{k-1}b+a^{k-1}b-a^{k-2}b^2+a^{k-2}b^2-……+ab^{k-1}-b^k$

      $=a^{k-1}(a-b)+a^{k-2}b(a-b)+……+b^{k-1}(a-b)$

      $=(a-b)\sum\limits_{i=0}^{k-1}a^ib^{k-1-i}$

而後把a套上x,b套上(x-1)一消,(1)=(2)就證完了。

接下來證實(3)=(1),中間有用到二項式定理:

$\sum\limits_{i=1}^{k}C_k^i(x-1)^{k-i}=\sum\limits_{i=1}^{k}C_k^i(x-1)^{k-i}1^i$

                    $=\sum\limits_{i=0}^{k}C_k^i(x-1)^{k-i}1^i-C_k^0(x-1)^{k}1^0$ 

                    $=x^k-(x-1)^k$

因此這三個式子本質相等。

樹學:

背景:作模擬題有一道Dsu on the tree,而後還要啓發式合併數據結構。而後就引人深思了……

1)數據結構(線段樹,平衡樹)啓發式合併的複雜度證實:

因爲啓發式合併是將小的插入大的,那麼新集合大小至少爲小的2倍,也就是小集合的大小翻倍了,但是咱們進行操做最多讓集合大小變爲$n$,而每次翻倍,那麼只能操做$logn$次,而一次操做要$O(nlogn)$,因此就是$O(nlog^2n)$嘍。

2)樹鏈剖分的複雜度證實:

先來幾條性質(定義(u,v)表示一條有向邊,size爲子樹大小):

1>若是$(x,y)$爲輕邊,則$size[y]<=size[x]/2$

證實:反證法。設$size[y]>size[x]/2$,則沒有任何其餘子樹$size$大於y節點,(由於y一我的都超了一半,別人加一塊兒都打不過它),那麼$(x,y)$爲重邊,與$(x,y)$輕邊矛盾。

2>從根到某一點x的路徑上輕邊個數很少於$O(logn)$

證實:首先x爲葉子時個數最多,因爲性質1,每沿輕邊向下遞歸一層,則子樹大小減半,最多遞歸$O(logn)$層,因此命題成立。

3>若是咱們定義,連續的重邊組成重鏈,那麼從根到某一點x的路徑上重鏈數很少於$O(logn)$

證實:重鏈的端點必定是輕邊,不然還會組成更長的重鏈,而由性質2,則可得命題成立。

結合性質二、3,咱們樹剖時通常對重鏈用線段樹,那麼一次操做就是$O(log^2n)$,對輕邊則跳,那麼一次操做是$O(logn)$,那麼一次操做是$O(log^2n)$,操做數爲m,通常而言n,m同階,總複雜度通常爲$O(nlog^2n)$。(固然這是我拿線段樹舉的例子,若是是樹套樹這種東西就按照一樣的思路算算唄)。

3)Dsu on the tree 複雜度證實:

由上述2)性質2>可知,咱們處理一個點時,因爲對輕邊處理兩次,重邊是遍歷的複雜度,那麼在以該點爲根子樹中,一個輕兒子最多被合併$O(logn)$次(由於這個輕兒子到該點最多有$O(logn)$條輕邊,而只有輕邊多作了貢獻),那麼複雜度就是$O(logn)$,總共就是

$O(nlogn)$。

相關文章
相關標籤/搜索