此問題與Array of pairs of 3 bit elements
此數組有52對(約40字節),我想在指定的一對之前找到第一對,它的值不同於0(使用對)。 顯而易見的解決方案是檢查每對<而不是這個(從右到左掃描),但如果有很多未使用的對(設置爲0),這看起來效率很低。查找陣列中指定索引之前最近使用過的索引(快速)
該圖像可以更好地解釋的情況:
雙人0,1和51被使用。
我想在51之前找到第一個使用的對(這裏是1)。
我嘗試的技巧,比如
if(*((int *)&array[arrayPos]) == 0) {
arrayPos -= sizeof(int);
pairPos -= ???
}
這裏的問題是,從pairPos減去並非如此簡單,因爲6位/對的,所以我有一個查找表結束基於之間的一些關係pairPos and arrayPos,所有這些使得解決方案的表現像微不足道。
有什麼方法可以使查找速度更快?另一個問題是,只有1個未使用的字節...也許我可以爲另外4個空間創建空間。如果至少有7個我可以使用該數組的位圖,並且跳過未使用的對會快得多。
數據的格式是否必須如此。有時你可以通過改變數據的佈局來使算法更有效率。 – Skizz 2009-07-21 08:17:18