アルゴリズムのメモ:リニアイル説明

リニアベースはハイレベルの音ですが、実際には非常に単純なアルゴリズムは、線形代数における基底ベクトルの性質に似て、無関係な数字の集まり線形整数の集合です。彼は、アルゴリズムを言った、私はそれがアイデアで、より興味を持っていると思います。

例えば、ベクトルの集合:

V1 = {1、0、0}

V2 = {0、1、0}

V2 = {0、0、1}

3のいずれかは、他の2つで表すことができないので、それらは線形独立です。

例えば、直鎖状の基(以下、バイナリ表現)。

整数の集合{101、100、010、011、リニアイルに対して001}与えます

{101、010、001}(これはベクトルのセット数ではないああ

3間の線形グループのいずれかは、他の2つのXORすることによって得ることができず、元のセットの任意の数は、排他的または直鎖状の基の特定の数によって得ることができます。

次のようにリニア・グループのためのプロセスは、以下のとおりです。

ll lb[61];//线性基,大小取决于数字值域
int inse(int x)//将x插入线性基,插入成功返回1,否则返回0
{
    //每次找到x的最高位的1
    //若线性基这个位置还没有数字,则把x插入这里
    //否则用线性基中这个位置的数字异或x,继续找x最高位的1
    for (int i=60; i>=0; i--)//i的初值取决于数字的值域
    {
        if (!(x&(1ll<<1))) continue;
        if (!lb[i]) {lb[i]=x; return 1;}
        x^=lb[i];
    }
    return 0;
    //可以看出,线性基中位置在i的数字的二进制第i位(从右往左数)一定是1
    //更大的二进制位置一定是零,这样就保证了线性基中的数字都是线性无关的
}

ll num[101];//整数集合
for (int i=1; i<=100; i++)
    inse(num[i]);//将整数集合中的数字逐一插入线性基

線形基は、典型的には、特定の数の排他的を得るために、整数のセット、または整数のサブセットからサブセットを選択するかどうかを決定するために使用されます。(特定のベクターは、ベクターを用いてこれらのベクターで表現することができるかどうかを説明するために、あなたにいくつかのベクトルを与えることです)。

一般的には、リニアな特性の3つのグループがあります。

1、元の任意の数の内部の異なるグループの数で線形数内部設定又は排他的またはアウト値のオリジナルセットのいくつかの数で得ることができ、直鎖又はイソブチル基は、いくつかを与えることができます

もしKが正常デジタルリニア基、一部のデジタルリニアグループに挿入されていないか、または排他的Kを得ることができる:2、一緒になって直鎖状の基のいずれか、またはいくつかの数字が0(注排他的ではありません

図3に示すように、任意の2つの異なるグループのサブセット、サブセットまたはすべての番号異なるの排他的アップ結果リニア

図4は、直鎖状の基は、上記の特性を満たす最小の集合であります

削除をサポートするための方法をいくつかの線形グループの基本と同様に、(前の番号の挿入)、ギャングのブログの書き込みは非常に明確です:

リニアに基づいて削除操作、私は少しを追加します。


いくつかの例と問題、修正明日への解決策がありますORZ

おすすめ

転載: www.cnblogs.com/opppppppp/p/12630002.html