순열 생성 알고리즘 최적화
집합의 순열을 효율적으로 생성하는 것은 컴퓨터 과학의 고전적인 문제입니다. 제공된 코드는 효율적이지만 더 큰 세트의 경우 여전히 상당한 시간이 필요할 수 있습니다.
시간 복잡도가 O(n)인 Knuth 알고리즘을 사용하면 한 가지 개선이 가능합니다. 여기서 n은 크기입니다. 세트. 다음은 Knuth 알고리즘을 기반으로 한 수정된 버전입니다.
public static bool NextPermutation(int[] numList) { // Find the largest index j such that a[j] < a[j + 1] var largestIndex = -1; for (var i = numList.Length - 2; i >= 0; i--) { if (numList[i] < numList[i + 1]) { largestIndex = i; break; } } // If there's no such index, we have reached the last permutation if (largestIndex < 0) return false; // Find the largest index l such that a[j] < a[l] var largestIndex2 = -1; for (var i = numList.Length - 1; i >= 0; i--) { if (numList[largestIndex] < numList[i]) { largestIndex2 = i; break; } } // Swap a[j] with a[l] var tmp = numList[largestIndex]; numList[largestIndex] = numList[largestIndex2]; numList[largestIndex2] = tmp; // Reverse the sequence from a[j + 1] up to and including the final element a[n] for (int i = largestIndex + 1, j = numList.Length - 1; i < j; i++, j--) { tmp = numList[i]; numList[i] = numList[j]; numList[j] = tmp; } return true; }
이 최적화된 알고리즘은 오름차순으로 다음 순열을 찾는 더 효율적인 방법을 사용합니다. 특히 대규모 세트의 경우 일반적으로 더 빠릅니다. 그러나 더 나은 효율성을 위해서는 효율적인 순열 생성을 위해 특별히 설계된 언어나 라이브러리를 사용하는 것이 좋습니다.
위 내용은 대규모 데이터 세트에 대한 순열 생성 알고리즘을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!