ツリー構造のデータで機能するツールを書きたいと思います。(実際には、git リビジョン DAG のツリーのようなサブセットで動作しますが、それはこの質問では重要ではありません)。特に、特定の入力セットのすべての「結合ポイント」からなるツリーのサブセットを再構築するアルゴリズムが必要です。
具体的に私が欲しいと思うのは
H
「最小共通祖先」関数を持つ型がありlca
ます。これによりH
、ツリーのような構造が得られます。このアルゴリズムは、 のサブセット
S
をH
入力として受け取ります。t
出力は、 の値でラベル付けされたノードを持つ多元木になりますH
。t
プロパティを満たす必要がありますすべて
s
のS
ラベルの一部のノードt
の葉は、 の
t
要素によってのみラベルを付けることができますS
のノードが 1 つ以下
h
のラベルの任意の要素H
t
h1
labelsn1
とh2
labelsの場合、との最小共通祖先にラベルをn2
付けます。lca(h1, h2)
n1
n2
t
私の質問は、「これは既知のアルゴリズムの既知の問題ですか?」です。そうだと思います。トポロジカルソートに非常に似ているようです。マージソートに基づくアルゴリズムのアイデアはありますが、既知のアルゴリズムが既に存在する場合、独自のアルゴリズムを思いつく理由はありません。