次のアルゴリズムの時間計算量を改善するのを手伝ってください。
ハッセ図(ハッセ図とは何かをすでに知っている場合は、このセクションをスキップしてください。次のセクションに直接進んでください):
半順序集合(略してポーズ)(A、⊆)を考えます。ここで、Aは集合であり、⊆半順序です。図の各ノードは半順序集合の要素であり、2つの要素xとyが線で接続されている場合、x⊆yまたはy⊆xです。要素の位置と接続は、次のルールに従って描画されます。
半順序集合でx⊆yの場合、xに対応する点はyに対応する点の下に表示されます。
ポセットの推移性はグラフィカルに省略されます。つまり、x⊆yおよびy⊆zの場合、半順序⊆、x⊆zの推移性によって省略されます。この場合、接続xzは省略されます。
同様に、再帰性はグラフィカルに省略されています。
Poset(S = {{1,2,3,5}、{2,3}、{5}、{3}、{1,3}、{1,5}}、⊆)のハッセ図表現は次のように(エッジのみが報告されます)
{1,2,3,5}-> {2,3}
{1,2,3,5}-> {1,3}
{1,2,3,5}-> {1,5}
{2,3}-> {3}
{1,3}-> {3}
{1,5}-> {5}
私の最初の考え
私が考えることができる唯一のアルゴリズムは、次のようにO(N ^ 2)です。
最初の要素がSであることを読み取り、ハッセ図の最初の要素として挿入します。次の要素を読むとき、それらをすでに作成された図の正しい位置に挿入します(これまでに作成された図にK個の要素があるとすると、新しい要素を正しい場所に挿入するにはO(K)時間がかかります)。このようにして、O(N ^ 2)は明らかです。
しかし、ポセットSの要素を並べ替えることが役立つかどうかを考えていますが、⊆がすべての要素のペアに当てはまらない可能性があるため、Sの完全な要素の並べ替え順序を作成することはできません(例、{2,3}と{1,3を検討してください) })。
最悪の場合の複雑さを改善するためのアイデアは大歓迎です!!
ありがとう。
PS:これは宿題の問題ではありません!!