주어진 길이의 이진 문자열
특정 길이의 모든 비트 시퀀스를 열거해야 하는 경우가 발생합니다. 또는 다른 말로 가능한 모든 옵션을 반복하여 각 개체에 대해 두 가지 가능한 상태 중 하나를 선택합니다.
이러한 상황에서 비트 마스크를 사용하여 열거를 구현할 수 있습니다. 이 접근 방식의 장점은 이러한 코드가 비재귀적으로 작동하고 컬렉션 등이 아닌 숫자에 대해 작동하므로 성능이 크게 향상된다는 것입니다.
비트마스크를 사용하는 일반적인 코드는 다음과 같습니다.
정수; // oobject 수(비트 시퀀스의 길이)
for (int mask = 0; mask < (1 < n); mask++) { // 0에서 2^n - 1까지의 모든 숫자를 반복합니다. 여기서 각 숫자는 비트 마스크에 해당합니다.
// 현재 숫자 마스크는 i번째 비트가 i번째 개체의 상태를 지정하는 비트 마스크입니다.
for (int i = 0; i < n; i++) { // 각 개체의 상태를 이해하기 위해 n 비트를 반복합니다.
if ((1 << i) & mask) { // i번째 비트가 1인지 확인
// i번째 객체가 상태 '1'인 옵션을 처리합니다.
}
else { // i번째 비트가 0인 경우
// 상태 '0'의 i번째 객체를 선택하는 옵션을 처리합니다.
}
}
}
이 코드는 O(2^n * f(n))에서 실행됩니다. 여기서 f(n)은 하나의 특정 반복 가능 항목을 처리하는 데 걸리는 시간입니다.
<사업부>
입력
단수 N이 주어진다.(자연, 1 ≤ N ≤ 10)
<사업부>
출력
0과 1로 구성된 길이 N의 모든 문자열을 한 줄에 하나씩 사전식 순서로 인쇄해야 합니다.