문제

크기 X 세트의 크기 Y의 모든 순열을 계산하고 싶습니다. 즉 (1,2,3) 크기 2, 3p2의 모든 순열을 원한다면 (1,2) (1,2) ( 1,3) (2,1) (2,3) (3,1) (3,2).

GSL과 C ++ STL은 모두 볼 수있는 XPX 만 제공합니다. 누군가가 이것을 수행하거나 빠르고 메모리 효율적인 알고리즘을 철자 할 수있는 C/C ++ 라이브러리를 가리킬 수 있습니까?

나는 매우 짧은 암호화를 해결하려고 노력하고 있습니다. 나는 두 글자를 알아 내고 무차별적인 힘 공격을하기로 결정했습니다. 나는 "Ouglg Ouyakl"을 가지고 있으며 아주 좋은 사전에 대해 모든 순열을 확인하고 있습니다. 나는 2 개의 글자를 제거하여 24p7 또는 1,744,364,160 개의 가능성이 좋지 않은 가능성을 제거했습니다. 현재 Perl 프로그램이 실행 중이므로 프로그래밍 시간 + 실행 시간의 총 효율성에 대한 흥미로운 테스트가 될 것입니다. :)

(아니요, 나는 단지 크립토 그램에 대한 답을 원하지 않습니다.)

도움이 되었습니까?

해결책

나는 사용했다 이것 이전 라이브러리 (참고 C ++)는 비슷한 작업을 수행 해야하는 코드에서. 반복 유무에 관계없이 순열과 조합이 있습니다. 문제의 경우, 이것은 충분해야합니다 (테스트되지 않은 ...) :

std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);

std::vector<int>::iterator first = v.begin(), middle = v.begin() + 2, last = v.end();

do {
    // do stuff with elements in range first...middle (but dont change them)
} while(next_partial_permutation(first, middle, last));

다른 팁

사용하여 조합을 얻을 수 있습니다 std::next_permutation() a vector<bool> 깃발의. 2 가지 요소를 선택하는 예를 가져옵니다 (1,2,3), 벡터로 시작하십시오 (false, true, true). 반복 next_permutation() 이것에 대해 줄 것입니다 (true, false, true) 그 다음에 (true, true, false), 시작하기 전에.

조합이 아닌 순열을 원하기 때문에 각 조합을 실제 요소 세트에 매핑하십시오 (예 : (true, false, true) (1, 3)이 된 다음 사용의 모든 순열을 생성합니다. next_permutation() 다시.

나는 cryptogram에 대한 당신의 질문을 진압하지 않습니다. 그러나 사전 에서이 단어의 가장 긴 순열 (아나그램)을 찾고 싶다면 그의 길을 시도 할 수 있습니다.

  1. 단어의 비트 마스크를 만듭니다. 64 비트 산술을 사용할 수 있으므로 거의 3 개의 알파 베트를 안에 넣을 수 있습니다.

a-> 첫 번째 비트, b-> 두 번째 비트 등. "OUGLG OUYAKL"케이스에 단어가있는 경우

 abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzabcdefghijklmnop
 100000100011001000001001000000010000100100000100000000000000000000

(내가 뭔가를 놓치지 않았기를 바랍니다) 이제 당신은 당신의 어휘를 위해 같은 비트 마스크를 만듭니다.

그리고 당신이 어휘에 반대 할 때 당신은

 vocabulary & ( ouglg_ouyakl ^ vocabulary)

그리고 당신의 어휘가 ouglg_ouyakl에서 나온 경우 이것은 0입니다.

순열에 대해

for each permutation of numbers fom  1-n // that is 1,2 and 2,1
  for(i=0;i<end;i++)
    for(j=i+1;j<end;j++)
      SET[permutation[i]],SET[permutation[j]]

편집 : 이전 Soluton은 24p7에 적합하지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top