2009-11-13 6 views
2

나는 7 자리의 문자열을 취해서 가능한 모든 3 자리와 4 자리의 순열을 생성하려고합니다. 이것은 재귀가 편리 할 것 같아 보인다. (내가 본 대부분의 순열 생성기는 재귀 적이다.) 그러나 나는 반복을 피하는 방법을 계속 고수하고있다. 즉, 입력 문자열이 "aabcdef"인 경우 순열에 두 개 이상의 "a"문자가 포함되는 것을 원하지 않습니다.고정 길이의 문자열 순열

당신이 제공 할 수있는 통찰력은 대단히 감사하겠습니다.

답변

0

문자 집합을 취하는 함수를 사용하면 지정한 문자로 시작하는 n 개의 순열 집합 (3 또는 4)을 반환합니다. 그런 다음 세트의 고유 한 문자 각각에 대해 한 번 실행하십시오.

전체 결과 집합은 하위 집합의 합집합이됩니다.

2

반복적으로나 반복적으로 모두 수행 할 수 있습니다. 괜찮은 permutation generator입니다. 그것은 귀하의 필요에 맞게 조정할 수 있으며 숫자의 목록, 문자열 (문자의 목록) 등을 취할 수 있도록 일반 요소 (요소의 List<T>을 가져옴)로 만들 수 있습니다.

0

다음은 도움이 될만한 단서입니다. "aabcdef"라고 입력하고 두 개의 "a"가있는 순열을 원하지 않는다면, "a"가 여러 개인 순열을 제거하는 대신 입력에서 "a"중 하나를 제거하는 것이 더 쉽습니다 당신은 그들을 생성합니다.

1

문자를 문자로 생각해보십시오.

permute (bag <character> : theBag, integer : length, string : resultSoFar) 
    if length <= 0 then: 
     print resultSoFar 
     exit 
    end-if 

    for each x in theBag: 
     nextResult = resultSoFar + x 
     nextBag = theBag - x 
     permute(nextBag, length - 1, nextResult) 
    end-for 
end-method 

행운을 빕니다 :

여기에 작동합니다 일부 의사입니다!

0

@ Chip Uni : 코드를 구현할 때 길이가 x에서 최대로 모든 순열을 생성했습니다. 그래서 길이 7을 포함하는 가방으로 길이 3을 입력하면 길이 3에서 7의 모든 순열이 생성됩니다. 길이 4보다 큰 모든 결과를 제거하는 것은 간단한 문제입니다.

대단히 감사합니다. 나는 당신의 제안과 도움에 크게 감사드립니다.

관련 문제