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

Daly的游戲人生

動態(tài)優(yōu)先隊列

    很多圖算法實現(xiàn)中都需要用到優(yōu)先隊列,這些優(yōu)先隊列需要能動態(tài)改變堆內(nèi)對應(yīng)元素的值,并更新堆。比如在dijkstra算法中,每次松弛都要更新頂點的權(quán)值,但一般的優(yōu)先隊列無法找到頂點在堆中的位置。本文實現(xiàn)一種數(shù)據(jù)結(jié)構(gòu)"動態(tài)優(yōu)先隊列",利用兩個數(shù)組保存了原數(shù)據(jù)數(shù)組位置----堆位置的映射,能實現(xiàn)快速修改。該數(shù)據(jù)結(jié)構(gòu)的大部分應(yīng)用場合中,元素個數(shù)是固定的,因此代碼中沒有追加新元素的操作。
     代碼和大部分堆操作一樣,m_indices數(shù)組保存了原數(shù)組 到 堆位置映射, m_pmap保存了逆向映射。堆調(diào)整時,原數(shù)組的數(shù)據(jù)位置不變,只改變m_pmap映射。該實現(xiàn)是最小優(yōu)先隊列,在模板參數(shù)添加用于比較的Functor可改造為任意堆。

  1template<typename _Type>
  2static void gs_swap(_Type &x, _Type &y)
  3{    
  4   static _Type tmp;
  5   tmp = x;
  6   x = y;
  7   y = tmp;
  8}

  9
 10
 11/*
 12* DynamicPQ : dynamic priority queue (with indices mapping to original array position)
 13*   It's a min-heap and has following feature
 14*  1. detemine the min value
 15*  2. modify the corresponding k in original array
 16*  3. pop the top value
 17*  it can't be append new value
 18*/
 
 19template<typename _Type>
 20class DynamicPQ
 21{
 22public:
 23     /*
 24     *  @param  array   the original array to processed
 25     *  @param  max_n   the original size of the array
 26     */

 27    DynamicPQ(_Type *array, unsigned int max_n)
 28        : m_array(array), m_size(max_n)
 29    {
 30        unsigned int i;
 31        m_indices = new unsigned int[max_n];
 32        m_pmap = new unsigned int[max_n];
 33        for (i=0; i<m_size; i++{
 34            m_indices[i] = m_pmap[i] = i;
 35        }

 36        //make_heap
 37        for (i=m_size/2; i>0; i--{
 38            adjust_down(i);
 39        }

 40        adjust_down(0);
 41    }

 42
 43    ~DynamicPQ() {
 44        delete[] m_indices;
 45        delete[] m_pmap;
 46    }

 47    /*
 48    * change the key
 49    * @param k      the original index, not the position of the min-heap
 50    * @param value  new value
 51    */

 52    void modify_key(unsigned int k, _Type value)
 53    {
 54        unsigned int idx = m_indices[k];  //find the coresponding position of the heap
 55        if (value < m_array[ m_pmap[idx] ]) {
 56            m_array[ m_pmap[idx] ] = value;    //decrease key
 57            adjust_up(idx);
 58        }

 59        else {
 60            m_array[ m_pmap[idx] ] = value;    //increase key
 61            adjust_down(idx);
 62        }

 63    }

 64    _Type top() return m_array[ m_pmap[0] ];}
 65    /*
 66    * extract the min value
 67    */

 68    _Type pop_top() {
 69        gs_swap(m_pmap[0], m_pmap[m_size-1]);
 70        m_indices[ m_pmap[0] ] = m_size - 1;
 71        m_indices[ m_pmap[m_size-1] ] = 0;
 72        --m_size;
 73        adjust_down(0);    
 74        return m_array[ m_pmap[m_size]];
 75    }

 76    inline unsigned int size() return m_size; }
 77
 78protected:
 79    //update the value. up to the root
 80    void adjust_up(unsigned int i)
 81    {
 82        unsigned int parent = (i-1/ 2;
 83        while (i>0 && m_array[ m_pmap[i] ] < m_array[ m_pmap[parent] ]) {
 84            gs_swap(m_pmap[i], m_pmap[parent]);
 85            m_indices[ m_pmap[i]] = i;       //update index mapping after exchange
 86            i = parent;
 87            parent = (i-1/ 2;
 88        }

 89        m_indices[ m_pmap[i] ] = i;     //update the final position of i
 90    }

 91    //min-heapify
 92    void adjust_down(unsigned int i)
 93    {
 94        unsigned int lf = i*2 + 1;    //left child
 95        unsigned int rt = i*2 + 2;    //right child
 96        unsigned int min_pos;
 97        unsigned int tmp_i = m_pmap[i];
 98        while(lf < m_size) {            
 99            if (m_array[ m_pmap[lf] ] < m_array[ m_pmap[i] ]) 
100                min_pos = lf;
101            else 
102                min_pos = i;
103            if (rt < m_size && m_array[ m_pmap[rt] ] < m_array[ m_pmap[min_pos] ]) {
104                min_pos = rt;
105            }

106            if (min_pos != i) {
107                gs_swap(m_pmap[min_pos], m_pmap[i]);
108                m_indices[ m_pmap[i]] = i;       //update after exchange
109                i = min_pos;            //next loop
110                lf = i*2 + 1;
111                rt = i*2 + 2;
112                continue;
113            }

114            else {
115                m_indices[tmp_i] = i;   //update index
116                break;
117            }

118        }

119    }

120    
121protected:
122    _Type *m_array;       
123    unsigned int *m_indices;    //index mapping(array[k] --> heap position)
124    unsigned int *m_pmap;       //pointer mapping(heap position --> array[k])
125    unsigned int m_size;
126}
;
127


posted on 2009-11-17 11:38 Daly 閱讀(1011) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)與算法

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区成人6969| 久久精品日产第一区二区| 欧美日韩久久久久久| 欧美精品麻豆| 欧美日韩在线另类| 国产欧美一区二区三区国产幕精品 | 亚洲午夜一二三区视频| 夜色激情一区二区| 亚洲欧美在线x视频| 久久精品视频99| 欧美暴力喷水在线| 欧美日韩一级片在线观看| 国产麻豆9l精品三级站| 在线观看亚洲专区| 亚洲无毛电影| 鲁鲁狠狠狠7777一区二区| 亚洲国产欧美一区| 亚洲天堂男人| 久久综合中文色婷婷| 国产精品a久久久久久| 精品成人免费| 亚洲香蕉网站| 欧美国产日韩二区| 亚洲欧美韩国| 免费欧美在线| 国产日韩精品一区二区| 99热这里只有成人精品国产| 欧美日韩亚洲一区二区三区在线观看| 欧美激情久久久久久| 国产精品毛片va一区二区三区| 伊人成综合网伊人222| 亚洲免费在线播放| 欧美激情精品久久久| 亚洲一区二区视频在线观看| 久久午夜视频| 国产午夜精品美女视频明星a级| 亚洲激情视频网| 久久精品在线播放| 亚洲一区成人| 欧美日韩国产三级| **性色生活片久久毛片| 欧美一区二区| 夜夜嗨av一区二区三区四区| 欧美高清一区| 亚洲清纯自拍| 亚洲高清在线观看一区| 久久精品国产免费观看| 国产欧美日韩在线播放| 亚洲免费一级电影| 亚洲人成绝费网站色www| 免费日韩一区二区| 亚洲国产精品久久久久婷婷884| 久久精品一本| 久久成人18免费观看| 国产色产综合产在线视频| 午夜精品国产精品大乳美女| 亚洲黄色高清| 欧美另类女人| 99精品黄色片免费大全| 最新高清无码专区| 欧美精品在线一区二区| 一个人看的www久久| 亚洲老司机av| 国产精品theporn88| 性做久久久久久久免费看| 亚洲男女自偷自拍图片另类| 国产精品最新自拍| 久久久精品动漫| 久久久久在线| 亚洲激情在线播放| 亚洲国产你懂的| 欧美了一区在线观看| 亚洲一区二区三区乱码aⅴ| 中日韩男男gay无套| 国产欧美三级| 久久久之久亚州精品露出| 久久漫画官网| 一区二区国产在线观看| 亚洲线精品一区二区三区八戒| 国产精品爽爽爽| 麻豆国产精品777777在线| 久久综合中文字幕| 中国成人亚色综合网站| 亚洲视频在线二区| 国内精品一区二区| 亚洲成在人线av| 国产精品久久激情| 老司机午夜免费精品视频| 99pao成人国产永久免费视频| 欧美天天在线| 久久一二三四| 欧美日本在线看| 欧美在线短视频| 女人色偷偷aa久久天堂| 午夜激情一区| 免费欧美日韩国产三级电影| 亚洲一区二区日本| 久久午夜色播影院免费高清| 亚洲香蕉在线观看| 老司机免费视频久久| 亚洲永久字幕| 麻豆精品视频在线观看| 欧美亚洲在线播放| 欧美日韩精品| 欧美大香线蕉线伊人久久国产精品| 欧美日韩国产综合新一区| 久久精品一二三区| 欧美午夜激情在线| 欧美激情欧美激情在线五月| 国产精品自拍小视频| 亚洲国产精品电影在线观看| 国产亚洲精品美女| 亚洲视频欧美视频| 99riav1国产精品视频| 久久综合影音| 久久这里只精品最新地址| 国产精品伦一区| 日韩视频精品| 亚洲精品少妇30p| 久久综合久久综合九色| 久久久久久一区二区| 国产乱理伦片在线观看夜一区 | 亚洲自拍电影| 亚洲午夜未删减在线观看| 欧美成人精精品一区二区频| 久久亚洲一区二区| 国产精品视频yy9099| 中文日韩在线视频| 一区二区三区 在线观看视| 麻豆精品视频在线观看视频| 久久只精品国产| 国内精品久久久久久久97牛牛| 午夜精品福利视频| 欧美一区二区三区啪啪| 欧美视频在线不卡| 亚洲视频香蕉人妖| 亚洲在线中文字幕| 国产精品久久国产精品99gif| 一本久道久久综合狠狠爱| 亚洲视频免费在线| 国产精品久久久久久五月尺| 一区二区三区国产盗摄| 亚洲欧美成人在线| 国产精品一区视频网站| 亚洲欧美视频| 久久蜜桃av一区精品变态类天堂| 国产亚洲精品7777| 久久欧美肥婆一二区| 亚洲国产日韩欧美在线动漫| 亚洲精选在线观看| 欧美色图五月天| 午夜精品美女自拍福到在线 | 国产精品一区二区三区成人| 亚洲一区视频在线| 尤物九九久久国产精品的分类| 久久久久女教师免费一区| 欧美国产在线视频| 一区二区三区你懂的| 国产精品日韩精品欧美在线| 午夜欧美不卡精品aaaaa| 久久深夜福利| 亚洲精品中文字幕女同| 欧美日韩国产综合在线| 午夜精品久久久99热福利| 久久在线免费观看视频| 一区二区欧美在线| 国产欧美一区二区精品性| 久久手机免费观看| 一区二区三区国产精品| 麻豆成人在线播放| 亚洲一级黄色av| 一区二区三区在线观看国产| 欧美精品亚洲| 欧美主播一区二区三区| 亚洲伦理网站| 久久欧美肥婆一二区| 一区二区三区成人| 激情久久影院| 国产精品xxxxx| 久久久久免费| 亚洲亚洲精品三区日韩精品在线视频| 另类尿喷潮videofree| 亚洲一卡久久| 亚洲国产成人高清精品| 国产女主播一区二区| 欧美岛国在线观看| 久久精品国产精品 | 欧美精品在线看| 久久久久五月天| 亚洲一区二区欧美| 亚洲黄色大片| 欧美a一区二区| 久久久精品2019中文字幕神马| 日韩亚洲视频| 亚洲高清一区二| 国产日韩欧美三区| 国产精品系列在线播放| 欧美日韩一区三区四区| 欧美激情一区二区三区在线视频| 久久免费少妇高潮久久精品99|