Cách hiệu quả nhất để thực thi biểu thức boolean trên bitmap trong C hoặc C++ là gì? Ví dụ: giả sử tôi có bitmap 4 bit (a, b, c, d)
. Bây giờ, hãy nói rằng tôi có một biểu thức boolean đơn giản như (a AND b) OR (c AND d)
. Làm thế nào tôi nên đại diện cho biểu thức boolean để tôi có thể áp dụng hiệu quả nó vào bitmap của tôi? Tôi đang tìm một giải pháp chung có thể được áp dụng cho bất kỳ biểu thức boolean, không chỉ là một trong những ví dụ. Nói cách khác, tôi đang tìm một cách nào đó để "biên dịch" biểu thức boolean thành một cấu trúc dữ liệu khác có thể được sử dụng để giảm hiệu quả bitmap của tôi thành một boolean.Thực thi hiệu quả biểu thức boolean trên bitmap trong C hoặc C++
Cấu trúc bitmap là kết quả của hoạt động lọc trên bản ghi của cơ sở dữ liệu. Mỗi bản ghi có bitmap riêng và mỗi bit trong bitmap là kết quả của một quy tắc lọc riêng lẻ. Biểu thức boolean được sử dụng để kết hợp các quy tắc lọc này để quyết định xem bản ghi có nên được bao gồm trong các kết quả của truy vấn cơ sở dữ liệu hay không. Có thể có tối đa 64 quy tắc lọc riêng lẻ có thể được kết hợp bởi thao tác boolean, do đó bitmap có thể được biểu diễn dưới dạng unsigned long long int
nếu cần.
Giải pháp phải hiệu quả về tốc độ và không được thay đổi cấu trúc bitmap. Việc chuyển đổi biểu thức boolean thành một cấu trúc khác không phải là bộ nhớ hiệu quả cũng không nhanh, bởi vì nó có thể được lưu trữ (ít nhất là trong trường hợp sử dụng hiện tại của tôi). Việc giảm bitmap với biểu thức boolean được chuyển đổi phải nhanh và hiệu quả về bộ nhớ.
Ghi chú:
- Biểu thức boolean chỉ sử dụng lồng nhau AND và OR hoạt động (không IF báo cáo).
- Giải pháp nên giả định tính khả dụng của CPU 64 bit.
- Giải pháp không nên phụ thuộc vào CPU (bên cạnh địa chỉ 64 bit).
- Giải pháp không được giả định tính khả dụng của bất kỳ phần cứng cụ thể nào khác (ví dụ: GPU).
- Tất cả các bitmap đều có trong bộ nhớ.
- Có thể có rất nhiều bitmap (tỷ).
- Các ảnh bitmap được cập nhật từng cái một.
Chỉ hiệu quả về tốc độ hoặc hiệu quả bộ nhớ? – deviantfan
Hiệu quả về mặt tốc độ đầu tiên và quan trọng nhất, nhưng cũng hiệu quả về bộ nhớ so với bitmap. Không thể chuyển đổi bitmap thành cấu trúc khác. Nhưng biểu thức boolean có thể được biến đổi thành cái gì đó khác, và sự biến đổi này không phải là bộ nhớ hiệu quả, bởi vì nó có thể được lưu trữ. –
Cấu trúc bitmap là gì? – Galik