Diese Frage bezieht sich auf Array of pairs of 3 bit elements
Dieses Array hat 52 Paare (etwa 40 Bytes), und ich möchte das erste Paar vor dem angegebenen finden Es hat andere Werte als 0 (benutztes Paar). Die offensichtliche Lösung wäre, jedes Paar < als dieses zu überprüfen (Scan von rechts nach links), aber das scheint sehr ineffizient zu sein, wenn es viele unbenutzte Paare gibt (auf 0 gesetzt).Den nächsten verwendeten Index vor einem angegebenen Index in einem Array finden (Fast)
Dieses Bild kann die Situation besser erklären:
Paare 0, 1 und 51 verwendet werden.
Ich möchte das erste verwendete Paar vor 51 finden (das ist 1 hier).
habe ich versucht, Tricks wie
if(*((int *)&array[arrayPos]) == 0) {
arrayPos -= sizeof(int);
pairPos -= ???
}
Das Problem hierbei ist, dass von pairPos Subtrahieren nicht so einfach ist, weil die 6 Bits/Paare, so dass ich endete mit einer Lookup-Tabelle basierend auf einige Beziehungen zwischen pairPos und arrayPos, und all dies machte die Lösung wie die triviale durchführen.
Gibt es eine Möglichkeit, diese Suche schneller zu machen? Ein weiteres Problem ist, dass es nur 1 unbenutztes Byte gibt ... vielleicht kann ich Platz für weitere 4 schaffen. Wenn es mindestens 7 gäbe, könnte ich eine Bitmap des Arrays verwenden und es wäre viel schneller unbenutzte Paare zu überspringen.
Muss das Format der Daten so sein. Manchmal können Sie Algorithmen effizienter gestalten, indem Sie das Layout der Daten ändern. – Skizz