2017-12-06 5 views
1

x1x2의 두 값이 있다고 가정합니다.반복되는 값이없는 k-ary 트리를 만듭니다.

단일 루트가 주어지면 k-ary 트리를 사용하여 x1x2의 모든 조합을 만드는 방법은 무엇입니까?

예 : 레벨 #1에서

#0 root 
    / \ 
#1 x1  x2 
    | 
#2 x2 

내가 초기 요소 x1x2 있습니다.

레벨 #2에서 나는 조합 x1x2을, x2을 가지고 있지만 그것은 조합 반복 될 것이기 때문에 x1이없는 (요소가 여기에 주문에 대해 x2x1을, 우리는 상관하지 않습니다).

내가 두 개 이상의 요소를 가지고 있다면 레벨이 요소의 수에서 1을 뺀

이미 초기 #1 수준을 구축 동일 할 때까지 나무에 계속 것입니다. 반복 조합을 사용하지 않고 트리를 계속 생성하려면 어떻게해야합니까? 다시 말해, 을 확인하는 방법은 주어진 요소를 트리에 배치해야합니다. 가장 효과적인 방법입니다. 거기에 몇 가지 잘 알려진 알고리즘이 무엇입니까?

추가 정보 : PHP

+0

수행하려는 작업은 무엇입니까? 순서와 상관없이 요소 세트의 모든 조합을 나열 하시겠습니까? K-ary tree를 정말로 사용해야합니까? – justhalf

+0

@justhalf 예, 순서에 관계없이 요소 집합의 모든 조합을 나열합니다. 나는 나무를 사용할 필요가 없지만, 그것은 내 마음에 온 것이 처음이다. – Luiz

+1

그러면 나는 그 질문을 대신해야한다고 생각합니다. 나는 나무가 이것에 대한 좋은 해결책이 아닐 수도 있다고 생각합니다. 일반적인 해결책은 다음과 같은 재귀를 사용하는 것입니다. https://stackoverflow.com/questions/31695772/generating-k-combinations-exicographic – justhalf

답변

1

편집 : 트리

내 생각은 n 개의 요소 (x1, x2,... ,xn)에 대한 n 차 트리를 가지고있다 구축에 일부 수정. 루트가 x0 일 때 어떤 노드라도 xi(0 <= i <= n)이면 모든 자식을 가지고 있어야합니다. xj 여기서 (i < j <= n)입니다. 이 방법으로 모든 반복되지 않는 조합을 가질 수 있습니다. 예 : n = 3 인 경우 3 진 트리는 다음과 같습니다.

root ---> x1 ---> x2 ---> x3 
      | ---> x3 
root ---> x2 ---> x3 
root ---> x3