使用std::bitset实现一个二进制计数器
Implementing a binary counter using std::bitset
我想在c++中使用std::bitset
实现一个二进制计数器。如果我明确地为bitset
建立一个加法函数那么算法的复杂度将上升到O(n^2)有什么方法能求出O(n)吗?
还有,对于Horowitz和Sahni的子集和问题的解决方案有什么好的描述吗?除了维基百科,我找不到任何好的来源描述他们的算法。
对于你的第二个问题,"有没有关于Horowitz和Sahni的子集和问题解决方案的好的描述?",我找到了一些文章:
Horowitz和Sahni的原始论文:
http://www.cise.ufl.edu/萨尼/论文/computingPartitions.pdf
关于Horowitz和Sahni算法改进的Stackoverflow讨论:
生成范围内的所有子集和都快于O((k+N) * 2^(N/2))?
源代码:
http://www.diku.dk/hjemmesider/ansatte/pisinger/subsum.c
如果bitset足够小,所有的位都可以放在unsigned long
中,那么你可以使用它的转换函数对它执行整数运算,例如
bitset = std::bitset(bitset.to_ulong() + 1);
在c++ 11中,还有一个to_ullong()
函数,给出unsigned long long
,它可能大于unsigned long
。
如果你的bitset太大,你最好实现你自己的,基于你的计数器可以访问的整数数组或向量。你的算法仍然是0 (n2),但是你可以减少每次加法所需的操作数量,而不是一次处理一个比特。
相关文章:
- 将XSD文件嵌入一个(二进制文件)中
- 从一个二进制文件中读取信息,并写入另一个二进制文件
- 将 tesseract 编译/捆绑为一个二进制文件
- 如何将所有依赖项和共享库编译为一个二进制文件
- 如何用C++在windows上制作一个二进制兼容的动态库
- C 打开一个二进制文件
- 在 Google 的C++测试框架中为多个单元测试创建一个二进制文件
- 我可以为一个包含向量的C++结构写一个二进制吗
- 我试图证明一个给定的树是一个二进制搜索树.我将输入一个二叉树,我只想让函数返回true
- 构建一个二进制字符串c++
- 铬嵌入框架(C++)和另一个二进制之间的IPC
- 从一个二进制树复制到另一个
- c++将一个文件读入一个结构并写入一个二进制文件
- 找到与另一个二进制模式匹配的所有 2 位值,然后对它们求和
- 用C++实现一个二进制信号量类
- 将4位写入到一个二进制文件中,其中包含ofstream
- 创建一个二进制文件,向其中添加信息,并从中读取所有记录(电话簿)
- C++用另一个二进制文件编辑二进制文件
- 找出(在c++中)二进制数是否是另一个二进制数的前缀
- 用c++中的映像创建一个二进制文件