고유한 요소의 배열이 주어지면 목표는 배열 요소의 가능한 모든 순열을 나열하는 것입니다.
다음 알고리즘은 O(N!) 시간에 모든 순열을 생성합니다. 복잡성:
def permute(arr, i=0): if i == len(arr) - 1: print(arr) return for j in range(i, len(arr)): arr[i], arr[j] = arr[j], arr[i] permute(arr, i + 1) arr[i], arr[j] = arr[j], arr[i]
반복되는 요소가 있는 배열의 경우 Jarvis March 알고리즘이 더 효율적입니다. 접근 방식:
def permute_repeated(arr): ind = [0] * len(arr) for i in range(len(arr)): ind[i] = i while True: yield [arr[i] for i in ind] for i in range(len(arr) - 2, -1, -1): if ind[i] < ind[i + 1]: break if i == -1: return for j in range(len(arr) - 1, -1, -1): if arr[j] > arr[i]: ind[i], ind[j] = ind[j], ind[i] break ind[i + 1:] = sorted(ind[i + 1:])
위 내용은 반복되는 요소가 있는 배열을 포함하여 배열의 모든 순열을 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!