>  기사  >  백엔드 개발  >  순서와 중복을 모두 고려하여 1D 배열에서 가능한 모든 요소 조합을 생성하려면 어떻게 해야 합니까?

순서와 중복을 모두 고려하여 1D 배열에서 가능한 모든 요소 조합을 생성하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-31 20:47:02988검색

How can I generate all possible combinations of elements from a 1D array, considering both order and duplicates?

1D 배열에서 조합 생성

소개

주어진 배열의 요소 조합은 다음과 같은 다양한 도메인에서 응용 프로그램을 찾습니다. 조합론으로서 최적화.

문제 설명

주어진 1D 배열의 목표는 요소의 가능한 모든 조합을 결정하여 순서와 중복을 모두 고려하는 것입니다.

해결책

모든 조합을 생성하려면 순서와 중복을 고려하면서 체계적인 접근이 필요합니다. 그러한 접근 방식 중 하나는 배열 조작과 함께 재귀를 활용하는 것입니다.

<code class="php"><?php

$array = array('Alpha', 'Beta', 'Gamma');

function depth_picker($arr, $temp_string, &$collect) {
    if ($temp_string != "") 
        $collect []= $temp_string;

    for ($i=0, $iMax = sizeof($arr); $i < $iMax; $i++) {
        $arrcopy = $arr;
        $elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element
        if (sizeof($arrcopy) > 0) {
            depth_picker($arrcopy, $temp_string ." " . $elem[0], $collect);
        } else {
            $collect []= $temp_string. " " . $elem[0];
        }   
    }   
}

$collect = array();
depth_picker($array, "", $collect);
print_r($collect);

?></code>

설명

  1. length_picker 함수는 배열을 재귀적으로 순회하고 순서에 따라 조합을 구성합니다.
  2. 각 재귀 호출은 배열, 한 번에 하나의 요소 제거.
  3. 배열 복사본이 비어 있지 않으면 수정된 배열과 제거된 요소가 추가된 현재 문자열을 사용하여 재귀가 계속됩니다.
  4. 배열 복사의 경우 비어 있으면 마지막 요소가 추가된 현재 문자열이 Collect 배열에 추가됩니다.
  5. print_r 함수는 수집된 문자열을 표시합니다.

출력

제공된 배열을 사용하여 코드는 다음 조합을 생성합니다.

Array
(
    [0] =>  Alpha
    [1] =>  Alpha Beta
    [2] =>  Alpha Beta Gamma
    [3] =>  Alpha Beta Gamma Sigma
    [4] =>  Alpha Beta Sigma
    [5] =>  Alpha Beta Sigma Gamma
    [6] =>  Alpha Gamma
    [7] =>  Alpha Gamma Beta
    [8] =>  Alpha Gamma Beta Sigma
    [9] =>  Alpha Gamma Sigma
    [10] =>  Alpha Gamma Sigma Beta
    [11] =>  Alpha Sigma
    [12] =>  Alpha Sigma Beta
    [13] =>  Alpha Sigma Beta Gamma
    [14] =>  Alpha Sigma Gamma
    [15] =>  Alpha Sigma Gamma Beta
    [16] =>  Beta
    [17] =>  Beta Alpha
    [18] =>  Beta Alpha Gamma
    [19] =>  Beta Alpha Gamma Sigma
    [20] =>  Beta Alpha Sigma
    [21] =>  Beta Alpha Sigma Gamma
    [22] =>  Beta Gamma
    [23] =>  Beta Gamma Alpha
    [24] =>  Beta Gamma Alpha Sigma
    [25] =>  Beta Gamma Sigma
    [26] =>  Beta Gamma Sigma Alpha
    [27] =>  Beta Sigma
    [28] =>  Beta Sigma Alpha
    [29] =>  Beta Sigma Alpha Gamma
    [30] =>  Beta Sigma Gamma
    [31] =>  Beta Sigma Gamma Alpha
    [32] =>  Gamma
    [33] =>  Gamma Alpha
    [34] =>  Gamma Alpha Beta
    [35] =>  Gamma Alpha Beta Sigma
    [36] =>  Gamma Alpha Sigma
    [37] =>  Gamma Alpha Sigma Beta
    [38] =>  Gamma Beta
    [39] =>  Gamma Beta Alpha
    [40] =>  Gamma Beta Alpha Sigma
    [41] =>  Gamma Beta Sigma
    [42] =>  Gamma Beta Sigma Alpha
    [43] =>  Gamma Sigma
    [44] =>  Gamma Sigma Alpha
    [45] =>  Gamma Sigma Alpha Beta
    [46] =>  Gamma Sigma Beta
    [47] =>  Gamma Sigma Beta Alpha
    [48] =>  Sigma
    [49] =>  Sigma Alpha
    [50] =>  Sigma Alpha Beta
    [51] =>  Sigma Alpha Beta Gamma
    [52] =>  Sigma Alpha Gamma
    [53] =>  Sigma Alpha Gamma Beta
    [54] =>  Sigma Beta
    [55] =>  Sigma Beta Alpha
    [56] =>  Sigma Beta Alpha Gamma
    [57] =>  Sigma Beta Gamma
    [58] =>  Sigma Beta Gamma Alpha
    [59] =>  Sigma Gamma
    [60] =>  Sigma Gamma Alpha
    [61] =>  Sigma Gamma Alpha Beta
    [62] =>  Sigma Gamma Beta
    [63] =>  Sigma Gamma Beta Alpha
)

이 출력에는 가능한 모든 조합이 포함됩니다. 문제의 지정된 요구 사항을 충족하는 조합 및 배열.

위 내용은 순서와 중복을 모두 고려하여 1D 배열에서 가능한 모든 요소 조합을 생성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.