博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
统计一个二进制字符串中1的个数的算法
阅读量:5786 次
发布时间:2019-06-18

本文共 785 字,大约阅读时间需要 2 分钟。

记得在吴军的《数学之美》中有一章讲到布尔代数和搜索引擎的索引。大概是讲通过一个二进制字符串来标识当前关键词在那些文档中出现过。二进制字符串中1的位置就是出现这个词文档的id。
如,一淘 对应一个二进制字符串 1010001。其中在1,5,7三个位置出现了1,说明文档id为1,5,7的文章包含词“一淘”。但是在书中没有说如何统计1的个数和位置。现在我补充以下实现算法。

代码如下:

#include 
#include
#include
using namespace std; int main(){ int n = 10002; int num = 0; //1的个数 int tmp = n; vector
pos; //1的位置 while (n) { n &= (n-1); num++; pos.push_back(log2(tmp-n) + 1); tmp = n; } cout << "the number of 1 is " << num << endl; cout << "the position is " << endl; for (vector
::iterator i = pos.begin(); i != pos.end(); i++) { cout << *i << endl; }}

输出结果:

the number of 1 is 6
the position is
2
5
9
10
11
14

转载地址:http://iyxyx.baihongyu.com/

你可能感兴趣的文章
grep 命令
查看>>
JS二维数组的声明和使用
查看>>
v$archive_gap dg dataguard 断档处理 scn恢复
查看>>
问责IT风险管理:CIO需关注两个重点
查看>>
Winform打包发布图解
查看>>
PDF文件怎么编辑,超简单的方法
查看>>
EasyUI基础入门之Easyloader(载入器)
查看>>
Uva 839 Not so Mobile
查看>>
30款超酷的HTTP 404页面未找到错误设计
查看>>
程序猿必备 MyEclipse2013-2014系列
查看>>
在图里, 你看到了什么? 5秒内看到的话, 你很牛
查看>>
java中ArrayList 、LinkList区别
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
利用rand7()构造rand10()
查看>>
MySQL 备份与恢复
查看>>
吃午饭前,按书上的代码写会儿--Hunt the Wumpus第一个版本
查看>>
easyui中combobox的值改变onchang事件
查看>>
Eclipse魔法堂:任务管理器
查看>>
一周自学动态站点设计
查看>>
eclipse中查看某个方法(函数)被谁调用
查看>>