> 백엔드 개발 > C++ > C#에서 배열 요소의 모든 조합을 효율적으로 찾는 방법은 무엇입니까?

C#에서 배열 요소의 모든 조합을 효율적으로 찾는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-19 23:07:08
원래의
603명이 탐색했습니다.

How to Efficiently Find All Combinations of Array Elements in C#?

C# 배열 요소의 모든 조합을 효율적으로 검색

배열 요소로 작업할 때 가능한 모든 요소 조합을 추출하는 것이 유용합니다. 이 작업은 데이터 분석 및 조합 최적화와 같은 분야에서 자주 나타납니다.

반복되는 요소의 순열 및 조합

[1, 2, 3, 4] 배열이 있다고 가정합니다. 반복되는 요소가 있는 길이 2의 모든 조합을 찾으려면 다음 기능을 사용할 수 있습니다.

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetPermutationsWithRept<T>(IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetPermutationsWithRept(list, length - 1)
        .SelectMany(t => list, (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>
로그인 후 복사

이 함수는 [1, 1], [1, 2] 등과 같이 반복되는 요소가 포함된 조합을 고려합니다.

순열 및 조합(반복되는 요소 제외)

중복 요소를 제외하려면 GetPermutations 함수를 사용하세요.

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetPermutations<T>(IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetPermutations(list, length - 1)
        .SelectMany(t => list.Where(o => !t.Contains(o)), (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>
로그인 후 복사

이 기능은 [1, 2], [1, 3] 및 [2, 3]과 같은 조합을 보장하지만 [1, 1]은 보장하지 않습니다.

반복적인 요소가 있는 K 조합

길이 2와 반복되는 요소의 조합을 찾아 요소의 여러 발생을 허용하는 것을 고려하십시오.

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetKCombsWithRept<T>(IEnumerable<T> list, int length) where T : IComparable
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetKCombsWithRept(list, length - 1)
        .SelectMany(t => list.Where(o => o.CompareTo(t.Last()) >= 0), (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>
로그인 후 복사

이 함수는 [1, 1], [1, 2], [2, 2]와 같은 조합을 생성합니다.

K조합(반복요소 제외)

반복되는 요소가 없는 조합의 경우:

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetKCombs<T>(IEnumerable<T> list, int length) where T : IComparable
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetKCombs(list, length - 1)
        .SelectMany(t => list.Where(o => o.CompareTo(t.Last()) > 0), (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>
로그인 후 복사

이 함수는 [1, 2], [1, 3], [2, 3]과 같은 조합을 생성합니다.

위 내용은 C#에서 배열 요소의 모든 조합을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿