木上のアルゴリズム
研究中に練習問題としてちょうどいいレベルの問題がいくつかでてきたのでメモ.
全部簡単だけど,きれいなプログラムにするのは悩む.
問1,3は線形時間でメモリはO(1)
問2,4は線形時間で線形メモリ
まずはnotation
[n]={0,1,2,..,n}
f: [n]->[n]
f(k)0), f(0)=0
f^*(k)={k, f(k), f(f(k)), f(f(f(k))), ...}
- 問1
k∈[n]が与えられたとき,f(s)=kなるsが存在するかを判定するアルゴリズム,
- 問2
- 問3
s,t ∈ [n]が与えられたとき,max{f^*(s)∩f^*(t)}を求めるアルゴリズム
- 問4
各列がちょうど2個の非ゼロ成分を持つZ_2上の n x (n+1)行列が疎行列表現で与えられたとき,
ランクがnであるかを判定するアルゴリズム.
すなわち,無向グラフが接続リストで与えられたとき,全域木であるかどうかを判定する問題