ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript で空ではないサブセットの数を見つける方法

JavaScript で空ではないサブセットの数を見つける方法

黄舟
黄舟オリジナル
2017-03-18 14:57:382295ブラウズ

数値または文字で構成され、値が繰り返される可能性があるシーケンスの要素がある場合、空ではないサブセットの数を見つけるにはどうすればよいでしょうか?

たとえば、シーケンス {1, 2, 3, 4} があり、その空でないサブセットには次のものが含まれます:

{{1}, {2}, {3}, {4}, {1,2 }、{1,3}、{1,4}、{2,3}、{2,4}、{3,4}、{1,2,3}、{1,2,4 }、{1 ,3,4}、{2,3,4}、{1,2,3,4}} およびその他の 15 項目、および空のセットは統計に含まれません。

もう 1 つの例は、シーケンス {a, b, c, d, d} です。これは内部に繰り返し値を持ちますが、セットは繰り返し可能ではないため、空ではないサブセットには次のものが含まれます:

{ {a}、{b}、{c}、{d}、{a,b}、{a,c}、{a,d}、{b,c}、{b,d}、{c, d }、{a,b,c}、{a,b,d}、{a,c,d}、{b,c,d}、{a,b,c,d}}、また 15 個の アイテム、重複した d が削除されました。

再帰 を使用すると、シーケンスの長さが 50 以上に達する可能性があるため、サブセットを見つける従来の方法は役に立たない可能性があります。

幸いなことに、サブセットの特定の内容を尋ねる必要はなく、数値だけを尋ねる必要があるため、数式を使用できます。

集合 (シーケンスではないことに注意) に N 要素がある場合、 2N乗の部分集合を持ちます。このサブセットには空のセットとそれ自体が含まれているため、空でないサブセットが必要な場合は、 2^N を使用できます。 - 1を計算します。

この問題は 2 のステップに分割できます:

1. シーケンスを重複排除します

2 空でないサブセットの数を計算します

function estSubsets(arr) {
    var hash = {};
    for(var i=0;i<arr.length;i++){
        hash[arr[i]] = null;
    }
    arr = Object.keys(hash);
    return Math.pow(2,arr.length) - 1;
}

以上がJavaScript で空ではないサブセットの数を見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。