青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-22  評(píng)論-7  文章-0  trackbacks-0

【引言】

          在解題過程中,我們有時(shí)需要維護(hù)一個(gè)數(shù)組的前綴和S[i]=A[1]+A[2]+...+A[i]。

          但是不難發(fā)現(xiàn),如果我們修改了任意一個(gè)A[i],S[i]、S[i+1]...S[n]都會(huì)發(fā)生變化。

          可以說,每次修改A[i]后,調(diào)整前綴和S[]在最壞情況下會(huì)需要O(n)的時(shí)間。

          當(dāng)n非常大時(shí),程序會(huì)運(yùn)行得非常緩慢。

          因此,這里我們引入“樹狀數(shù)組”,它的修改與求和都是O(logn)的,效率非常高。

【理論】

          為了對(duì)樹狀數(shù)組有個(gè)形 象的認(rèn)識(shí),我們先看下面這張圖。


          如圖所示,紅色矩形表示的數(shù)組C[]就是樹狀數(shù)組。

          這里,C[i]表示A[i-2^k+1]到A[i]的和,而k則是i在二進(jìn)制時(shí)末尾0的個(gè)數(shù),

          或者說是i用2的冪方和表示時(shí)的最小指數(shù)。

         ( 當(dāng)然,利用位運(yùn)算,我們可以直接計(jì)算出2^k=i&(i^(i-1)) )

          同時(shí),我們也不難發(fā)現(xiàn),這個(gè)k就是該節(jié)點(diǎn)在樹中的高度,因而這個(gè)樹的高度不會(huì)超過logn。

          所以,當(dāng)我們修改A[i]的值時(shí),可以從C[i]往根節(jié)點(diǎn)一路上溯,調(diào)整這條路上的所有C[]即可,

          這個(gè)操作的復(fù)雜度在最壞情況下就是樹的高度即O(logn)。  

          另外,對(duì)于求數(shù)列的前n項(xiàng)和,只需找到n以前的所有最大子樹,把其根節(jié)點(diǎn)的C加起來即可。

          不難發(fā)現(xiàn),這些子樹的數(shù)目是n在二進(jìn)制時(shí)1的個(gè)數(shù),或者說是把n展開成2的冪方和時(shí)的項(xiàng)數(shù),

          因此,求和操作的復(fù)雜度也是O(logn)。

          接著,我們考察這兩種操作下標(biāo)變化的規(guī)律:

          首先看修改操作:

          已知下標(biāo)i,求其父節(jié)點(diǎn)的下標(biāo)。
          我們可以考慮對(duì)樹從邏輯上轉(zhuǎn)化:

         如圖,我們將子樹向右對(duì)稱翻折,虛擬出一些空白結(jié)點(diǎn)(圖中白色),將原樹轉(zhuǎn)化成完全二叉樹。

         有圖可知,對(duì)于節(jié)點(diǎn)i,其父節(jié)點(diǎn)的下標(biāo)與翻折出的空白節(jié)點(diǎn)下標(biāo)相同。

         因而父節(jié)點(diǎn)下標(biāo) p=i+2^k  (2^k是i用2的冪方和展開式中的最小冪,即i為根節(jié)點(diǎn)子樹的規(guī)模)

         即  p = i + i&(i^(i-1)) 。

         接著對(duì)于求和操作:

         因?yàn)槊靠米訕涓采w的范圍都是2的冪,所以我們要求子樹i的前一棵樹,只需讓i減去2的最小冪即可。

         即  p = i - i&(i^(i-1)) 。

        

         至此,我們已經(jīng)比較詳細(xì)的分析了樹狀數(shù)組的復(fù)雜度和原理。

         在最后,我們將給出一些樹狀數(shù)組的實(shí)現(xiàn)代碼,希望讀者能夠仔細(xì)體會(huì)其中的細(xì)節(jié)。

【代碼】

 求最小冪2^k:

int LowBit(int n)
{
    return n & (-n);
}
求前n項(xiàng)和:
int Sum(int nPos)
{
    int nSum = 0;
    while (nPos > 0)
    {
        nSum += C[nPos];
        nPos -= LowBit(nPos);
    }

    return nSum;
}
對(duì)某個(gè)元素進(jìn)行加法操作:
void Modify(int nPos, int delta)
{
    while (nPos <= DATA_SIZE)
    {
        C[nPos] += delta;
        nPos += LowBit(nPos);
    }
}

以下代碼是樹狀數(shù)組和普通加法的比較代碼(VC6.0編譯)
#include <iostream.h>
#include 
<stdlib.h> 
#include 
<malloc.h>
#include 
<windows.h>

#define DATA_SIZE 10000000

int A[DATA_SIZE];
int C[DATA_SIZE];

int LowBit(int n)
{
    
return n & (-n);
}



// Binary Indexed tree
int Sum1(int nPos)
{
    
int nSum = 0;
    
while (nPos > 0)
    
{
        nSum 
+= C[nPos];
        nPos 
-= LowBit(nPos);
    }


    
return nSum;
}


void Modify(int nPos, int delta)
{
    
while (nPos <= DATA_SIZE)
    
{
        C[nPos] 
+= delta;
        nPos 
+= LowBit(nPos);
    }

}


// Common Plus
int Sum2(int nPos)
{
    
int nSum = 0;
    
for ( int i=1; i<DATA_SIZE; i++ )
    
{
        nSum 
+= A[i];
    }


    
return nSum;
}



main()
{

    DWORD dwBegin,dwEnd;
    dwBegin 
= dwEnd = GetTickCount();

    
int nIndexChanged = 10;
    
int nData = 100;

    A[nIndexChanged] 
= nData;
    Modify(nIndexChanged,nData);

    
int nSum = Sum1(DATA_SIZE-1);
    cout
<<nSum<<endl;
    dwEnd 
= GetTickCount();
    
int nDiff = dwEnd-dwBegin;
    cout
<<"Time1:"<<dwEnd-dwBegin<<endl;
    cout
<<"---------------------"<<endl;

    dwBegin 
= dwEnd = GetTickCount();
    nSum 
= Sum2(DATA_SIZE-1);
    cout
<<nSum<<endl;
    dwEnd 
= GetTickCount();
    nDiff 
= dwEnd-dwBegin;
    cout
<<"Time2:"<<nDiff<<endl;
    cout
<<"---------------------"<<endl;
    
    
return 0;
}


posted on 2010-05-31 14:48 楚天清秋 閱讀(504) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            蜜臀久久99精品久久久久久9 | 99精品热视频只有精品10| 一区二区三区欧美成人| 亚洲日本aⅴ片在线观看香蕉| 蜜臀av国产精品久久久久| 国产精品久久福利| 久久精品国产亚洲5555| 欧美一级电影久久| 亚洲欧美日韩视频二区| 欧美色欧美亚洲另类七区| 亚洲国产成人在线视频| 激情久久久久久久久久久久久久久久| 麻豆精品传媒视频| 国内精品美女在线观看| 亚洲国产精品久久91精品| 一色屋精品视频在线观看网站| 亚洲盗摄视频| 亚洲人成久久| 欧美成人午夜激情在线| 亚洲黑丝一区二区| 99精品国产在热久久婷婷| 欧美成人免费在线| 亚洲三级免费电影| 亚洲一二三区精品| 国产精品久久久久久久久久尿 | 伊甸园精品99久久久久久| 午夜国产精品影院在线观看| 亚洲国产日韩欧美在线动漫| 美女图片一区二区| 亚洲国产欧美另类丝袜| 在线亚洲激情| 国产精品高潮视频| 午夜在线成人av| 美女精品在线| 亚洲精品中文字幕女同| 欧美网站在线观看| 亚洲欧美日韩精品久久亚洲区| 亚洲精品少妇网址| 欧美日韩专区| 欧美在线一级va免费观看| 免费视频最近日韩| 99精品国产在热久久| 国产精品福利av| 91久久国产综合久久| 亚洲丝袜av一区| 国产日韩欧美在线播放不卡| 久久久亚洲午夜电影| 亚洲精品一区二区三区av| 性欧美暴力猛交69hd| 欧美日韩少妇| 午夜久久资源| 亚洲国产精品999| 香蕉久久国产| 91久久久在线| 欧美第一黄网免费网站| av成人国产| 快she精品国产999| 中文av字幕一区| 激情综合网激情| 欧美午夜在线一二页| 久久网站热最新地址| 一本一本久久| 亚洲免费视频一区二区| 伊人一区二区三区久久精品| 欧美三区在线| 可以免费看不卡的av网站| 中日韩高清电影网| 欧美黄色aa电影| 欧美中文在线免费| 亚洲深夜福利网站| 亚洲国产一区二区视频 | 亚洲欧洲精品一区二区三区波多野1战4| 国产亚洲精品bt天堂精选| 亚洲午夜精品国产| 欧美激情一区二区| 久久久高清一区二区三区| 一区二区三区色| 亚洲国产人成综合网站| 国产一区二区精品| 国产精品成人观看视频免费| 亚洲自拍偷拍视频| 亚洲美女在线一区| 亚洲电影天堂av| 噜噜噜久久亚洲精品国产品小说| 亚洲国产va精品久久久不卡综合| 久久嫩草精品久久久精品一| 午夜精品福利在线观看| 一区二区三区四区国产| 亚洲欧洲午夜| 亚洲国产精品123| 欧美成人免费在线观看| 一本大道久久a久久综合婷婷 | 亚洲高清不卡| 国内精品久久久久久久影视麻豆 | 亚洲影音先锋| 国产精品99久久久久久久久久久久| 国产精品久久久久av免费| 欧美大色视频| 亚洲男人的天堂在线| 久久这里有精品15一区二区三区| 亚洲激情中文1区| 亚洲国产精品久久| 亚洲电影欧美电影有声小说| 国产一区二区黄色| 欧美激情精品久久久六区热门| 一区二区三区视频在线看| 亚洲九九精品| 久久嫩草精品久久久精品一| 久久精品国产99精品国产亚洲性色 | 国产欧美日韩一区二区三区在线 | 久久免费99精品久久久久久| 亚洲国产黄色片| 亚洲第一精品福利| 亚洲国产精品久久久久| 亚洲黄页一区| 亚洲六月丁香色婷婷综合久久| 欧美在线观看网站| 久久超碰97人人做人人爱| 久久久99精品免费观看不卡| 久久久久久久久久久久久女国产乱| 亚洲精品日产精品乱码不卡| 日韩视频永久免费观看| 一区二区三区国产精品| 亚洲一区三区电影在线观看| 欧美一进一出视频| 久久久亚洲国产天美传媒修理工| 亚洲一区二区欧美| 性18欧美另类| 美女国内精品自产拍在线播放| 亚洲欧美一区二区原创| 欧美中文字幕久久| 欧美不卡激情三级在线观看| 亚洲国产精品免费| 男男成人高潮片免费网站| 亚洲国产精品一区二区www| 日韩一二三在线视频播| 欧美一级成年大片在线观看| 猛男gaygay欧美视频| 欧美三级在线播放| 韩国女主播一区二区三区| 亚洲免费观看高清在线观看| 午夜精品免费| 欧美黑人国产人伦爽爽爽| 亚洲视频网站在线观看| 久久久精品视频成人| 欧美日韩高清在线播放| 国产亚洲精品高潮| 国产婷婷色一区二区三区在线 | 国产日韩精品电影| 亚洲国产精品一区二区www在线| 国产偷国产偷亚洲高清97cao| 国产精品久在线观看| 亚洲国产精品一区二区第四页av| 在线观看91精品国产入口| 亚洲一区中文| 欧美福利一区二区三区| 午夜免费电影一区在线观看| 欧美激情国产日韩| 伊人婷婷久久| 久久国产黑丝| 久久天堂成人| 欧美顶级大胆免费视频| 午夜久久99| 国产精品二区在线观看| 亚洲人精品午夜| 久热这里只精品99re8久| 亚洲一区二区三区影院| 欧美日韩一区二区三区四区在线观看 | 午夜视频一区| 欧美日韩中字| 日韩一区二区精品| 亚洲一区二区精品视频| 亚洲国产精品久久久久婷婷884| 亚洲欧洲精品一区二区三区 | 久久精品二区亚洲w码| 日韩一二三区视频| 欧美高清视频免费观看| 亚洲国产精品99久久久久久久久| 亚洲激情电影中文字幕| 久久亚洲私人国产精品va媚药| 母乳一区在线观看| 亚洲毛片在线观看.| 免费在线国产精品| 亚洲国产精品一区二区第四页av| 一区二区av在线| 亚洲电影免费在线观看| 久久一区二区三区四区五区| 在线成人av.com| 免费不卡视频| 麻豆成人91精品二区三区| 在线日韩成人| 亚洲高清资源综合久久精品| 免费不卡欧美自拍视频| 亚洲人成艺术| 亚洲美女在线国产| 欧美三级网页| 欧美呦呦网站| 亚洲精品一二区| 国产精品porn| 久久黄色影院|