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

熱轉(zhuǎn)印www.yxheatpress.com

公司網(wǎng)站模板http://qiyemoban.software8.co/

常用鏈接

統(tǒng)計(jì)

友情鏈接

最新評論

數(shù)據(jù)結(jié)構(gòu):勝者樹與敗者樹

假設(shè)有k個稱為順串的有序序列,我們希望將他們歸并到一個單獨(dú)的有序序列中。每一個順串包含一些記錄,并且這些記錄按照鍵值的大小,以非遞減的順序排列。令n為k個順串中的所有記錄的總數(shù)。并歸的任務(wù)可以通過反復(fù)輸出k個順串中鍵值最小的記錄來完成。鍵值最小的記錄的選擇有k種可能,它可能是任意有一個順串中的第1個記錄。并歸k個順串的最直接的辦法就是進(jìn)行k-1次比較確定下一個輸出的記錄。對k>2,我們可以通過使用選擇數(shù)這種數(shù)據(jù)結(jié)構(gòu)來降低尋找下一個最小元素所需要進(jìn)行的比較次數(shù)。有兩個種選擇樹:勝利樹和失敗樹。

勝者樹與敗者樹是完全二叉樹。就像是參加比賽一樣,每個選手有不同的實(shí)力,兩個選手PK,實(shí)力決定勝負(fù),晉級下一輪,經(jīng)過幾輪之后,就能得到冠軍。不同的是,勝者樹的中間結(jié)點(diǎn)記錄的是勝者的標(biāo)號;而敗者樹的中間結(jié)點(diǎn)記錄的敗者的標(biāo)號。 勝者樹與敗者樹可以在log(n)的時間內(nèi)找到最值。任何一個葉子結(jié)點(diǎn)的值改變后,利用中間結(jié)點(diǎn)的信息,還是能夠快速地找到最值。在k路歸并排序中經(jīng)常用到。

一、勝者樹

勝者樹的一個優(yōu)點(diǎn)是,如果一個選手的值改變了,可以很容易地修改這棵勝者樹。只需要沿著從該結(jié)點(diǎn)到根結(jié)點(diǎn)的路徑修改這棵二叉樹,而不必改變其他比賽的結(jié)果。下面是選擇一個最小的數(shù)字為最勝利者(見圖1所示),第一次把各個數(shù)組里面的第一個元素都放進(jìn)去,這是根據(jù)勝利樹的規(guī)則兩兩比較,得到最小的值,第一次弄完之后,就得出1數(shù)字是勝利的,也就是1是最小的。在下一次輸出第二小的數(shù)字時候,只需要把1所在的數(shù)組里面的元素加進(jìn)去,然后從葉子節(jié)點(diǎn)到根節(jié)點(diǎn)一直比較得出第二小的值,這樣就減少了很多次無用的比較(見圖2所示)。

                        

圖 一                                                                                                               圖二

問題:有20個有序數(shù)組,每個數(shù)組有500個uint變量,降序排序。要求從這10000個元素中選出最大的500個。

程序:

  1. #include <iostream>  
  2. #include <vector>  
  3. #include <cmath>  
  4. #include <ctime>  
  5. #include <algorithm>  
  6.   
  7. /** 
  8. *    
  9. *   Author: w397090770 
  10. *   Data  : 2012.10.15 
  11. *   Email : wyphao.2007@163.com 
  12. *   轉(zhuǎn)載請注明出處,謝謝。  
  13. *        
  14. */   
  15. #define N 10  
  16. #define INF (1 << 31) - 1  
  17. using namespace std;  
  18.   
  19. typedef struct Node{  
  20.     int which;  //記錄是哪個子數(shù)組   
  21.     int index;  //記錄是上個標(biāo)記數(shù)組的第幾個元素了   
  22.     int data;   //記錄數(shù)組的元素   
  23. }Node;  
  24.   
  25. int com(const void *a, const void *b){  
  26.     if(*(int *)a > *(int *)b){  
  27.         return 1;  
  28.     }else if(*(int *)a < *(int *)b){  
  29.         return -1;  
  30.     }  
  31.       
  32.     return 0;  
  33. }  
  34.   
  35. void adjustTreeForFirst(Node *tempArray, int len){  
  36.     int i = len / 2;  
  37.     int j = 0;  
  38.     while(i > 1){  
  39.         for(j = i; j < 2 * i - 1; j += 2){  
  40.             if(tempArray[j].data > tempArray[j + 1].data){  
  41.                 tempArray[j / 2] = tempArray[j + 1];  
  42.             }else{  
  43.                 tempArray[j / 2] = tempArray[j];  
  44.             }  
  45.         }  
  46.         i /= 2;  
  47.     }  
  48. }  
  49.   
  50. //col 是列  
  51. //row 是行  
  52. //len 是選擇出前多少個元素   
  53. void winTree(int **a, int row, int col, int len){  
  54.     int *result = (int *)malloc(len * sizeof(int));  
  55.     Node tempArray[row * 2];  
  56.     int index = 0;  
  57.     int i = 0, j = 0;  
  58.     memset(tempArray, 0, sizeof(struct Node) * 2 * row);  
  59.       
  60.     for(i = 0; i < row; i++){  
  61.         tempArray[row + i].data = a[i][0];  
  62.         tempArray[row + i].which = i;  
  63.         tempArray[row + i].index = 0;  
  64.     }  
  65.       
  66.     for(i = 0 ; i < len; i++){  
  67.         adjustTreeForFirst(tempArray, 2 * row);//為了代碼減少代碼量,我把每一次調(diào)用都調(diào)整整個樹,其實(shí)是不必要的,有興趣的用戶可以自己寫寫  
  68.         result[i] = tempArray[1].data;  
  69.         if(tempArray[1].index + 1 < col){  
  70.             tempArray[row + tempArray[1].which].data = a[tempArray[1].which][tempArray[1].index + 1];  
  71.             tempArray[row + tempArray[1].which].index = tempArray[1].index + 1;  
  72.             tempArray[row + tempArray[1].which].which = tempArray[1].which;  
  73.         }else{//如果某個數(shù)組里面的數(shù)據(jù)處理完了,就把那個節(jié)點(diǎn)賦值為無窮大   
  74.             tempArray[row + tempArray[1].which].data = INF;  
  75.             //tempArray[row + tempArray[1].which].index = tempArray[1].index + 1;  
  76.             //tempArray[row + tempArray[1].which].which = tempArray[1].which;  
  77.         }         
  78.     }  
  79.       
  80.     for(i = 0; i < len; i++){  
  81.         cout << result[i] << endl;  
  82.     }   
  83.     free(result);  
  84. }  
  85.   
  86. int main(){  
  87.     /*int a[N - 2][N] = { 
  88.         3, 4, 5, 6, 10, 11, 12, 13, 20, 21, 
  89.         1, 2, 7, 8, 9, 30, 31, 32, 33, 34, 
  90.         14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 
  91.         26, 27, 28, 29, 35, 36, 37, 38, 39, 40, 
  92.         50, 51, 52, 54, 55, 65, 66, 67, 68, 69, 
  93.         53, 56, 57, 58, 59, 60, 61, 62, 63, 64, 
  94.         41, 42, 43, 44, 45, 46, 47, 48, 49, 2222, 
  95.         1, 2, 2, 4, 5, 6, 12, 13, 20, 21 
  96.     };*/  
  97.     const int size = 500;  
  98.     const int del = 20;  
  99.       
  100.     int *a[del];  
  101.     int i = 0, j = 0;  
  102.     //分配內(nèi)存空間   
  103.     for(i = 0; i < del; i++){  
  104.         a[i] = (int *)malloc(size * sizeof(int));     
  105.     }  
  106.       
  107.     //初始化數(shù)組   
  108.     srand( time(NULL) );   
  109.     for(i = 0; i < size; i++){  
  110.         for(j = 0; j < del; j++){  
  111.             a[j][i] = rand();  
  112.         }     
  113.     }  
  114.       
  115.     //排序   
  116.     for(i = 0; i < del; i++){  
  117.         qsort(a[i], size, sizeof(int), com);  
  118.     }  
  119.       
  120.     //利用勝利樹進(jìn)行處理   
  121.     winTree(a, del, size, size);  
  122.     return 0;  
  123. }  

二、敗者樹

敗者樹是勝者樹的一種變體。在敗者樹中,用父結(jié)點(diǎn)記錄其左右子結(jié)點(diǎn)進(jìn)行比賽的敗者,而讓勝者參加下一輪的比賽。敗者樹的根結(jié)點(diǎn)記錄的是敗者,需要加一個結(jié)點(diǎn)來記錄整個比賽的勝利者。采用敗者樹可以簡化重構(gòu)的過程。


posted on 2012-10-16 14:21 不聽話的 閱讀(1971) 評論(1)  編輯 收藏 引用

評論

# re: 數(shù)據(jù)結(jié)構(gòu):勝者樹與敗者樹 2013-09-11 18:00 lxl

代碼應(yīng)該是選出最小的500個元素吧  回復(fù)  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網(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>
            狂野欧美一区| 一区二区日韩| 亚洲高清中文字幕| 欧美午夜a级限制福利片| 欧美日韩123| 欧美18av| 欧美日韩免费一区二区三区视频| 欧美在线视屏| 亚洲性色视频| 欧美在线观看一二区| 久久国产一二区| 欧美一级大片在线免费观看| 亚洲精选久久| 亚洲日本va午夜在线电影| 亚洲久久视频| 亚洲精品综合| 欧美精品二区| 欧美日韩综合不卡| 国产精品白丝jk黑袜喷水| 国产精品一香蕉国产线看观看| 欧美系列亚洲系列| 久久精品免费| 欧美日在线观看| 国产精品国产馆在线真实露脸| 欧美日韩精品在线视频| 欧美三级电影一区| 老色批av在线精品| 欧美 日韩 国产在线| 欧美伊人影院| 亚洲欧美中日韩| 亚洲黄网站在线观看| 亚洲国产精品电影在线观看| 国产精品啊啊啊| 一区二区三区在线免费视频| 亚洲国产一成人久久精品| 亚洲欧美另类久久久精品2019| 欧美在线一级va免费观看| 久久综合精品一区| 在线亚洲国产精品网站| 亚洲一区二区在线免费观看视频 | 久久综合久久综合九色| 久久久久九九九九| 亚洲在线播放电影| 欧美大片在线影院| 欧美视频二区| 亚洲精品一区二区三区在线观看 | 国产精品国产精品国产专区不蜜| 欧美日韩一区二区高清| 国语自产在线不卡| 日韩午夜在线观看视频| 欧美va亚洲va国产综合| 亚洲国产精品一区二区www| 六十路精品视频| 亚洲一本视频| 欧美成人按摩| 在线日韩成人| 性xx色xx综合久久久xx| 亚洲国产老妈| 久久激情五月激情| 国产精品日本一区二区| 国产一区二区中文字幕免费看| 亚洲日本一区二区| 久久午夜电影网| 亚洲无人区一区| 亚洲一二三级电影| 国产精品露脸自拍| 亚洲精品视频啊美女在线直播| 欧美成人高清| 亚洲小视频在线观看| 麻豆成人精品| 国产一区二区中文字幕免费看| 国产亚洲一区二区三区| 欧美一区二区三区四区在线观看地址 | 国内外成人免费视频| 久久久久久**毛片大全| 国产精品99久久久久久宅男| 99re6这里只有精品| 久久国产精品电影| 亚洲午夜视频在线| 欧美成人在线免费观看| av成人免费| 亚洲国产福利在线| 免费黄网站欧美| 亚洲欧洲一区二区三区| 欧美不卡激情三级在线观看| 欧美成人伊人久久综合网| 亚洲欧洲精品一区二区三区不卡| 亚洲国产精品女人久久久| 欧美精品情趣视频| 国产精品人成在线观看免费| 久久国产精品99国产| 欧美一级精品大片| 91久久综合| 亚洲人线精品午夜| 欧美激情aⅴ一区二区三区| 日韩视频一区二区三区| 香蕉久久a毛片| 久久精彩视频| 伊人婷婷久久| 91久久精品国产91久久性色tv| 麻豆九一精品爱看视频在线观看免费 | 欧美久久九九| 99在线精品观看| 一二三区精品| 亚洲国产欧美日韩另类综合| 欧美国产精品中文字幕| 欧美视频国产精品| 久久久综合网| 亚洲欧美在线一区二区| 日韩视频在线观看一区二区| 99精品视频一区| 亚洲激情一区二区| 夜夜爽av福利精品导航 | 亚洲日本免费| 狠狠色香婷婷久久亚洲精品| 欧美激情按摩在线| 国产视频精品免费播放| 亚洲大胆美女视频| 狠狠色狠色综合曰曰| 欧美国产第二页| 欧美日韩调教| 欧美国产日韩一区二区三区| 欧美日韩国产系列| 艳女tv在线观看国产一区| 久久人人97超碰国产公开结果 | 亚洲欧美日韩视频二区| 亚洲欧洲在线一区| 久久久久久久波多野高潮日日| 99国内精品久久| 欧美夜福利tv在线| 久久久久国产精品麻豆ai换脸| 亚洲一区二三| 巨胸喷奶水www久久久免费动漫| 在线亚洲伦理| 欧美日韩精品一区二区在线播放 | 一区二区三区|亚洲午夜| 在线观看久久av| 久久精品最新地址| 午夜精品在线看| 欧美一级大片在线观看| 亚洲综合三区| 欧美午夜寂寞影院| 亚洲精品日韩在线| 国产精品视频你懂的| 亚洲视频自拍偷拍| 日韩视频免费观看高清在线视频| 亚洲精品久久嫩草网站秘色| 亚洲国产精品一区二区久| 亚洲一区二区三区四区中文 | 亚洲激情六月丁香| 久久国产精品第一页| 久久欧美中文字幕| 国产精品入口日韩视频大尺度| 亚洲无限乱码一二三四麻| 在线天堂一区av电影| 亚洲线精品一区二区三区八戒| 亚洲视频日本| 欧美日韩精品不卡| 亚洲免费视频中文字幕| 99精品欧美一区| 亚洲视频网在线直播| 欧美天天综合网| 女生裸体视频一区二区三区| 性伦欧美刺激片在线观看| 亚洲综合视频1区| 欧美国产精品人人做人人爱| 亚洲精品小视频在线观看| 91久久国产综合久久91精品网站| 亚洲欧美欧美一区二区三区| 最近中文字幕日韩精品 | 亚洲激情网站| 国产精品高清免费在线观看| 欧美一级免费视频| 欧美资源在线| 亚洲国产欧美日韩精品| 欧美大片免费观看在线观看网站推荐| 亚洲综合好骚| 亚洲高清免费| 欧美成人有码| 欧美一区二区福利在线| 久久日韩粉嫩一区二区三区| 亚洲免费观看高清完整版在线观看熊| 欧美国产1区2区| 久热综合在线亚洲精品| 一区二区欧美视频| 国产精品乱码一区二区三区| 六十路精品视频| 亚洲精品久久视频| 国产欧美日韩视频在线观看 | 男人的天堂亚洲| 亚洲日本久久| 国产综合色产| 欧美大片在线看免费观看| 久久国产精品网站| 亚洲国产精品免费| 久久久噜噜噜| 亚洲精品国产视频| 久久阴道视频| 亚洲激情在线视频| 亚洲一区免费网站|