2

据我了解,位图索引搜索将返回一个由 0 和 1 组成的数组,如下所示:

[0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0]

数组中的每个索引都映射到数据库中某个其他数组中的某个记录,因此要获得结果,您需要找到结果数组中非零元素的索引。

我不明白的是你如何在恒定时间内找到这些指数?我能想到的最好的算法是遍历数组中的每个元素,检查它是否非零,如果它非零,则将该元素的索引写入其他地方。但是,这意味着按顺序查看数组中的每个元素,这是线性时间。所以返回结果所花费的时间将与结果数组的大小成正比,与表中的总行数相同。

但是,我读过的位图索引论文似乎表明查询时间仅与命中数成正比,而不与表中的总行数成正比。参考:

http://crd-legacy.lbl.gov/~kewu/ps/LBNL-59952.pdf

我是不是误会了什么?位图索引搜索的结果不是以数组的形式呈现,而是以其他一些数据结构呈现,可以对非零元素进行恒定时间搜索?

4

1 回答 1

1

关键是正确存储索引:例如,使用您在另一个问题中提到的运行长度编码压缩。然后,每个合适的查找将花费O(命中)时间。

于 2014-12-16T20:41:22.580 回答