Efficient Enumeration of the Directed Binary

動的計画法を用いた有向二値完全系統樹の
効率のよい列挙
森戸 一貴†,○斎藤 寿樹†† ,山口 一章†† ,増田 澄男††
(† 西部建設 †† 神戸大学)
コンピュテーション研究会-アルゴリズム研究会 連立開催(小樽) 2013年5月17-18日
種形質行列と有向二値完全系統樹
• 種形質行列 M
• すべての形質は二値 (0か1).
• msc = 1 ⇔ 種 s は形質 c を持つ
• 有向二値完全系統樹
• 各葉が1つの種のラベルを持つ順序なし根付き木
• 各形質は一つの頂点にラベル付けされる
• 種sが形質cを持つ ⇔ ラベルsを持つ葉はラベルcを持つ頂点の子孫である
c1
c2
c3
c4
c5
c6
s1
0
0
1
1
1
0
s2
0
1
1
0
0
0
s3
1
0
0
0
0
1
s4
0
0
1
1
0
0
s5
1
0
0
0
0
0
c3
c1
c2
c4
s2
c5
s1
s4
c6
s3
s5
種形質行列と有向二値完全系統樹
Ci : 形質ciを持つ種の集合
補題 [Jannson, 2008]
種形質行列Mが有向二値完全系統樹を持つ
⇔ 任意の二つの形質ci, cj について,次の3つのいずれかが成立
(i) Ci ⊆ Cj, (ii) Cj ⊆ Ci, (iii) Ci ∩ Cj =φ
{C1, …, Cm}がラミナー族
C3={s1, s2, s4}
C4={s1, s4} C6={s3}
c1
c2
c3
c4
c5
c6
s1
0
0
1
1
1
0
s2
0
1
1
0
0
0
s3
1
0
0
0
0
1
s4
0
0
1
1
0
0
s5
1
0
0
0
0
0
C4 ⊆ C3
C3 ∩C6 = ∅
c3
c1
c2
c4
s2
c5
s1
s4
c6
s3
s5
不完全データから有向二値完全系統樹の列挙
• 入力: 不完全な種形質行列
• いくつかの要素が未知
• 出力: すべての有向二値完全系統樹
• すべての未知の要素に 0 もしくは 1 を割り当てる
C1
C2
C3
C4
C5
C6
C1
C2
C3
C4
C5
C6
S1
0
0
1
1
1
0
S2
0
1
1
0
0
0
S3
1
0
0
0
0
1
S4
0
0
1
1
0
0
S5
1
0
0
0
0
0
C1
C2
C3
C4
C5
C6
S1
0
0
1
?
1
0
S2
0
1
1
0
0
0
S3
?
0
?
0
0
1
S1
0
0
1
1
1
0
S4
0
0
1
1
0
0
S2
0
1
1
0
0
0
S5
1
0
0
?
0
0
S3
0
0
1
0
0
1
S4
0
0
1
1
0
0
S5
1
0
0
0
0
0
・
・
・
C3
C1
C6
C2
C4
S2
S5
S3
C5
S1
S4
C1
C3
S3
C4
C2
C5
S1
S4
S2
C6
S5
既存の研究
• 有向二値完全系統樹を一つ求める
• 多項式時間アルゴリズム[Pe’er et al., 2004]
• 列挙アルゴリズム[Kiyomi et al., 2012]
• 分枝限定法
ZDDを用いた手法が圧勝
• ZDDを用いた手法
• 有向二値完全系統樹の数え上げ問題
• #P完全
ZDD (Zero-suppressed Binary Decision Diagram):
組合せ集合をコンパクトに表現するデータ構造
• フロンティア法
• すべての解を保持するZDDを直接求める手法
≒ 動的計画法を使った数え上げ
本研究成果
• 有向二値完全系統樹の列挙アルゴリズムの開発
• すべての有向二値完全系統樹を保持するZDDの構築
• フロンティア法を応用したZDD構築アルゴリズムの開発
= 動的計画法による有向二値完全系統樹の数え上げ
2+d
• 指数時間アルゴリズム (nm2+m・D・2 O(m
C1
C2
C3
C4
C5
C6
S1
0
0
1
?
1
0
S2
0
1
1
0
0
0
S3
?
0
?
0
0
1
S4
0
0
1
1
0
0
S5
1
0
0
?
0
0
max)時間)
n:種の数
m:形質の数
D:未知の要素の数
dmax:未知の要素数が最も多い行の未知の要素数
例: D = 4, dmax = 2
アルゴリズムのアイディア
• 未知の要素を順に場合分け
枝刈り
2. 部分問題の共有
:0
:1
1.
x14
x31
C1
C2
C3
C4
C5
C6
S1
0
0
1
?
1
0
S2
0
1
1
0
0
1
S3
?
0
?
0
0
0
S4
0
0
1
1
0
0
S5
1
0
0
?
0
0
x31
x33
x54
1 0 1
x33
x54
x54
0 1
x33
x54
0 0
x54
0
x33
x54
x54
x54
1 0 1 0 1 0 0 0
部分問題の共有のアイディア
C1 C2 C3
S1
1
1
0
S2
0
1
0
S3
0
0
1
S4
?
0
?
S5
1
?
?
C1 C2 C3
C1⊆C2
C1∩C3=φ
C2∩C3=φ
C1⊆C2
C1∩C3=φ
C2∩C3=φ
S1
0
1
1
S2
1
1
0
S3
0
0
1
S4
?
0
?
S5
1
?
?
• すべての2列の関係が一致していたら,共有させる
• 2列の関係:包含 or 共通部分が空
• 2列の関係が決まっていないものがいくつもある
ラミナー配列によって,すべての2列の関係を保持
ラミナー配列
• すべての2列の関係もしくは関係の候補を格納する
𝑆𝑢𝑏𝑠𝑒𝑡
𝑆𝑢𝑝𝑠𝑒𝑡
𝐸𝑚𝑝𝑡𝑦
𝑆𝑢𝑏𝑆𝑢𝑝
𝐿𝑎𝑚𝑖𝑛𝑎𝑟 𝐶𝑖 , 𝐶𝑗 =
𝑆𝑢𝑏𝐸𝑚𝑝
𝑆𝑢𝑝𝐸𝑚𝑝
𝑆𝑢𝑏𝑆𝑢𝑝𝐸𝑚𝑝
C1
C2
C3
C4
C5
C6
S1
0
0
1
?
1
0
S2
0
1
1
0
0
0
S3
?
0
?
0
0
1
S4
0
0
1
1
0
0
S5
1
0
0
?
0
0
C1
C1
C2
C3
C4
C5
C6
Ci ⊆ Cj
Cj ⊆ Ci
Ci ∩ Cj
Ci ⊆ Cj
Ci ⊆ Cj
Cj ⊆ Ci
Ci ⊆ Cj
のとき
のとき
= φ のとき
or Cj ⊆ Ci のとき
or Ci ∩ Cj = φ のとき
or Ci ∩ Cj = φ のとき
or Cj ⊆ Ci or Ci ∩ Cj = φ のとき
C2
C3
C4
C5
C6
Empty
Empty
Empty
Empty
SupEmp
Subset
Empty
Empty
Empty
Supset
Supset
SupEmp
SupEmp
Empty
Empty
各部分問題で保持すべき情報
• ラミナー配列
• “割り当て中の行”のすべての要素
C1
C2
C3
C4
C5
C1
C2
C3
C4
C5
C6
S1
0
0
1
0
1
0
S2
0
1
1
0
0
S3
0
0
?
0
S4
0
0
1
S5
1
0
0
C1
C2
C3
C4
C5
C6
S1
0
0
1
0
1
0
1
S2
0
1
1
0
0
1
0
0
S3
1
0
?
0
0
0
1
0
0
S4
0
0
1
1
0
0
?
0
0
S5
1
0
0
?
0
0
C2
C3
C4
C5
C6
Empty
Empty
Empty
Empty
Empty
C1
Subset
Empty
Empty
SubSup
C2
Supset
Supset
Supset
C3
Empty
Empty
C4
Empty
C5
C2
C3
C4
C5
C6
Empty
Empty
Empty
Empty
Empty
Subset
Empty
Empty
SubSup
Supset
Supset
Supset
Empty
Empty
Empty
計算時間
n:種の数
m:形質の数
D:未知の要素の数
dmax:未知の要素数が最も多い行の未知の要素数
• ラミナー配列の初期化:O(nm2)時間
• ラミナー配列の更新:O(m)時間
• 一つの未知の要素に 0 もしくは 1 を割り当てたとき,
配列の高々m箇所が変わる
各レベルでの部分問題の数は
高々7½ m(m-1)・2dmax個
各部分問題が持つ情報
• ラミナー配列
• 探索中の行の未知の要素の値
全体の計算時間: nm2+mD7 ½ m(m-1) ・2dmax
高さD
計算機実験
• 実験データ
• msプログラム[Hudson 2002]でランダムな種形質行列を生成
• 未知の要素を持たない,有向二値完全系統樹を持つデータ
• 各要素を確率pで未知の要素に書き換え
• 確率 p:0.1, 0.2, 0.3, 0.4, 0.5
• 種の数:50, 100, 150, 200
• 形質の数:50, 100
• それぞれ100個生成
• 実験環境
• CPU : Intel Core i3 - 2120. clock freq : 3.30GHz
• Memory : 16GB
• プログラム言語:C++
• ZDDライブラリ:SAPPOROBDD
• タイムアウト2分
R
TM
実験結果(1)
実験結果(2)
ZDDによる手法
提案手法
まとめと今後の課題
• まとめ
• 有向二値完全系統樹の数え上げアルゴリズムを開発
• 動的計画法を用いた方法
• ZDDを用いた手法よりも,形質の数が少ないときは高速
• 今後の課題
• 新たな共有化の提案
• 要素順序の問題
• 並列化による高速化
• 実データを使った実験