《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 網格環境下二叉樹后序遍歷的一種并行算法
網格環境下二叉樹后序遍歷的一種并行算法
張 飛1,2,華 安1,2,曾國蓀1,2
1.同濟大學 計算機科學與技術系,上海200092;2.國家高性能計算機工程技術中心同濟分中心,上海
摘要: 本文運用網格環境下的并行計算模型G-PRAM來研究二叉樹的后序遍歷問題,提出了二叉樹后序遍歷的一種并行算法,并給出示例和說明。
Abstract:
Key words :

摘   要: 本文運用網格環境下的并行計算模型G-PRAM來研究二叉樹后序遍歷問題,提出了二叉樹后序遍歷的一種并行算法,并給出示例和說明。
關鍵詞: 網格環境  二叉樹  后序遍歷  并行算法

  二叉樹[1]是一種重要的數據結構,它是n(n≥0)個結點的有限集。它或者是空集(n=0),或者由一個根結點和兩棵互不相交的分別稱為這個根的左、右子樹的二叉樹組成。二叉樹的遍歷可以分為三種:一種是先序遍歷,即先訪問二叉樹的根結點,然后先序遍歷左子樹,最后先序遍歷右子樹;第二種是中序遍歷,即先中序遍歷左子樹,再訪問二叉樹的根結點,最后中序遍歷右子樹;第三種是后序遍歷,即先后序遍歷左子樹,再后序遍歷右子樹,最后訪問二叉樹的根結點。最常見的實現按照遍歷過程訪問結點,讓每個結點被訪問且僅被訪問一次,這種方式稱為串行算法。但是,可以換個角度來研究二叉樹的遍歷問題,即從串行算法中以二叉樹的結點為重點考察對象轉變為重點研究二叉樹的邊的遍歷問題[2][4]。當進行二叉樹的一次遍歷時實際也遍歷了二叉樹的所有邊,而且每條邊遍歷了兩次。一次是從雙親結點到子結點,另一次則是從子結點到雙親結點。如果將每條邊變成兩條有向邊,一條有向邊對應向下的遍歷,另一條有向邊對應向上的遍歷,則遍歷二叉樹的結點問題變成了一個遍歷二叉樹的邊的問題。
  因為網格環境具有一般的并行環境所不具有的強處理能力,所以可以給每條邊分配一個獨立的處理單元(單處理器的網格節點或者多處理器網格節點的一個處理器)進行處理,利用多個處理單元同時對所有的邊進行處理,從而并行實現網格環境下的二叉樹后序遍歷。
1  網格環境下的G-PRAM模型
  由Fortune和Wyllie形式化的PRAM[5]模型是一個理想化的并行計算模型,被廣泛用來評估并行算法的理論性能。PRAM的思想是假設一個共享存儲多處理機系統是由一個具有無限存儲容量的共享存儲器以及可對它進行訪問的許多處理機所組成的系統。并行算法的設計者可以把處理器的能力看成是無限的。一個PRAM由一個控制單元、全局內存和一組處理器集合組成。每個處理器有其自己的私有內存,所有處理器執行相同的指令,但每個處理器處理的數據不同。PRAM模型有四種,不同之處主要在于它們處理讀寫沖突的方式有差異,包括:互斥讀互斥寫(Exclusive Read,Exclusive Write,EREW PRAM),并行讀互斥寫(Concurrent Read,Exclusive Write,CREW PRAM),互斥讀并行寫(Exclusive Read,Concurrent Write,ERCW PRAM),并行讀并行寫(Concurrent Read,Concurrent Write,CRCW PRAM)。網格環境往往由相當多的網格結點組成,這些結點有的是多處理器的高性能計算結點,有的是高容量的數據結點,并且往往有一個性能不錯且容量也很大的控制結點。因此提出相應的G-PRAM模型。G-PRAM可以看作是一般PRAM的現實化。
  定義1 一個G-PRAM由網格環境下的一個控制結點、一個全局數據結點和一組計算結點集合組成。每個網格計算結點有其自己的私有內存,所有網格計算結點的各個處理器執行相同的指令,但每個處理器處理的數據不一樣。相應的G-PRAM也有4種方式:EREW G-PRAM、CREW G-PRAM、ERCW G-PRAM、CRCW G-PRAM。
2  并行實現二叉樹的后序遍歷
2.1 算法過程說明
  這里的算法采用并行讀互斥寫(CREW G-PRAM),算法在實現中對每個二叉樹結點保存結點的雙親、左孩子和右孩子,利用這三個參數來描述一個二叉樹結點在二叉樹中的相對位置。
對于如圖1所示的二叉樹,其數據結構描述如表1所示。

  下面分析本文中的算法步驟。
2.1.1 改造二叉樹并構造單鏈表
  首先可以將二叉樹改造成一個對應的有向圖。方法是將二叉樹的每條無向邊改成一條向下和另一條向上的有向邊,結點不變。如圖1的二叉樹可以改造成如圖2的有向圖。

  根據改造后的有向圖構造單鏈表的過程就是在該有向圖中尋找后繼邊的過程,按照后序遍歷的思想,所有的處理器同時處理分配給它的一條邊的后繼邊的問題,最終得到由全部有向邊構成的一個單鏈表。單鏈表的每個元素對應于改造后的有向圖中的一條有向邊。
  設分配給處理器P[(i,j)]處理的有向邊是(i,j),即該邊從結點i指向j,則尋找有向邊(i,j)后繼邊的問題可以根據有向邊(i,j)的不同類型分別處理。
  (1)PARENT(i)=j,說明邊(i,j)是一條向上邊,即從一個結點指向它的雙親結點。從數據結構的概念中可以得到以下結論,一條向上的邊(i,j)在二叉樹中的相對位置可以有三種情況:①結點j有右孩子結點,如圖3(a)所示。則根據后序遍歷的思想可得邊(i,j)的后繼邊是從結點j指向結點j的右孩子結點構成的邊;②結點i沒有右兄弟結點,而結點j有雙親結點,如圖3(b)所示。若根據后序遍歷的思想可得邊(i,j)的后繼邊是從結點j指向結點j的雙親結點(parent)構成的邊;③結點i既沒有兄弟結點,同時也沒有雙親結點,如圖3(c)所示,說明已經回到了根結點處,邊(i,j)沒有后繼邊。但為了方便起見,假設存在一條后繼邊,從結點j到它自身。


  (2)PARENT(i)≠j,也就是邊(i,j)是從雙親結點到它的孩子的向下的邊。
  同理,從數據結構的概念中可以得出這樣的結論,即一條向下的邊(i,j)在二叉樹中的位置可以有如下情況:①結點j有左孩子結點(不管有無右孩子結點),如圖4(a)所示。根據后序遍歷的思想可知,邊(i,j)的后繼邊是從結點j指向結點j的左孩子結點構成的邊。②結點j沒有左孩子,但有右孩子,如圖4(b)所示。根據后序遍歷的思想可得,邊(i,j)的后繼邊是從結點j指向結點j的右孩子結點構成的邊。③結點j沒有孩子結點,即結點j是葉子結點,如圖4(c)所示。則根據后序遍歷的思想可得,邊(i,j)的后繼邊是結點j指向結點i的向上邊。

2.1.2 給單鏈表中的每個元素賦權值0或1
  此過程也是所有的處理器同時對分配給它的一個元素賦權值(前面構造的單鏈表中的元素)。根據后序遍歷的思想,對于二叉樹的一個結點i(根結點例外,必須作不同處理),如果一條向下遍歷的邊(i,j)從結點i出發,則說明正在尋找從該結點i出發的后繼邊,結點i沒有被訪問;如果一條向上遍歷的邊(i,j)從結點i出發,則說明剛訪問完結點i。將單鏈表中對應向上邊的元素賦權值1(表示遍歷向上邊時增加了一個被訪問結點),對應向下邊的元素賦權值0(表示遍歷向下邊時未增加被訪問結點),對應根結點的環形邊元素也賦權值0(特殊處理)。
2.1.3 計算單鏈表中各元素的位序
  單鏈表中每個元素需要分配一個處理器去計算其位序。一棵有N個結點的二叉樹具有(N-1)條無向邊。由于我們將每條無向邊轉換成一條向上邊和一條向下邊,所以它共有2(N-1)條邊,這意味著單鏈表中有2(N-1)個元素。所以,需要2(N-1)個處理器來計算單鏈表中元素的位序。利用計算單鏈表位序的后綴和算法可以算出單鏈表中每個元素的位序[6]。
2.1.4 求權值為1的元素的相應結點的遍歷順序號
  由于權值為1(向上的邊)的元素所代表的邊都是向上的邊(不妨設該邊為(i,j)),即結點i在邊(i,j)遍歷時被訪問,而結點j還未被訪問。因此,用單鏈表中權值為1的元素的位序表示它所代表的邊(i,j)中結點i的位序,從而可以得到二叉樹中全部結點的位序。結點的位序是結點被訪問的先后順序的逆序。只要用結點個數N減去每個結點的位序就可以得到每個結點的后序遍歷順序號。與前幾步一樣,這里也是一個處理器計算一個結點的順序號,多個處理器并行工作,最后,得到一棵二叉樹的后序遍歷的結點順序。
2.2 算法示意代碼
  算法描述如下:
  int n;    //二叉樹的結點個數
  int parent[n];   //父結點數組
  int lchild[n];   //左孩子結點數組
  int rchild[n];   //右孩子結點數組
  int succ[(n,n)];  //后繼邊數組
  int position[(n,n)];  //鏈表元素的位序數組
  int postnode[n];  //結點順序號數組
  PostOrder(bitree *t)
        //P[(i,j)]是處理對應邊(i,j)的一個處理器,共2(n-1)個
  {
  forall P[(i,j)] do  //構造單鏈表
  {
      if(lchild[j]==i)
      { if(rchild[j]!=null)
           succ[(i,j)]=(j,j.rchild);
     else     if(parent[j]!=null)
         succ[(i,j)]=(j,,j.parent);
       else{
         succ[(i,j)]=(j,j);
         postnode[j]=0;//j是根結點
   }//else
  }//if
  else       if(rchild[j]==i)
         {   if(j.parent!=null)
              succ[(i,j)]=(j,j.parent);
         else{
              succ[(i,j)]=(j,j);
              postnode[j]=0;//j是根結點
         }//else
         }//if
     else     if(parent[j]==i)
         {   if(lchild[j]!=null)
              succ[(i,j)]=(j,j.lchild);
        else if(rchild[j]!=null)
               succ[(i,j)]=(j,j.rchild);
           else succ[(i,j)]=(j,i);
         }//if
           //給單鏈表中的每個元素賦權值
  if(parent[i]==j)
     position[(i,j)]=1;
  else
        position[(i,j)]=0;
                                   //計算單鏈表中元素的位序
        where 0≤k<log(n-1)+1 do
        { position[(i,j)]=position[(i,j)]+position[succ[(i,j)]];
       succ[(i,j)]=succ[succ[(i,j)]];
     }//for
      if(parent[i]==j)     //求結點的后序遍歷順序號
      postnode[i]=postion[(i,j)];
       }//forall
  }
3  結束語
  以圖1所示的二叉樹為例,按照上述算法構造的單鏈表(帶權值)如圖5所示。表2為二叉樹單鏈表的位序。


  從表2中選出權值為1的邊(D,B)、(B,A)、(E,C)、(G,F)、(F,C)、(C,A),所以結點D、B、E、G、F、C、A的位序就是6、5、4、3、2、1、0。即后序遍歷順序號是:1、2、3、4、5、6、7,可得出后序遍歷的順序是D、B、E、G、F、C、A。


  一棵有N個結點的二叉樹具有(N-1)條無向邊。由于要將每條無向邊轉換成一條向上邊和一條向下邊,所以它共有2(N-1)條有向邊。因此,該算法需要2(N-1)個網格處理單元(處理器),而網格計算技術的發展為并行算法的實現提供了環境的支持。在本算法中求單鏈表中元素的位序的計算時間復雜度為O(logN),而算法的其余部分的計算時間是常數,所以算法的復雜度為O(logN)。
參考文獻
1   嚴蔚敏,吳偉民.數據結構(C語言版).北京:清華大學出版社,1997
2   Tarjan R E,Vishkin U.An efficient parallel biconnectivity algorithm.SIAM Journal of Computer,1985;1(14)
3   Foster I.The Grid:A New Infrastructure for 21st Century  Science.Physics Today,2002;55(2)
4   熊家軍,岳大為,李肯立.基于SIMD-SM模型的樹的后根遍歷并行算法.計算機工程與應用,2002;38(06)
5   Wilkinson B,Allen M.Parallel programming: techniques and applications using networked workstation and parallel  computers.Prentice Hall Inc,1999
6   Karp R M,Ramachandran V.Parallel Algorithms for Shared-Memory Machines.Handbook of Theoretical Computer Science,vol A,MIT Press,1990

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产精品日日做人人爱| 久久久久久久综合色一本| 伊人男人综合视频网| 久久综合伊人77777麻豆| 亚洲一区二区毛片| 精品av久久707| 午夜一级久久| 国产一区二区三区视频在线观看| 亚洲黄色免费网站| 亚洲破处大片| 欧美精品在线观看91| 国产日产高清欧美一区二区三区| 欧美精彩视频一区二区三区| 性欧美暴力猛交另类hd| 国产伦精品一区二区三区四区免费| 亚洲国产天堂久久综合网| 国产精品久久波多野结衣| 在线一区二区三区做爰视频网站| 欧美日精品一区视频| 久久精品亚洲国产奇米99| 国产精品白丝黑袜喷水久久久| 欧美国产日产韩国视频| 欧美刺激午夜性久久久久久久| 亚洲巨乳在线| 国产精品成人免费视频| 久久精品中文字幕免费mv| 久久不射中文字幕| 亚洲毛片av在线| 欲色影视综合吧| 亚洲第一黄色网| 亚洲另类一区二区| 亚洲免费福利视频| 欧美日韩一区二区欧美激情| 欧美va亚洲va国产综合| 美日韩丰满少妇在线观看| 欧美成人性生活| 在线免费观看一区二区三区| 极品少妇一区二区三区| 亚洲综合清纯丝袜自拍| 精品91视频| 欧美日韩不卡视频| 在线播放豆国产99亚洲| 日韩亚洲国产欧美| 欧美日韩一区二区在线播放| 亚洲综合国产激情另类一区| 国产精品美女www爽爽爽视频| 亚洲二区在线| 国产精品美女主播在线观看纯欲| 99这里有精品| 国产精品日韩一区| 一本色道久久88亚洲综合88| 在线电影国产精品| 亚洲性人人天天夜夜摸| 韩国一区二区三区在线观看| 欧美精品免费播放| 久久伊伊香蕉| 久久精品2019中文字幕| 国产乱码精品1区2区3区| 欧美一区2区视频在线观看| 久久国产精品网站| 久久久久久国产精品mv| 国产亚洲欧美一区| 欧美一区二区三区四区在线观看地址| 国产中文一区| 国产欧美视频在线观看| 一二三区精品| 亚洲美女视频在线免费观看| 亚洲国产欧美在线| 亚洲日本激情| 好看的日韩av电影| 国产精品免费一区二区三区在线观看| 有码中文亚洲精品| 久久精品青青大伊人av| 欧美一区二区三区视频在线| 国产区二精品视| 欧美一区二区免费视频| 欧美精品导航| 午夜精品视频一区| 欧美va亚洲va香蕉在线| 亚洲影院高清在线| 国产精品资源在线观看| 欧美日韩八区| 欧美日韩一区二区在线观看| 亚洲精华国产欧美| 夜夜狂射影院欧美极品| 亚洲视频久久| 日韩西西人体444www| 女仆av观看一区| 狠狠色丁香婷婷综合影院| 亚洲福利视频专区| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲国产美女久久久久| 欧美视频网站| 欧美日韩伊人| 一本一本久久a久久精品综合麻豆| 欧美日韩国产综合久久| 欧美国产一区二区| 免费国产自线拍一欧美视频| 99精品国产一区二区青青牛奶| 亚洲乱码久久| 亚洲另类在线视频| 精久久久久久| 欧美精品尤物在线| 欧美日韩国产综合网| 国产亚洲人成网站在线观看| 国产日韩精品一区观看| 国产欧美日韩91| 欧美理论片在线观看| 篠田优中文在线播放第一区| 欧美性做爰猛烈叫床潮| 国产婷婷色一区二区三区四区| 国产欧美视频一区二区| 国产精品99久久久久久久久| 久久精品五月| 亚洲综合清纯丝袜自拍| 国产精品a久久久久久| 亚洲一区二区三区高清| 国内精品久久久久影院 日本资源| 国自产拍偷拍福利精品免费一| 免费美女久久99| 国产伦精品一区二区三区高清| 性做久久久久久免费观看欧美| 国产亚洲精品一区二555| 国产精品久久久久久久久果冻传媒| 久久久噜噜噜久噜久久| 亚洲美女毛片| 久久国产精品网站| 欧美性淫爽ww久久久久无| 欧美视频日韩| 国产精品精品视频| 欧美日韩午夜| 夜夜嗨av色综合久久久综合网| 亚洲综合好骚| 欧美一区成人| 欧美午夜一区| 一区二区三区在线看| 欧美日韩国产一区精品一区| 欧美福利视频| 亚洲一区日本| 欧美成人亚洲成人| 亚洲国产精品尤物yw在线观看| 亚洲精品国偷自产在线99热| 午夜精品久久久久久久99水蜜桃| 久久综合久久美利坚合众国| 亚洲欧美一区二区精品久久久| 亚洲影院色在线观看免费| 亚洲一区二区三区在线播放| 国内成+人亚洲| 欧美日韩三级| 国产精品爱啪在线线免费观看| 国产精品videossex久久发布| 欧美高清视频一区二区| 亚洲欧美日韩国产综合在线| 午夜一级在线看亚洲| 老司机午夜免费精品视频| 久久躁狠狠躁夜夜爽| 99re热精品| 日韩视频在线免费观看| 亚洲日本乱码在线观看| 久久久久久久综合色一本| 老司机aⅴ在线精品导航| 伊人蜜桃色噜噜激情综合| 国产精品日韩在线| 国产欧美欧美| 99精品99| 亚洲欧美清纯在线制服| 1024欧美极品| 亚洲欧美制服另类日韩| 亚洲国产精品成人精品| 久久精品人人做人人综合| 欧美精品国产精品日韩精品| 先锋资源久久| 亚洲视频一起| 中国亚洲黄色| 欧美伦理91| 久久亚洲精选| 久久国产精品一区二区| 久久精品国产亚洲一区二区| 亚洲乱亚洲高清| 欧美伊人久久久久久久久影院| 欧美理论视频| 激情成人av在线| 国产精品高清网站| 久久久久网站| 欧美视频免费看| 国产欧美高清| 快射av在线播放一区| 久久er99精品| 欧美日韩国产美女| 毛片一区二区| 国产综合久久久久久鬼色| 在线日韩中文| 欧美日韩国产精品一区二区亚洲| 欧美中文在线字幕| 久久国产精品免费一区| 亚洲色图综合久久| 亚洲自拍高清| 亚洲成人影音| 亚洲精品一区二区三区樱花| 久久亚洲精选| 嫩草伊人久久精品少妇av杨幂| 亚洲欧美制服中文字幕| 久久国产精品黑丝| 欧美一区二区三区精品| 欧美在线观看视频一区二区| 国产亚洲va综合人人澡精品| 美女91精品| 欧美电影在线| 欧美精品免费播放| 亚洲精品中文字| 国产欧美一区二区三区久久人妖| 亚洲综合国产激情另类一区| 欧美日本亚洲韩国国产| 亚洲久久一区| 亚洲人成人一区二区三区| 亚洲手机成人高清视频| 好吊色欧美一区二区三区视频| 亚洲欧美bt| 亚洲国产三级在线| 亚洲私人影院在线观看| 欧美精品一区二区三区久久久竹菊| 久久精品国产精品亚洲精品| 久久精品人人做人人爽| 国产精品亚洲网站| 久久精品国产欧美激情| 午夜精品久久久久久久久久久久| 欧美性理论片在线观看片免费| 激情综合色丁香一区二区| 久久久久久久久久码影片| 亚洲福利一区| 亚洲欧美综合国产精品一区| 国产精品久久久久一区二区三区共| 亚洲三级电影在线观看| 午夜精品免费视频| 国产精品久久久久久久久免费樱桃| 欧美视频精品在线观看| 亚洲无限乱码一二三四麻| 亚洲精品乱码久久久久久| 亚洲电影免费在线| 国产精品99久久不卡二区| 欧美激情国产精品| 久久精品一级爱片| 久久er精品视频| 亚洲男人第一av网站| 欧美一级大片在线免费观看| 亚洲精品欧美日韩专区| 亚洲美女淫视频| 久久精品国产精品亚洲综合| 久久精品国产亚洲一区二区三区| 久久婷婷综合激情| 国产日韩精品综合网站| 亚洲欧美成aⅴ人在线观看| 在线午夜精品| 另类综合日韩欧美亚洲| 亚洲精品在线观看视频| 亚洲激情av在线| 老**午夜毛片一区二区三区| 亚洲国产精品尤物yw在线观看| 国产日韩欧美精品在线| 精品二区视频| 亚洲视频在线观看免费| 亚洲二区在线视频| 在线看无码的免费网站| 亚洲国产精品嫩草影院| 国产精品无码永久免费888| 欧美jjzz| 欧美区在线观看| 极品尤物久久久av免费看| 新67194成人永久网站| 亚洲视频在线观看一区| 狠狠色丁香久久婷婷综合_中| 国产日韩欧美a| 国产日韩欧美一区二区三区四区| 欧美日韩国产另类不卡| 99国产精品自拍| 久久国产精品一区二区三区四区| 欧美国产成人精品| 欧美亚洲视频一区二区| 免费观看成人www动漫视频| 欧美电影免费网站| 国产精品久久亚洲7777| 欧美偷拍另类| 国产精品九色蝌蚪自拍| 亚洲美女免费视频| 国产精品久久久久久福利一牛影视| 一本色道久久综合亚洲精品不| 午夜精品久久久久久久| 久久视频在线视频| 欧美激情一区二区三区在线视频| 欧美日本网站| 亚洲欧美日韩国产一区二区三区| 久久视频在线看| 女同性一区二区三区人了人一| 亚洲日本欧美日韩高观看| 国内精品福利| aⅴ色国产欧美| 久久精品夜色噜噜亚洲a∨| 欧美一区二区三区免费观看视频| 日韩一级二级三级| 欧美午夜美女看片| 欧美一区二区在线免费播放| 激情综合电影网| 欧美国产日本高清在线| 国内精品伊人久久久久av一坑| 国产亚洲一级| 国产区在线观看成人精品| 在线成人激情| 亚洲少妇一区| 久久精品国产清高在天天线| 一本色道久久综合亚洲精品按摩| 国产精品v一区二区三区| 久久综合九色99| 国产亚洲精品综合一区91| 亚洲福利免费| 欧美午夜在线视频| 国内在线观看一区二区三区| 欧美一区二区三区婷婷月色| 日韩小视频在线观看专区| 亚洲国产裸拍裸体视频在线观看乱了| 一二三区精品福利视频| 亚洲黄色成人网| 欧美日韩一区二区三区免费| 亚洲精品一线二线三线无人区| 亚洲二区视频在线| 精品99视频| 欧美日韩一区二区高清| 欧美不卡三区| 亚洲精品日产精品乱码不卡|