a simple algorithm for generating unordered rooted trees

17
A Simple Algorithm for A Simple Algorithm for Generating Unordered Generating Unordered Rooted Trees Rooted Trees 中中 中 中中 中中 中中 中 中中 中中 中中中中 中中中中中中 中中中中中中中中中中 中中中中中中中中2003 中 5 中 23 中 中中中中中中中中中

Upload: adele

Post on 05-Jan-2016

32 views

Category:

Documents


0 download

DESCRIPTION

A Simple Algorithm for Generating Unordered Rooted Trees. 中野 眞一    宇野 毅明  群馬大学     情報学研究所             ( 総研大の博士課程に入           学したい人募集中 ) 2003年5月23日 アルゴリズム研究会. 研究背景. 列挙の研究は面白い ・ キレイな結果の出る問題が残っている     (アルゴリズム的な研究がされつくしていない)  ・ 近年、工学的な応用が増えた     (計算機パワーの増大&アルゴリズムの進展で、 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: A Simple Algorithm for Generating Unordered Rooted Trees

A Simple Algorithm for Generating A Simple Algorithm for Generating Unordered Rooted TreesUnordered Rooted Trees

中野 眞一    宇野 毅明中野 眞一    宇野 毅明 群馬大学     情報学研究所

            (総研大の博士課程に入           学したい

人募集中)

2003 年 5 月 23 日 アルゴリズム研究会

Page 2: A Simple Algorithm for Generating Unordered Rooted Trees

研究背景

列挙の研究は面白い列挙の研究は面白い

 ・ キレイな結果の出る問題が残っている    (アルゴリズム的な研究がされつくしていない)

 ・ 近年、工学的な応用が増えた    (計算機パワーの増大&アルゴリズムの進展で、    列挙という手法を使ったモデルを解けるようになった)

Page 3: A Simple Algorithm for Generating Unordered Rooted Trees

問題:根付き木の列挙

問題: 頂点数が 1 から n までの根付き木を列挙せよ。ただし、根が同一かつ同型なものは同一視せよ。

例えば、 1 頂点から子供を付け足していくバックトラック法で列挙できるが、同型なものをたくさん出力してしまう

Page 4: A Simple Algorithm for Generating Unordered Rooted Trees

応用:グラフマイニング

問題: 入力した根付き木の中に頻出する( α 回以上現れる)根付き木を列挙せよ

解法: 1頂点からなる木を1つずつ大きくしていき、頻出すれば出力、頻出でなくなったら引き返す、というバックトラック型の探索をする

入力した木

Page 5: A Simple Algorithm for Generating Unordered Rooted Trees

順序木と無順序木

順序木:各頂点に、その子供の順序が与えられている木 ⇒  無順序木:順序が与えられていない木

2つの順序木が同型 ⇔  根と、順序を保存する同型写像が存在

これらは無順序木として同型だが、順序木としては異なる

Page 6: A Simple Algorithm for Generating Unordered Rooted Trees

順序木の depth sequence

順序木の depth sequence :   左を優先して深さ優先探索し、訪れた頂点の深さをpre-order で並べる

2つの順序木が同型 ⇔ depth sequence が等しい

0,1,2,3,3,2,2,1,2 0,1,2,2,3,3,2,1,2 0,1,2,1,2,3,3,2,2

Page 7: A Simple Algorithm for Generating Unordered Rooted Trees

left heavy embedding

L(v) : v から下の部分木の depth sequence

bro(v ) : v の左隣の兄弟

T が Left-heavy embedding : ⇔ 任意の頂点 v について、 L(bro(v)) ≧ L(v)

・ left heavy embedding と無順序木は1対1対応⇒ left… を列挙しましょう

0,1,2,3,3,2,2,1,2 0,1,2,2,3,3,2,1,2 0,1,2,1,2,3,3,2,2

辞書順:長いほうが大きい

Page 8: A Simple Algorithm for Generating Unordered Rooted Trees

left heavy embedding の親left-heavy embedding T の親 P(T)   : T の最も右の葉を取った木

RP(T) : left heavy embedding T の最も右のパス・ RP(T) の各頂点 v について、 L(v) の末尾が1つ削られる      ⇒   P(T) は left heavy embedding

0, 1,2,3,3,2 ,1,2,2 0, 1,2,3,3,2, 1,2

T P(T)

Page 9: A Simple Algorithm for Generating Unordered Rooted Trees

Family tree

Left-heavy embedding の親子関係をグラフで表現

・これを深さ優先探索する・木 T の子供が作れれば 探索できる

Page 10: A Simple Algorithm for Generating Unordered Rooted Trees

left heavy embedding の子

・ T の子供 S は、 RP(T) の右に葉をつけたもの

・逆は、成り立つとは限らない RP(S) の任意の頂点 v について、 L(v) ≦ L(bro(v))

⇔   S が left heavy embedding

 ⇔   S は T の子供

T S 多項式時間で列挙可能

もう少しがんばる

子供の候補は n 個子供のチェック多項式時間

Page 11: A Simple Algorithm for Generating Unordered Rooted Trees

子供になる条件1

vi : RP(T) の深さ i の頂点

■ L(vi ) が L(bro(vi )) の prefix でない

   ⇒ L(vi ) に何を付け足しても L(vi ) < L(bro(vi ))

■ L(vi ) が L(bro(vi )) の prefix

( L(bro(vi )) = L(vi ) d1 d2 d3 … )

付けた葉の深さが d1 以下

⇔ L(vi ) ≦ L(bro(vi ))

 

vibro(vi )

・ 任意の vi について 成り立てば、子供

Page 12: A Simple Algorithm for Generating Unordered Rooted Trees

子供になる条件2

v* : prefix となるものの中で最も浅い頂点

copydepth : v* の深さ

v* について先の条件が成り立てば任意の vi について成り立つ

d1

v*

深さ 1 から copydepth までの葉を付けたものが子供

Page 13: A Simple Algorithm for Generating Unordered Rooted Trees

copy depth の保持

vibro(vi )

d1

・ 付け足した頂点 u の深さが d1 と同じ

 ⇒ L(v* ) が L(bro(v* )) の prefix かつ一番浅い

 ⇒ d1 の次の頂点の深さが copy depth

・ d1 より浅い

⇒ u は prefix

 その他は prefix でない ⇒ u の深さが copy depth

Page 14: A Simple Algorithm for Generating Unordered Rooted Trees

アルゴリズムをまとめると

T: 木 , d : copy depth 、 L: T の depth sequence,

根付き木 ( T, v )

1: T を出力 (前の出力との差分)2: j := L での d の次の深さ3: 根付き木 ( T+ 深さが j の葉 , j )

4: for i=0 to j-1

5: 根付き木 ( T+ 深さ i の葉 , i )

・ 1 反復の計算量 = O( 子供の数 ) ⇒ 1 反復あたり O(1)

・ 出力 は 1 反復あたり差分 1 ⇒ 1 回あたり O(1)

・ メモリ使用量は O(n)

Page 15: A Simple Algorithm for Generating Unordered Rooted Trees

n 頂点の根付き木の列挙

問題: 頂点数がちょうど n の根付き木を列挙せよ  ⇒ 根付き木を列挙し、頂点数が n のもののみ出力計算量は?#頂点数 n の根付き木   ≧ α #頂点数 n-1 の根付き木ならば、 1 つあたり定数時間

Page 16: A Simple Algorithm for Generating Unordered Rooted Trees

( # 頂点数 n の根付き木)を押さえる

問題: 頂点数 n-1 の木から、それ固有の、頂点数 n の木を 2 つ作る⇒   #頂点数 n の根付き木

  ≧ 2 × #頂点数 n-1 の根付き木

Page 17: A Simple Algorithm for Generating Unordered Rooted Trees

まとめと今後の展開

・頂点数が 1 から n の根付き木を列挙する、 1 つ当たり定数時間のアルゴリズムを提案した

・このアルゴリズムの計算時間が頂点数が n の根付き木にたいしても、 1 つ当たり定数時間であることを証明した

今後は:・ グラフマイニングに応用したい・ 根のついていない木、平面に埋め込んだ木なども、同じように列挙したい