2分探索
データ検索 検索: データの保持状態で検索処理の効率は変わるか? 2つの状態では検索処理の効率の差はどの程度? 与えれたキー(探索キー)と等しいキーを、あるデータ集合の中から探す操作 データの保持状態で検索処理の効率は変わるか? データがでたらめの順番で格納されている状態 データが予めソートされて格納されている状態 2つの状態では検索処理の効率の差はどの程度? 単語がでたらめな順で並んでいる辞書での検索 単語が辞書式順で並んでいる辞書での検索
2分探索法 10を検索 left left right right 1 4 7 10 11 14 18 3 mid mid mid 10を発見
2分探索法 5を検索 left left left right right 1 4 7 10 11 14 18 3 mid mid mid 探索失敗
2分探索木 3 2 8 14 13 5 10 2 3 5 8 10 13 14
2分探索木 8を探索 8 3 2 8 14 13 5 10 8を発見
2分探索木 7を探索 7 3 2 8 14 13 5 10 探索失敗
検索時間は木の高さに比例 バランスの悪い木 O(n) バランスの良い木 O(log n)
挿入(2分探索木) 7を挿入 7 5 3 13 2 8 14 7 10
検索時間の期待値(2分探索木) … … … … 1,2,3,4,5 3,2,4,1,5 全ての順列を考える 1 2 3 4 1 2 計 10 1 1 2 3 4 2 3 1 2 … 2 4 … 3 4 1 5 5 計 10 計 6 Dn = (各計の合計/ n!) = (「深さの合計」の平均) Tn = (Dn÷n) = 「深さの平均」の平均
検索時間の期待値(2分探索木) … … … … … … 1,2,3,4,5 ?,?,?,?,? 3,2,4,1,5 全ての順列を考える 1 1 1 2 3 4 2 3 … … … 3 1 1 ? 2 4 4 5 2 1 5 2 計 10 計 ? 計 6 Dn = (各計の合計/ n!) = (「深さの合計」の平均)は何に対応? Tn = (Dn÷n) = 「深さの平均」の平均は何に対応?
検索時間の期待値(2分探索木) k 根がkの場合を考える 根がkの場合の深さの総和 = (k-1)(1+ Tk-1) + 0 + (n-k)(1+ Tn-k) = (n-1) + (k-1)Tk-1 + (n-k)Tn-k = (n-1) +Dk-1 + Dn-k k kは1~nまで動くのでそれの平均 Dn = ∑1≦k≦n (n-1 +Dk-1 + Dn-k ) /n = n-1 + (2/n)∑1≦k≦n-1 Dk = 2(n+1) (Hn+1-2)+2 (演習問題5.6) ⇒ Tn = O(log n) k-1頂点の木 各頂点の深さ の平均=Tk-1 n-k頂点の木 の平均=Tn-k
削除(内点の子を持たない場合) 4 6 10
削除(内点の子を1つ持つ場合) 9 5 2
削除(内点の子を2つ持つ場合) 2 6 4 10 9 8 7