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

隨筆-3  評論-5  文章-13  trackbacks-0

--------------------------------------------------------------------------------
標(biāo)題: 關(guān)于平衡二叉樹(AVL tree)旋轉(zhuǎn)后平衡標(biāo)志調(diào)整的計算公式
作者: 葉飛虎
建立: 2009.10.18
變更: 2010.06.22
--------------------------------------------------------------------------------

1. 引言
      平衡二叉樹的平衡標(biāo)志計算可以說是最簡單的, 也可以說是AVL樹中最難的。平衡標(biāo)
   志計算方法有兩種:
      a. Balance = Height(Left) - Height(Right);
      b. Balance = Height(Right) - Height(Left);

      其中 Height 為結(jié)點的子樹高度(>= 0), 算法簡單就是說只要左右子樹高度相減即可,
   但運行效率不高。當(dāng)結(jié)點數(shù)上千以上時, 頻繁增刪結(jié)點帶來開銷會相當(dāng)可觀, 正因如此,
   本人通過推理得到的計算公式就非常重要了。


2. 假設(shè)
   a. 結(jié)點定義
      typedef struct TAVLNode
      {
         void*       Item;          // 存放項
         TAVLNode*   Left;          // 左子結(jié)點
         TAVLNode*   Right;         // 右子結(jié)點
         TAVLNode*   Parent;        // 父結(jié)點
         char        Balance;       // 平衡標(biāo)志: [-1..1]
      } *PAVLNode;

   b. 平衡增量 D 和 D', D 為左子樹增量, D' 為右子樹增量, 且 D = -D', D 可以定義
      為 1 或 -1, 其中:
      1). D = 1  則表示平衡標(biāo)志計算方法為: Height(Left) - Height(Right)
      2). D = -1 則表示平衡標(biāo)志計算方法為: Height(Right) - Height(Left)

   c. 結(jié)點高度的函數(shù) H, 則結(jié)點 n 有:
      H(n) = M(H(n.Left), H(n.Right)) + D, 同時 H(NULL) = 0
      其中, M(H(n.Left), H(n.Right) 函數(shù)描述如下:
      1). |H(n.Left)| >= |H(n.Right)| 則值為: H(n.Left)
      2). |H(n.Left)| <  |H(n.Right)| 則值為: H(n.Right)

   d. 結(jié)點平衡標(biāo)志的函數(shù) B, 則結(jié)點 n 有:
      B(n) = n.Balance = H(n.Left) - H(n.Right)


3. 旋轉(zhuǎn)方式(Left-Left)
   a. 旋轉(zhuǎn)前的樹結(jié)構(gòu)和函數(shù)方程如下:
            (p)               B(p) = H(t) - H(1) = 2D
            / \
          (t) (1)             B(t) = H(n) - H(2)
          / \
        (n) (2)               B(n) = H(3) - H(4)
        / \
      (3) (4)                 同時必定存在: B(t) != D', 可以用反證法證明.

   b. 旋轉(zhuǎn)后的樹結(jié)構(gòu)和函數(shù)方程如下: (注: 結(jié)點 p, t, n 旋轉(zhuǎn)后分別定義為 P, T, N)
          ( T  )              B(T) = H(N) - H(P)
          /    \              B(N) = H(3) - H(4)
        (N)    (P)            B(P) = H(2) - H(1)
        / \    / \
      (3) (4) (2)(1)          同時必定存在: B(P) != D', 可以用反證法證明.

   c. B(N) 公式
      B(N) = H(3) - H(4)   \
      B(n) = H(3) - H(4)   /  =>    B(N) = B(n) = n.Balance

   d. B(P) 公式
      B(t) = H(n) - H(2)      =>    H(2) = H(n) - B(t)  -+
      B(p) = H(t) - H(1) = 2D =>    H(1) = H(t) - 2D     +
                                    B(P) = H(2) - H(1)  -+

                              =>    B(P) = H(n) - H(t) - B(t) + 2D   \
      由于必定: B(t) != D'    =>    H(t) = H(n) + D                  /
                                 => B(P) = D - B(t) = D - t.Balance

   e. B(T) 公式
      B(t) = H(n) - H(2)      =>    H(n) = B(t) + H(2)  -+
      由于必定: H(N) == H(n)  =>    B(T) = H(n) - H(P)   +
      由于必定: B(P) != D'    =>    H(P) = H(2) + D     -+
                                 => B(T) = B(t) + H(2) - (H(2) + D)
                                 => B(T) = B(t) - D = t.Balance - D

   f. H(T) - H(p) 公式 (即調(diào)整后的高度變化)
      B(T) =  B(t) - D        => B(T) != D
                              => H(T)  = H(P) + D     -+
      H(P) = / H(1) + 2D   當(dāng) B(P) == D                +
             \ H(1) + D    當(dāng) B(P) == 0               -+
                              => H(T) = / H(1) + 3D   當(dāng) B(P) == D   -+
                                        \ H(1) + 2D   當(dāng) B(P) == 0    |
                                                                      + =>
      H(p) = H(t) + D   \                                             |
      H(t) = H(1) + 2D  /     => H(p) = H(1) + 3D                    -+

      H(T) - H(p) = / 0    當(dāng) B(P) == D => B(t) == 0
                    \ -D   當(dāng) B(P) == 0 => B(t) != 0


4. 旋轉(zhuǎn)方式(Left-Right)
   a. 旋轉(zhuǎn)前的樹結(jié)構(gòu)和函數(shù)方程如下:
            (p)               B(p) = H(t) - H(1) = 2D
            / \
          (t) (1)             B(t) = H(2) - H(n)
          / \
        (2) (n)               B(n) = H(3) - H(4)
            / \
          (3) (4)             同時必定存在: B(t) != D, 可以用反證法證明.

   b. 旋轉(zhuǎn)后的樹結(jié)構(gòu)和函數(shù)方程如下: (注: 結(jié)點 p, t, n 旋轉(zhuǎn)后分別定義為 P, T, N)
          ( N  )              B(N) = H(T) - H(P)
          /    \              B(T) = H(2) - H(3)
        (T)    (P)            B(P) = H(4) - H(1)
        / \    / \
      (2) (3) (4)(1)          同時必定存在: B(P) != D, 可以用反證法證明.

   c. B(T) 公式
      H(n) = / H(3) + 2D      當(dāng) B(n) == D'
             \ H(3) + D       當(dāng) B(n) != D'                    -+
                                                                |
      B(t) = H(2) - H(n)      =>    H(2) = H(n) + B(t)   \      +
                                    B(T) = H(2) - H(3)   /      |
                                 => B(T) = H(n) - H(3) + B(t)  -+

                              =>    B(T) = / B(t) + 2D         當(dāng) B(n) == D'
                                           \ B(t) + D          當(dāng) B(n) != D'

                              =>    B(T) = / t.Balance + 2D    當(dāng) B(n) == D'
                                           \ t.Balance + D     當(dāng) B(n) != D'

   d. B(P) 公式
      H(n) = / H(4) + 2D      當(dāng) B(n) == D
             \ H(4) + D       當(dāng) B(n) != D                     -+
                                                                |
      由于必定: B(t) != D     =>    H(t) = H(n) + D      \      +
      B(p) = H(t) - H(1) = 2D =>    H(1) = H(t) - 2D     /      |
                                 => H(1) = H(n) - D            -+

                              =>    H(1) = / H(4) + D          當(dāng) B(n) == D
                                           \ H(4)              當(dāng) B(n) != D   -+
                                                                               +
                                    B(P) = H(4) - H(1)                        -+

                              =>    B(P) = / D'                當(dāng) B(n) == D
                                           \ 0                 當(dāng) B(n) != D

   e. B(N) 公式
                  +- 2D       當(dāng) B(T) == 2D  -+
      定義 X(T) = +  D        當(dāng) B(T) == D    |
                  +- 0        當(dāng) B(T) == 0    |
                              => X(T) = B(T)  + => H(T) = H(3) + B(T) + D     -+
             +- H(3) + 3D     當(dāng) B(T) == 2D   |                                |
      H(T) = +  H(3) + 2D     當(dāng) B(T) == D    |                                |
             +- H(3) + D      當(dāng) B(T) == 0   -+                                |
                                                   B(N) = H(T) - H(P)          +
      定義 X(P) = / D         當(dāng) B(P) == D'  -+                                |
                  \ 0         當(dāng) B(P) == 0    |                                |
                              => X(P) = -B(P) + => H(P) = H(4) - B(P) + D     -+
      H(P) = / H(4) + 2D      當(dāng) B(P) == D'   |
             \ H(4) + D       當(dāng) B(P) == 0   -+

                              =>    B(N) = H(3) - H(4) + (B(T) + B(P))  \
                                    B(n) = H(3) - H(4)                  /
                                 => B(N) = B(n) + B(T) + B(P)
                                         = n.Balance + B(T) + B(P)

   f. H(N) - H(p) 公式 (即調(diào)整后的高度變化)
      由于 B(T) in {0, D, 2D} => H(T) = H(2) + D
      若 B(n) != D'           => B(N) = B(T) => H(N) = H(T) + D = H(2) + 2D   -+
      若 B(n) == D'           => B(P) = 0                   -+                 |
                                 B(T) = B(t) + 2D            +                 |
                                 B(N) = B(n) + B(T) + B(P)  -+                 +
                                                                               |
                                 => B(N) = B(t) + D => H(N) = H(T) + D         |
                                                            = H(2) + 2D       -+

                                    => H(N) = H(2) + 2D     -+
      H(p) = / H(2) + 2D      當(dāng) B(t) == 0                   + =>
             \ H(2) + 3D      當(dāng) B(t) != 0                  -+

      H(N) - H(p) = / 0       當(dāng) B(t) == 0
                    \ -D      當(dāng) B(t) != 0


5. 旋轉(zhuǎn)方式(Right-Left)
   a. 旋轉(zhuǎn)前的樹結(jié)構(gòu)和函數(shù)方程如下:
      注: 因旋轉(zhuǎn)方式與 (Left-Right) 左右對稱, 所以推理方法相同, 故省略推理過程
            (p)               B(p) = H(1) - H(t) = 2D'
            / \
          (1) (t)             B(t) = H(n) - H(2)
              / \
            (n) (2)           B(n) = H(3) - H(4)
            / \
          (3) (4)             同時必定存在: B(t) != D', 可以用反證法證明.

   b. 旋轉(zhuǎn)后的樹結(jié)構(gòu)和函數(shù)方程如下: (注: 結(jié)點 p, t, n 旋轉(zhuǎn)后分別定義為 P, T, N)
          ( N  )              B(N) = H(T) - H(P)
          /    \              B(P) = H(1) - H(3)
        (P)    (T)            B(T) = H(4) - H(2)
        / \    / \
      (1) (3) (4)(2)          同時必定存在: B(P) != D', 可以用反證法證明.

   c. B(T) 公式
      B(T) = / t.Balance + 2D'當(dāng) B(n) == D
             \ t.Balance + D' 當(dāng) B(n) != D

   d. B(P) 公式
      B(P) = / D              當(dāng) B(n) == D'
             \ 0              當(dāng) B(n) != D'

   e. B(N) 公式
      B(N) = n.Balance + B(P) + B(T)

   f. H(N) - H(p) 公式 (即調(diào)整后的高度變化)
      H(N) - H(p) = / 0       當(dāng) B(t) == 0
                    \ -D      當(dāng) B(t) != 0


6. 旋轉(zhuǎn)方式(Right-Right)
   a. 旋轉(zhuǎn)前的樹結(jié)構(gòu)和函數(shù)方程如下:
      注: 因旋轉(zhuǎn)方式與 (Left-Left) 左右對稱, 所以推理方法相同, 故省略推理過程
            (p)               B(p) = H(1) - H(t) = 2D'
            / \
          (1) (t)             B(t) = H(2) - H(n)
              / \
            (2) (n)           B(n) = H(3) - H(4)
                / \
              (3) (4)         同時必定存在: B(t) != D, 可以用反證法證明.

   b. 旋轉(zhuǎn)后的樹結(jié)構(gòu)和函數(shù)方程如下: (注: 結(jié)點 p, t, n 旋轉(zhuǎn)后分別定義為 P, T, N)
          ( T  )              B(T) = H(P) - H(N)
          /    \              B(P) = H(1) - H(2)
        (P)    (N)            B(N) = H(3) - H(4)
        / \    / \
      (1) (2) (3)(4)          同時必定存在: B(P) != D, 可以用反證法證明.

   c. B(N) 公式
      B(N) = B(n) = n.Balance

   d. B(P) 公式
      B(P) = D' - B(t) = D' - t.Balance

   e. B(T) 公式
      B(T) = B(t) - D' = t.Balance - D'

   f. H(T) - H(p) 公式 (即調(diào)整后的高度變化)
      B(T) =  B(t) - D'       => B(T) != D'
                              => H(T)  = H(P) + D     -+
      H(P) = / H(1) + 2D   當(dāng) B(P) == D'               +
             \ H(1) + D    當(dāng) B(P) == 0               -+
                              => H(T) = / H(1) + 3D   當(dāng) B(P) == D'  -+
                                        \ H(1) + 2D   當(dāng) B(P) == 0    |
                                                                      + =>
      H(p) = H(t) + D   \                                             |
      H(t) = H(1) + 2D  /     => H(p) = H(1) + 3D                    -+

      H(T) - H(p) = / 0    當(dāng) B(P) == D'=> B(t) == 0
                    \ -D   當(dāng) B(P) == 0 => B(t) != 0


7. 增/刪結(jié)點的要點分析
   a. 插入結(jié)點
      插入結(jié)點沿著根結(jié)點向上增加平衡值, 若檢測到 p 為 2D 或 2D' 時, 只要使用 LL,
   LR, RL, 或 RR 中的一種旋轉(zhuǎn)調(diào)整平衡值, 且只要需要一次即可并中止向上增加平衡值.

   b. 刪除結(jié)點
      1). 由于 LR 旋轉(zhuǎn), 若 B(t) == 0 且 B(n) == D' 時, 則存在 B(T) = 2D 即失去平
         衡, 所以在刪除結(jié)點若遇到 B(t) == 0 時就改為 LL 旋轉(zhuǎn)即可避開 B(T) = 2D;

      2). 由于 RL 旋轉(zhuǎn), 若 B(t) == 0 且 B(n) == D 時, 則存在 B(T) = 2D' 即失去平
         衡, 所以在刪除結(jié)點若遇到 B(t) == 0 時就改為 RR 旋轉(zhuǎn)即可避開 B(T) = 2D';

      3). 刪除結(jié)點沿著根結(jié)點向上減去平衡值, 若檢測到 p 為 2D 或 2D' 時, 只要使用
         LL, LR, RL, 或 RR 中的一種旋轉(zhuǎn)調(diào)整平衡值, 當(dāng) B(t) == 0 時中止向上減去平
         衡值, 否則必須向上減去平衡值.

 

posted on 2011-05-22 10:44 Kyee Ye 閱讀(642) 評論(0)  編輯 收藏 引用 所屬分類: 算法
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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久久国产综合精品女不卡| 久久综合99re88久久爱| 久久久爽爽爽美女图片| 欧美在线播放高清精品| 欧美一区二区免费| 久久九九热re6这里有精品| 久久久精品久久久久| 久久免费99精品久久久久久| 欧美激情片在线观看| 亚洲日本欧美天堂| 亚洲欧洲一区二区在线观看 | 亚洲日本中文字幕| 日韩视频在线一区二区| 亚洲综合视频网| 久久免费黄色| 亚洲精品一区在线观看香蕉| 亚洲在线视频| 久久久久久久999精品视频| 欧美xxx成人| 国产精品日韩二区| 在线看片一区| 亚洲女性裸体视频| 欧美国产欧美综合| 亚洲综合成人婷婷小说| 久久综合一区二区| 国产精品羞羞答答| 午夜亚洲精品| 欧美激情a∨在线视频播放| 国产精品美女久久久久久免费| 狠狠色狠狠色综合日日91app| 99国产精品99久久久久久粉嫩 | 亚洲国产精品成人一区二区 | 久久久久**毛片大全| 欧美精品福利| 悠悠资源网亚洲青| 午夜伦欧美伦电影理论片| 欧美激情精品久久久久久大尺度 | 欧美一区二区三区在线免费观看| 亚洲国产aⅴ天堂久久| 欧美在线播放视频| 国产精品欧美激情| 一区二区激情小说| 亚洲二区在线| 狂野欧美激情性xxxx欧美| 国产精品看片你懂得| 99日韩精品| 亚洲人成网站777色婷婷| 久久久不卡网国产精品一区| 国产日韩欧美高清免费| 亚洲欧美国产日韩天堂区| 日韩午夜电影在线观看| 欧美电影打屁股sp| 最新亚洲一区| 亚洲人成在线影院| 欧美黄色成人网| 亚洲视频免费在线观看| 日韩视频―中文字幕| 欧美久久视频| 一本色道久久加勒比88综合| 亚洲人成人77777线观看| 欧美二区不卡| 一区二区三区四区五区在线 | 久久9热精品视频| 午夜精品久久久久久99热软件| 国产精品美女久久久免费| 亚洲一区区二区| 亚洲在线视频观看| 国产一区日韩二区欧美三区| 久久久久久国产精品mv| 久久久久久久成人| 亚洲国产网站| 99re亚洲国产精品| 国产精品va在线播放| 欧美一级视频一区二区| 亚洲男同1069视频| 一区二区视频欧美| 亚洲福利一区| 国产精品v欧美精品v日本精品动漫 | 伊人激情综合| 亚洲国产精品999| 欧美日韩午夜精品| 欧美在线首页| 老牛影视一区二区三区| 一区二区三区国产盗摄| 亚洲淫性视频| 在线欧美日韩精品| 99在线精品免费视频九九视| 国产欧美一区二区色老头 | 在线视频亚洲| 国产一区视频在线观看免费| 亚洲国产99| 国产酒店精品激情| 欧美成人免费网站| 国产精品乱码| 亚洲国产精品一区制服丝袜 | 亚洲丰满在线| 一区二区三区视频在线播放| 国产综合欧美| 亚洲精品久久久久久久久| 国产精品久久久久秋霞鲁丝| 免费成人黄色av| 国产精品久久久久久久久久久久| 久久精品一区二区三区四区| 欧美精品久久一区二区| 欧美专区日韩视频| 欧美日韩免费高清一区色橹橹| 久久久噜噜噜| 国产精品国产三级国产专播品爱网| 老司机久久99久久精品播放免费| 欧美日韩在线大尺度| 免费在线欧美视频| 国产三区精品| 国产日韩欧美一区二区三区在线观看| 欧美国产另类| 国产午夜久久| 一区二区免费在线视频| 亚洲欧洲在线一区| 久久视频在线看| 久久久国产一区二区三区| 国产精品成人国产乱一区| 91久久国产自产拍夜夜嗨| 激情久久婷婷| 久久精品视频免费| 久久九九国产精品怡红院| 国产精品久久久久三级| 亚洲最新视频在线| aa成人免费视频| 欧美日本国产在线| 亚洲激情av| 亚洲乱码国产乱码精品精可以看| 久久一区二区三区国产精品| 久久综合999| 影音先锋亚洲精品| 久久免费国产精品1| 麻豆精品视频在线观看视频| 国产日韩欧美在线一区| 午夜精品久久久久99热蜜桃导演| 国产精品综合网站| 亚洲欧美另类国产| 欧美一区二区视频观看视频| 国产精品一区二区a| 亚洲免费在线看| 久久精品二区| 亚洲国产精品va在线观看黑人| 久久这里有精品视频| 欧美黄色大片网站| 亚洲狼人精品一区二区三区| 欧美日韩高清在线| 亚洲午夜视频| 久久久久久久91| 91久久亚洲| 国产精品成人观看视频免费| 性欧美1819sex性高清| 久久久夜夜夜| 亚洲精品女av网站| 欧美三区免费完整视频在线观看| 亚洲国产天堂久久综合网| 麻豆精品在线播放| 亚洲日本欧美日韩高观看| 亚洲在线免费观看| 国产一区二区三区的电影| 久久久最新网址| 亚洲国产天堂久久综合| 午夜精品www| 亚洲国产裸拍裸体视频在线观看乱了| 欧美顶级少妇做爰| 亚洲欧美第一页| 欧美大胆成人| 欧美在线首页| 99视频一区| 在线观看视频一区二区欧美日韩| 欧美日本乱大交xxxxx| 欧美一级电影久久| 亚洲黄页一区| 欧美在线免费观看| 亚洲裸体在线观看| 国产午夜精品一区二区三区欧美| 欧美激情国产高清| 欧美一区二视频| 亚洲三级电影在线观看 | 亚洲精品视频免费| 久久久人成影片一区二区三区| 亚洲免费黄色| 一区二区三区在线视频观看| 国产精品jizz在线观看美国| 久久精品综合一区| 这里只有精品丝袜| 欧美成人在线免费观看| 欧美亚洲一区在线| aa亚洲婷婷| 亚洲日本电影| 在线免费精品视频| 国产三级欧美三级日产三级99| 欧美三级网址| 欧美精品一区二区高清在线观看| 久久蜜桃资源一区二区老牛| 亚洲一区亚洲二区| 一本久久综合亚洲鲁鲁五月天| 亚洲国产精品成人久久综合一区| 久热精品视频在线观看|