我正在实施矩阵缩减算法,我是一名数学学生。 显然我已经在互联网上搜索和阅读,但没有找到我正在寻找的内容(我最后列出了我发现的内容以及我读过的论文。)< / p>
问题的快速概述:
位向量b的FIXED LENGTH N。
b每一步都会发生变化(可能只有几个指数(大部分时间)或指数相当多(从1/10到1/3),这只有约10%例)。
我已经有了稀疏实现,现在我想使用bitvector的一些智能实现来编写代码。
//initialize to 0
b=bitvector(0, n=N)
for i in 1 to N
{some operations on the bitvector b}
get I= { j | b[j] == 1 }
{save I}
我需要的是:
I
(绝对不超过O(logN),理想情况下为O(1))有什么好处:
我不需要的是:
我一直在使用Simon Gog等人的Sdsl 2.0库。 (https://github.com/simongog/sdsl-lite)但是选择结构
bit_vector::select_1_type
要初始化O(n),每个查询都需要O(1),但不会&#34;跟随&#34; b的变化(对吗?我还没有发现任何非常具体的内容),这意味着它需要在修改后的每一步都进行初始化。
我读过的论文是: &#34;在位图上快速,小巧,简单的排名/选择&#34; (G. Navarro和E. Providel)和&#34;实用熵 - 压缩等级/选择词典&#34; (D. Okanohara K. Sadakane)我将非常感谢C ++中可靠实现的任何链接(如果结构符合我的要求)
我在stackexchange上发现的关于类似主题的内容并没有帮助:
对于这个冗长的问题,我很抱歉,我希望我解释了我需要什么以及我找到它的决心。我仍然对与bitvectors相关的各种事情感到困惑,它绝对不是我的专业领域,所以任何澄清都是值得赞赏的。
提前致谢。
答案 0 :(得分:1)
所描述的结构here是我所知道的最接近你想要的属性。
具体做法是: