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