2009-08-06 8 views
2

n-bit 단어의 이진 비트 패턴 수가 임의의 한도 인 2^n보다 적은 알고리즘을 찾고 있습니다. 또한 모든 1-bit 조합, 2-bit 조합 등의 수를 생성하고 싶습니다. 제한이 2^n 인 경우 분명히 2^n 조합 (C(n,1) 1-bit combinations plus C(n,2) 2-bit plus C(n,3) 3-bit and so on)이됩니다. 그러나 제한이 부과 된 경우, 가능한 모든 조합이 유효하지는 않습니다 (부과 된 한도 미만). 예 : n=4. 16 가지 가능한 비트 패턴이 있는데 그 중 15 비트는 1 개 이상 1-bits을 포함합니다. 한도가 10 인 경우 10보다 큰 패턴은 계산에 포함되지 않습니다. 따라서 단일 비트 패턴의 경우 올바른 비트 패턴은 0001, 0010, 01001000입니다. 2 비트 패턴은 0011, 0101, 0110, 1001이 될 것입니다. 패턴 10101100은 10을 초과하기 때문에 계산되지 않습니다. 유일한 3 비트 비트는 0111이고 유일한 4 비트 패턴 인 1111은 한계를 초과합니다.이진 비트 패턴 조합 계산

F 내 계산 함수 인 경우, F(4,10,1) 4를 반환, C(4,2) 6. n의 실제 값이 커질 수 있으므로 미만 10 F(4,10,2) 4 반환되어 1 비트의 4-bit 패턴의 수 (40 또는 비트), 가능한 패턴을 열거하고, 한계에 대해 테스트하고, 유효한 패턴을 계산하는 것은 비현실적입니다.

이것이 어떻게 효율적으로 수행 될 수 있는지에 대한 아이디어가 있습니까?

답변

2

숙제 질문으로 태그가 지정되었으므로 아이디어를 제공하지 마시고 조언을 해드릴 수 있습니다. 은 항상 비효율적 인 알고리즘을 설계하고 효율성을 높이기 위해 분석합니다.

+0

우수 아이디어; 그 OP는 그의 질문을 아주 잘 표현한다. 그래서 나는 그에게서 좋은 제안을 기대한다! –

0

한계 이하의 범위를 크기가 고정 된 2^m 크기의 영역으로 나눕니다. 접두어.

0

힌트를 주지만, 유도 적으로/재귀 적으로 (어느 쪽이든 선호하는) 어떤 공격을 시도하십시오. 자체의 작은 인스턴스로 문제를 줄이십시오.