Qual è il modo più efficiente di eseguire un'espressione booleana su una bitmap in C o C++? Ad esempio, supponiamo di avere una bitmap a 4 bit (a, b, c, d)
. Ora, diciamo che ho un'espressione booleana semplice come (a AND b) OR (c AND d)
. Come dovrei rappresentare l'espressione booleana in modo da poterla applicare efficacemente alla mia bitmap? Sto cercando una soluzione generica che possa essere applicata a qualsiasi espressione booleana, non solo a quella fornita come esempio. In altre parole, sto cercando un modo per "compilare" l'espressione booleana in un'altra struttura dati che potrebbe essere utilizzata per ridurre in modo efficiente la mia bitmap in un booleano.Esecuzione efficiente dell'espressione booleana su bitmap in C o C++
La struttura bitmap è il risultato di operazioni di filtro sui record di un database. Ogni record ha la propria bitmap e ogni bit in una bitmap è il risultato di una singola regola di filtro. L'espressione booleana viene utilizzata per combinare queste regole di filtro per decidere se il record deve essere incluso nei risultati di una query di database. Possono esistere fino a 64 regole di filtro individuali che possono essere combinate mediante l'operazione booleana, quindi la bitmap può essere rappresentata come unsigned long long int
se necessario.
La soluzione deve essere efficiente in termini di velocità e non deve alterare la struttura bitmap. La conversione dell'espressione booleana in un'altra struttura non deve essere efficiente in termini di memoria, né veloce, perché può essere memorizzata nella cache (almeno nel mio attuale caso d'uso). La riduzione della bitmap con l'espressione booleana trasformata dovrebbe essere sia rapida che efficiente in termini di memoria.
Note:
- L'espressione booleana è solo utilizzando nidificato operazioni AND e OR (senza IF).
- La soluzione deve assumere la disponibilità di una CPU a 64 bit.
- La soluzione non deve essere dipendente dalla CPU (oltre a indirizzamento a 64 bit).
- La soluzione non deve presupporre la disponibilità di nessun altro particolare hardware (ad esempio GPU).
- Tutte le bitmap sono in memoria.
- Può esserci un numero molto elevato di bitmap (miliardi).
- Le bitmap vengono aggiornate una alla volta.
Efficiente solo in termini di velocità o troppo efficiente in termini di memoria? – deviantfan
Efficiente in termini di velocità prima di tutto, ma anche efficiente in termini di memoria rispetto alla bitmap. La bitmap non può essere trasformata in un'altra struttura. Ma l'espressione booleana potrebbe essere trasformata in qualcos'altro, e questa trasformazione non deve essere efficiente in termini di memoria, perché potrebbe essere memorizzata nella cache. –
Qual è la struttura bitmap? – Galik