web-dev-qa-db-ja.com

最小限のカバーと機能依存性

次の機能的な依存関係がある場合、最小カバーをどのように計算しますか:

A -> B, ABCD -> E, EF -> GH, ACDF -> EG

講義ノートでは、最小限のカバーの派生を示していますが、理解できません。

たとえば、ACDF-> Eを削除する場合:

A -> B => AACD -> BACD -> E => ACD -> E => ACDF -> E

そして彼らは言う、同様に私達はACDF-> Gを守らない

そして、私はABCD-> EACD-> Eに演thatされることを理解していますA-> Bであるが、正式なそれに到達する方法のプロセス。

だから私の質問は、誰もが機能的な依存関係のセットの最小限のカバーを生成する方法の説明を提供できますか?

28
kachilous

最小限のカバーを取得するには、2つのステップを実行する必要があります。実証するために、最初に依存関係を複数(右側に1つの属性のみ)に分割して、よりクリーンにするようにします。

A -> B
ABCD -> E
EF -> G
EF -> H
ACDF -> E
ACDF -> G

次の手順mustはこの順序(#1、次に#2)で実行されます。そうしないと、誤った結果が得られます。

1)冗長な属性を取り除きます(左側を減らします):

左側を1つずつ取り出し、各属性を1つずつ削除してから、右側(すべての依存関係に対して1つの属性のみ)を推測しようとします。成功したら、その文字を左側から削除して続行できます。複数の正しい結果が存在する可能性があることに注意してください。これは、削減を行う順序によって異なります。

ABCD -> E(最初の依存を使用)およびACD -> ABCDから、依存関係ABCD -> EからBを削除できることがわかります。あなたは完全な深さを使用することができます。現在削減しているため、最初は混乱することがありますが、考えてみれば、それができることが明らかになります。

同様に、ACDF -> EからACD -> ABCD -> ABCDE -> EからFを削除できます(明らかに、文字自体から1文字を推定できます)。このステップの後、以下が得られます。

A -> B
ACD -> E
EF -> G
EF -> H
ACD -> E
ACDF -> G

これらのルールは、元のルールと同じ依存関係を表しています。重複したルールACD -> Eがあることに注意してください。全体を(数学的な意味で)セットとして見ると、1つのセットで同じ要素を2回持つことはできません。とりあえず、次のステップでそれを取り除くため、ここでは2回だけ残しています。

2)冗長な依存関係を取り除く

次に、各ルールについて、それを削除し、他のルールのみを使用して同じルールを推測するかどうかを確認します。このステップでは、もちろん、depを使用できません。現在削除しようとしています(前の手順でできました)。

最初のルールA -> Bの左側を取り、今のところそれを非表示にすると、Aだけでは何も推測できないことがわかります。したがって、このルールは冗長ではありません。他のすべてについても同じことを行います。 (明らかに)重複したルールACD -> Eの1つを削除できることがわかりますが、厳密に言えば、アルゴリズムも使用できます。同じ2つのルールのうち1つだけを非表示にし、左側(ACD)を取り、もう一方を使用して右側を推測します。したがって、ACD -> E(もちろん1回のみ)を削除できます。

ACDF -> Gであるため、ACDF -> ACDFE -> Gを削除できることもわかります。結果は次のとおりです。

A -> B
EF -> G
EF -> H
ACD -> E

これは元のセットの最小限のカバーです。

70
kuba