我正在实现一个矩阵缩减算法,我是一名数学学生。显然我已经在互联网上搜索和阅读,但没有找到我正在寻找的东西(我在最后列出了我找到的内容和我读过的文件。)
问题的快速概述:
位向量 b 具有 FIXED LENGTH N。
b 每一步都发生变化(可能仅在几个索引处(大多数时候)或在相当多的索引处(从 1/10 到 1/3),这仅在约 10% 的情况下)。
我已经有一个稀疏实现,现在我想使用位向量的一些智能实现对其进行编码。
//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}
我需要的是:
- 快速设置 b[i]=1 或 =0(可能为 O(1))
- 在每一步快速获取索引集
I
(绝对不超过 O(logN),理想情况下为 O(1)) - 一个允许它的 C++ 库
- 文件/文件
有什么会很高兴:
- 一种快速获取“最低”的方法(最后一个索引设置为 1,即 select(rank(b)),如果两个操作都很快 (O(1)))
我不需要的是:
- 节省空间
- 压缩数据
我一直在使用 Simon Gog 等人的库 Sdsl 2.0。(https://github.com/simongog/sdsl-lite)但选择结构
bit_vector::select_1_type
初始化的成本为 O(n),每个查询的成本为 O(1),但不“遵循” b 中的更改(对吗??我还没有找到任何非常具体的内容),这意味着它需要在修改后的每一步。
我读过的论文是:“Fast, Small, Simple Rank/Select on Bitmaps”(G. Navarro 和 E. Providel)和“Practical Entropy-Compressed Rank/Select Dictionary”(D. Okanohara K. Sadakane)和 I将不胜感激任何与 C++ 中可靠实现的链接(如果结构满足我的要求)
我在 stackexchange 上找到的关于类似主题的东西没有帮助:
很抱歉这个冗长的问题,我希望我能解释我需要什么以及我找到它的决心。我仍然对与位向量相关的各种事情感到非常困惑,这绝对不是我的专业领域,所以任何澄清都值得赞赏。
提前致谢。