据我了解,位图索引搜索将返回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
我误解了什么吗?位图索引搜索的结果是不是作为数组呈现,而是一些其他数据结构能够实现非零元素的恒定时间搜索?
答案 0 :(得分:1)
关键是要正确存储索引:比如说,使用你在另一个问题中提到的Run-Length-Encoded压缩。每个合适的查找都将采用 O (命中)时间。