PHPですべての配列のサブセットを見つける方法

zbt
リリース: 2023-07-05 13:30:01
オリジナル
1218 人が閲覧しました

php メソッドですべての配列サブセットを検索します。 1. 再帰的手法を使用して、大きな問題を複数の小さな問題に分割し、同じ処理メソッドをそれぞれの小さな問題に適用し、最後にすべての小さな問題の解決策を適用します。 2. ビット単位の演算を使用し、最初に結果を空の配列に初期化し、次にループを使用して 0 から 2 の n 乗 -1 までのすべての数値をスキャンし、各数値はサブセットを表します。内側のループでは、ビット操作を使用して現在位置が選択されているかどうかを判断し、選択されている場合は、対応するビットを持つ要素がサブセットに追加されます。最後に、サブセットを結果配列に追加します。

PHPですべての配列のサブセットを見つける方法

このチュートリアルの動作環境: Windows10 システム、php8.1.3 バージョン、DELL G3 コンピューター。

PHP 開発では、配列は非常に一般的に使用されるデータ構造であり、一連の関連データを格納するために使用できます。場合によっては、配列のすべてのサブセットを検索する必要がある場合があります。つまり、元の配列から任意の数の要素で構成される新しい配列を選択する必要があります。この記事では、PHP を使用して配列のすべてのサブセットを検索する方法を紹介します。

まず、概念を明確にする必要があります。配列のサブセットとは、元の配列からランダムに選択された 0 個以上の要素で構成される新しい配列を指します。たとえば、元の配列 [1、2、3] のサブセットは []、[1]、 [2]、[3]、[1、2]、[1、3]、[2、3]、[1、2、3]。

以下では、配列のすべてのサブセットを検索するためによく使用される 2 つの方法を紹介します。

1. 再帰的手法を使用する

再帰的手法は問題を解決するための効果的な手法です。大きな問題を複数の小さな問題に分割し、それぞれの問題を解決します。それぞれの小さな問題に同じ処理方法を適用し、最後にすべての小さな問題の解決策を組み合わせます。この方法では、再帰を使用して配列のすべてのサブセットを見つけることができます。

具体的な実装は次のとおりです。

function subsets($nums) {
$result = [[]]; // 初始化结果,包含一个空集合
foreach ($nums as $num) {
$count = count($result); // 当前结果的数量
for ($i = 0; $i < $count; $i++) {
$newSubset = $result[$i]; // 获取当前结果集合
$newSubset[] = $num; // 加入当前元素
$result[] = $newSubset; // 加入结果数组
}
}
return $result;
}
ログイン後にコピー

上記のコードでは、最初の初期化結果は空のコレクションを含む配列です。次に、元の配列の各要素を反復処理し、要素ごとに結果の配列の各サブセットに追加し、結果の配列に新しいサブセットを追加します。最後に、結果の配列が返されます。

2. ビット単位の演算を使用する

配列のサブセットを解決するためによく使用されるもう 1 つの方法は、ビット単位の演算を使用することです。配列のサブセットは 2 進数で表現できるため、各ビットはその位置の要素が選択されているかどうかを示します。たとえば、[1、2、 3] 要素は合計 3 つあります。サブセットを表すには 3 桁の 2 進数を使用できます。たとえば、1 は選択されたことを表し、0 は選択されていないことを表します。したがって、[1, 2, 3] のサブセット [1, 3] は] は 2 進数 101 で表すことができます。

具体的な実装は次のとおりです。

function subsets($nums) {
$result = []; // 初始化结果为空数组
$n = count($nums); // 数组的长度
for ($i = 0; $i < pow(2, $n); $i++) {
$subset = []; // 初始化子集
for ($j = 0; $j < $n; $j++) {
if ($i & (1 << $j)) { // 使用位运算判断该位是否选中
$subset[] = $nums[$j]; // 若选中,则将该元素加入子集
}
}
$result[] = $subset; // 将子集加入结果数组
}
return $result;
}
ログイン後にコピー

上記のコードでは、最初の初期化結果は空の配列です。次に、ループを使用して、0 から 2-1 までのすべての数値を反復処理します。各数値はサブセットを表します。内側のループでは、ビット演算によって現在位置が選択されているかどうかが判断され、選択されている場合は、対応する位置の要素がサブセットに追加されます。最後に、サブセットを結果配列に追加します。最後に、結果の配列が返されます。

概要:

この記事では、配列のすべてのサブセットを検索するためによく使用される 2 つの方法、つまり再帰的方法とビット単位の演算方法を紹介します。これら 2 つの方法は両方とも機能を実現し、一定の効率を実現できます。実際の開発では、特定のニーズに応じて適切な方法を選択してください。これらの方法により、配列のすべてのサブセットを簡単に解決できるため、開発効率が向上します

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!