亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

數據結構之Treap詳解

2020-01-26 15:22:05
字體:
來源:轉載
供稿:網友

1. 概述

同splay tree一樣,treap也是一個平衡二叉樹,不過Treap會記錄一個額外的數據,即優先級。Treap在以關鍵碼構成二叉搜索樹的同時,還按優先級來滿足堆的性質。因而,Treap=tree+heap。這里需要注意的是,Treap并不是二叉堆,二叉堆必須是完全二叉樹,而Treap可以并不一定是。

2. Treap基本操作

為了使Treap 中的節點同時滿足BST性質和最小堆性質,不可避免地要對其結構進行調整,調整方式被稱為旋轉。在維護Treap 的過程中,只有兩種旋轉,分別是左旋轉(簡稱左旋)和右旋轉(簡稱右旋)。
左旋一個子樹,會把它的根節點旋轉到根的左子樹位置,同時根節點的右子節點成為子樹的根;右旋一個子樹,會把它的根節點旋轉到根的右子樹位置,同時根節點的左子節點成為子樹的根。

struct Treap_Node {  Treap_Node *left,*right; //節點的左右子樹的指針  int value,fix; //節點的值和優先級 }; void Treap_Left_Rotate(Treap_Node *&a) //左旋 節點指針一定要傳遞引用 {  Treap_Node *b=a->right;  a->right=b->left;  b->left=a;  a=b; } void Treap_Right_Rotate(Treap_Node *&a) //右旋 節點指針一定要傳遞引用 {  Treap_Node *b=a->left;  a->left=b->right;  b->right=a;  a=b; }

3. Treap的操作

同其他樹形結構一樣,treap的基本操作有:查找,插入,刪除等。

3.1    查找

同其他二叉樹一樣,treap的查找過程就是二分查找的過程,復雜度為O(lg n)。

3.2    插入

在Treap 中插入元素,與在BST 中插入方法相似。首先找到合適的插入位置,然后建立新的節點,存儲元素。但是要注意新的節點會有一個優先級屬性,該值可能會破壞堆序,因此我們要根據需要進行恰當的旋轉。具體方法如下:

1. 從根節點開始插入;
2. 如果要插入的值小于等于當前節點的值,在當前節點的左子樹中插入,插入后如果左子節點的優先級小于當前節點的優先級,對當前節點進行右旋;
3. 如果要插入的值大于當前節點的值,在當前節點的右子樹中插入,插入后如果右子節點的優先級小于當前節點的優先級,對當前節點進行左旋;
4. 如果當前節點為空節點,在此建立新的節點,該節點的值為要插入的值,左右子樹為空,插入成功。

Treap_Node *root; void Treap_Insert(Treap_Node *&P,int value) //節點指針一定要傳遞引用 {  if (!P) //找到位置,建立節點  {   P=new Treap_Node;   P->value=value;   P->fix=rand();//生成隨機的修正值  }  else if (value <= P->value)  {   Treap_Insert(P->left,r);   if (P->left->fix < P->fix)    Treap_Right_Rotate(P);//左子節點修正值小于當前節點修正值,右旋當前節點  }  else  {   Treap_Insert(P->right,r);   if (P->right->fix < P->fix)    Treap_Left_Rotate(P);//右子節點修正值小于當前節點修正值,左旋當前節點  } }

3.3   刪除

與BST 一樣,在Treap 中刪除元素要考慮多種情況。我們可以按照在BST 中刪除元素同樣的方法來刪除Treap 中的元素,即用它的后繼(或前驅)節點的值代替它,然后刪除它的后繼(或前驅)節點。

上述方法期望時間復雜度為O(logN),但是這種方法并沒有充分利用Treap 已有的隨機性質,而是重新得隨機選取代替節點。我們給出一種更為通用的刪除方法,這種方法是基于旋轉調整的。首先要在Treap 樹中找到待刪除節點的位置,然后分情況討論:

情況一,該節點為葉節點或鏈節點,則該節點是可以直接刪除的節點。若該節點有非空子節點,用非空子節點代替該節點的,否則用空節點代替該節點,然后刪除該節點。

情況二,該節點有兩個非空子節點。我們的策略是通過旋轉,使該節點變為可以直接刪除的節點。如果該節點的左子節點的優先級小于右子節點的優先級,右旋該節點,使該節點降為右子樹的根節點,然后訪問右子樹的根節點,繼續討論;反之,左旋該節點,使該節點降為左子樹的根節點,然后訪問左子樹的根節點,這樣繼續下去,直到變成可以直接刪除的節點。

BST_Node *root; void Treap_Delete(Treap_Node *&P,int *value) //節點指針要傳遞引用 {  if (value==P->value) //找到要刪除的節點 對其刪除  {   if (!P->right || !P->left) //情況一,該節點可以直接被刪除   {    Treap_Node *t=P;    if (!P->right)     P=P->left; //用左子節點代替它    else     P=P->right; //用右子節點代替它    delete t; //刪除該節點   }   else //情況二   {    if (P->left->fix < P->right->fix) //左子節點修正值較小,右旋    {     Treap_Right_Rotate(P);     Treap_Delete(P->right,r);    }    else //左子節點修正值較小,左旋    {     Treap_Left_Rotate(P);      Treap_Delete(P->left,r);    }   }  }  else if (value < P->value)   Treap_Delete(P->left,r); //在左子樹查找要刪除的節點  else   Treap_Delete(P->right,r); //在右子樹查找要刪除的節點 }

4. Treap應用
Treap可以解決splay tree可以解決的所有問題,具體參見另一篇文章:《數據結構之伸展樹詳解

可以這樣定義結構體:

struct Treap_Node {  Treap_Node *left,*right; //節點的左右子樹的指針  int value,fix,weight,size; //節點的值,優先級,重復計數(記錄相同節點個數,節省空間),子樹大小  inline int lsize(){ return left ?left->size ?0; } //返回左子樹的節點個數  inline int rsize(){ return right?right->size?0; } //返回右子樹的節點個數 };

5. 總結

Treap 作為一種簡潔高效的有序數據結構,在計算機科學和技術應用中有著重要的地位。它可以用來實現集合、多重集合、字典等容器型數據結構,也可以用來設計動態統計數據結構。

6. 參考資料

(1)Treap:http://www.nocow.cn/index.php/Treap
(2)隨機平衡二叉查找樹Treap 的分析與應用:http://www.byvoid.com/blog/wp-content/uploads/2010/12/treap-analysis-and-application.pdf

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区欧美日韩视频| 97成人精品区在线播放| 欧美精品激情blacked18| 色综合天天狠天天透天天伊人| 国产精品久久久久久久久男| 精品国产精品自拍| 国产精品99久久久久久久久| 亚洲日本欧美日韩高观看| xxx一区二区| www.欧美精品| 亚洲男子天堂网| 中文字幕欧美日韩精品| 国产成人免费av电影| 亚洲电影av在线| xvideos亚洲人网站| 亚洲欧美日韩视频一区| 成人疯狂猛交xxx| 久久精品成人欧美大片| 国产精品露脸av在线| 性色av一区二区三区免费| 亚洲另类欧美自拍| 69久久夜色精品国产69| 久久久国产一区二区| 日韩精品在线私人| 欧美插天视频在线播放| 久久网福利资源网站| 国产精品爽爽ⅴa在线观看| 欧美制服第一页| 欧美成人精品激情在线观看| 成人欧美在线观看| 久久福利视频网| 丝袜一区二区三区| 91免费在线视频| 色av中文字幕一区| 国产精品视频专区| 日韩电影中文字幕av| 国产成人一区二区三区| 久青草国产97香蕉在线视频| 亚洲欧美日韩中文在线| 中文字幕自拍vr一区二区三区| 欧美激情网站在线观看| 超薄丝袜一区二区| 亚洲视频777| 91夜夜未满十八勿入爽爽影院| 91精品视频专区| 中文日韩在线视频| 91精品久久久久久久久青青| 欧美成人午夜剧场免费观看| 国产啪精品视频| 欧美午夜激情小视频| 九九视频直播综合网| 久久成人亚洲精品| 日本不卡视频在线播放| 日韩在线观看视频免费| 6080yy精品一区二区三区| 国产女人18毛片水18精品| 国产在线观看一区二区三区| 久久福利视频导航| 日韩av一区在线观看| 97超视频免费观看| 欧美性猛交99久久久久99按摩| 久久综合伊人77777蜜臀| 亚洲精品福利在线观看| 亚洲级视频在线观看免费1级| 中文字幕亚洲一区二区三区五十路| 欧美精品18videos性欧| 国产精品国产亚洲伊人久久| 国产亚洲精品va在线观看| 青青草精品毛片| 亚洲色图25p| 国产精品久久久久免费a∨| 1769国内精品视频在线播放| 成人精品一区二区三区电影免费| 日韩精品亚洲视频| 最好看的2019年中文视频| 久久久久久91香蕉国产| 国产人妖伪娘一区91| 日韩精品视频中文在线观看| www国产精品视频| 亚洲a成v人在线观看| 国产精品久久久久久久app| 日韩视频在线一区| 欧美日本黄视频| 91精品国产综合久久香蕉| 一区二区三区在线播放欧美| 精品少妇v888av| 欧美精品videosex极品1| 欧美性极品xxxx做受| 久久免费福利视频| 国产亚洲综合久久| 欧美精品在线免费观看| 91亚洲精品久久久久久久久久久久| 91久久久久久久久久| 亚洲福利视频网| 国产欧美一区二区三区在线看| 亚洲综合成人婷婷小说| 亚洲美女av在线| 亚洲午夜女主播在线直播| 91成人天堂久久成人| 成人日韩在线电影| 日韩精品福利网站| 在线看国产精品| 海角国产乱辈乱精品视频| 亚洲精品福利资源站| 成人xxxx视频| 这里只有精品久久| 亚洲深夜福利视频| 亚州欧美日韩中文视频| 九九久久久久久久久激情| 狠狠色香婷婷久久亚洲精品| 亚洲美女免费精品视频在线观看| 中文字幕亚洲精品| 精品夜色国产国偷在线| 日韩精品在线观看视频| 亚洲肉体裸体xxxx137| 国产精品色午夜在线观看| 久久久久久国产| 日韩电影中文字幕| 久久免费视频在线观看| 国产成人极品视频| 国产精品欧美一区二区| 在线播放亚洲激情| 欧洲中文字幕国产精品| 在线视频一区二区| 日韩视频免费看| 国产精品一区专区欧美日韩| 日韩毛片在线看| 欧美日韩中文字幕日韩欧美| 成人国内精品久久久久一区| 日韩亚洲在线观看| 2019中文字幕全在线观看| 亚洲欧美精品suv| 91av在线看| 青草青草久热精品视频在线网站| 国产精品视频地址| 久久久久久久久91| 欧美综合国产精品久久丁香| 久久精品中文字幕一区| 久久视频这里只有精品| 91视频8mav| 综合网中文字幕| 热门国产精品亚洲第一区在线| 国产欧美在线观看| 国产精品91视频| 欧美日韩亚洲精品一区二区三区| 久久五月天综合| 日韩综合中文字幕| 久久免费成人精品视频| 久久久www成人免费精品张筱雨| 精品久久久久久久久久国产| 91在线播放国产| 日韩欧美国产免费播放| 欧美性猛交xxxx富婆| 日韩高清不卡av| 欧美精品videos性欧美| 91在线直播亚洲| 国产精品爽黄69天堂a| 亚洲性69xxxbbb| 国产精品久久久久久av| 国产精品一区二区久久久久| 国产精品视频99| 欧美高清在线播放| 国产视频综合在线| 日韩国产欧美精品一区二区三区|