C 또는 C++의 비트 맵에서 부울 표현식을 실행하는 가장 효율적인 방법은 무엇입니까? 예를 들어, 내가 4 비트 비트 맵 (a, b, c, d)
을 가지고 있다고 가정 해 봅시다. 자, 내가 (a AND b) OR (c AND d)
과 같은 간단한 부울 표현식을 가지고 있다고 가정 해 봅시다. 부울 표현식을 어떻게 표현하여 효과적으로 비트 맵에 적용 할 수 있습니까? 예제와 같이 주어진 부울 식에 적용 할 수있는 제네릭 솔루션을 찾고 있습니다. 다른 말로 표현하면 부울 표현식을 "컴파일"하여 부울로 효율적으로 비트 맵을 축소하는 데 사용할 수있는 다른 데이터 구조를 찾는 방법을 찾고 있습니다.C 또는 C++의 비트 맵에서 부울 표현식을 효율적으로 실행
비트 맵 구조는 데이터베이스 레코드에 대한 필터링 작업의 결과입니다. 모든 레코드에는 자체 비트 맵이 있으며 비트 맵의 모든 비트는 개별 필터링 규칙의 결과입니다. 부울 식은 이러한 필터링 규칙을 결합하여 레코드가 데이터베이스 쿼리의 결과에 포함되어야하는지 여부를 결정하는 데 사용됩니다. 부울 연산으로 결합 할 수있는 최대 64 개의 개별 필터링 규칙이있을 수 있으므로 필요하면 비트 맵을 unsigned long long int
으로 나타낼 수 있습니다.
해결 방법은 속도면에서 효율적이어야하며 비트 맵 구조를 변경하면 안됩니다. 부울 표현식을 다른 구조로 변환하는 것은 캐시 될 수 있기 때문에 (적어도 현재 사용중인 경우) 메모리 효율적이거나 빠를 필요는 없습니다. 변환 된 부울 표현식을 사용하여 비트 맵을 축소하는 것은 빠르고 효율적이어야합니다.
참고 : 부울 표현식은 중첩 사용하여 AND 및 OR 작업 (NO 문 IF)되어
- .
- 솔루션은 64 비트 CPU의 가용성을 전제로합니다.
- 해결 방법은 CPU에 종속적이어서는 안됩니다 (64 비트 주소 지정 옆에 있음).
- 이 솔루션은 다른 특정 하드웨어 (예 : GPU)의 가용성을 가정해서는 안됩니다.
- 모든 비트 맵이 메모리에 있습니다.
- 매우 많은 수의 비트 맵 (수십억 개)이있을 수 있습니다.
- 비트 맵은 한 번에 하나씩 업데이트됩니다.
속도면에서나 메모리 효율면에서 효율성이 있습니까? – deviantfan
속도면에서 가장 효율적이지만 비트 맵과 비교하여 메모리 효율이 우수합니다. 비트 맵을 다른 구조로 변환 할 수 없습니다. 그러나 부울 표현식은 다른 것으로 변환 될 수 있으며이 변환은 캐시 될 수 있기 때문에 메모리 효율적이지 않아도됩니다. –
비트 맵 구조 란 무엇입니까? – Galik