网站大量收购闲置独家精品文档,联系QQ:2885784924

学类工学特论.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学类工学特论

アルゴリズム工学特論 定兼 邦彦 2006年11月1日 木構造のBP表現 木を括弧列で表現 内部節点: (...) 葉:() 2n+o(n) bits ノードは( の位置で表現 可能な演算 括弧列での操作 rankp(P,i): P[1..i] 中のパタン p の数を返す selectp(P,i): P 中の i 番目の p の位置を返す findclose(P,i): P[i] の( と対応する )の位置を返す enclose(P,i): P[i] の( を囲む括弧の位置を返す 木の巡回 P: 木の括弧列表現 ノードは( の位置で表されているとする root() = 1 parent(v) = enclose(P,v) firstchild(v) = v + 1 sibling(v) = findclose(P,v) + 1 ノードの深さ P’[i] = rank((P,i) ? rank)(P,i) とすると depth(v) = P’[v] P’はPから計算できる 子孫の数 (部分木の大きさ) v を根とする部分木の大きさは subtreesize(v) = (findclose(P,v)?v+1)/2 findcloseのデータ構造 括弧列を長さ B = ? log n のブロックに分割 b(p): p のブロックの番号 ?(p): p とマッチする括弧の位置 括弧 p が far ? b(p) ? b(?(p)) far 開括弧 p が opening pioneer ? p の直前の far 開括弧 q に対し b(?(p)) ? b(?(q)) opening pioneerと対応する括弧の位置を0,1ベクトルで表現 補題: ブロックの数を ? とすると,opening pioneerの数は 2??3 以下. 証明: 各ブロックをノード,(b(p), b(?(p)) を枝とするグラフは外平面グラフ opening/closing pioneerは再びBPになる ? = n/B = 2n/log n ? BPの長さは O(n/log n) 再帰の深さは 2 で十分 findcloseのアルゴリズム ?(p) = findclose(P,p) を求めるとき p が far でないなら ?(p) はテーブルから求まる p の直前の pioneer p* を求める pioneerの括弧列を用いて?(p*) を求める p がpioneerでないなら, b(?(p)) ? b(?(p*)) pとp*の深さの差から,?(p) の位置が決まる enclose ?(p) = enclose(P,p) とする b(?(p)) = b(p) ならば ?(p) は表引きで求まる b(?(p)) ? b(p) ならばそれらの括弧の位置を記憶 対応する括弧の位置も記憶 括弧が複数ある場合は一番外側だけ記憶 括弧を抜き出して再帰 lcaの計算 lca = lowest common ancestor u = lca(v,w): v と w の共通の祖先で最も根から遠いもの 定数時間で計算可 P’[i] = rank((P,i) ? rank)(P,i) とすると u = parent(RMQP’(v,w)+1) m = RMQP’(v,w): P’[v..w] 中の最小値の添字 (RMQ = Range Minimum Query) Range Minimum Query 問題 (RMQ) 入力: 配列 A[1,n] (前処理可), 区間 [i,j] ? [1,n] 出力: 部分配列 A[i,j] 中の最小値の添字 補題: 長さ n の配列に対するデータ構造のサイズを s(n), 問い合わせ時間を t(n) とするとき,以下の式を満たすデータ構造は O(n) 時間で作成可. Cartesian Tree 配列 A[1,n] に対するCartesian treeとは 根ノード: A[1,n] の最小値 A[i] を格納 左部分木: A[1,i?1] に対するCartesian tree 右部分木: A[i+1,n] に対するCartesian tree Cartesian TreeとRMQの関係 RMQ(i,j) = lca(i,j) Cartesian Treeの性質 補題: A[1,n?1] に対する木に A[n] を追加したとき, A[n] は根から最右葉までのパス上に存在する. 証明: A[n] は配列中で一番右の要素なので 左の子にはならない. Cartesian Treeの作成 A[1,n?1] に対する木に A[n] を追加するとき A[n?1] から根までの要素と順に比較していく A[n]

文档评论(0)

fangsheke66 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档