算法_bitmap算法
概述
算法思想
- 效率高,不许进行比较和移位
- 占用内存少,比如N=10000000;只需占用内存为N/8 = 1250000Bytes = 1.2M,如果采用int数组存储,则需要38M多
- 无法对存在重复的数据进行排序和查找
map映射表
位移转换
代码示例(c语言)
#include <stdio.h>
#include <stdlib.h> #define SHIFT 5
#define MASK 0x1F /**
* 设置所在的bit位为1
*
* T = O(1)
*
*/
void set(int n, int *arr)
{
int index_loc, bit_loc; index_loc = n >> SHIFT; // 等价于n / 32
bit_loc = n & MASK; // 等价于n % 32 arr[index_loc] |= 1 << bit_loc;
} /**
* 初始化arr[index_loc]所有bit位为0
*
* T = O(1)
*
*/
void clr(int n, int *arr)
{
int index_loc; index_loc = n >> SHIFT; arr[index_loc] &= 0;
} /**
* 测试n所在的bit位是否为1
*
* T = O(1)
*
*/
int test(int n, int *arr)
{
int i, flag; i = 1 << (n & MASK); flag = arr[n >> SHIFT] & i; return flag;
} int main(void)
{
int i, num, space, *arr; while (scanf("%d", &num) != EOF) {
// 确定大小&&动态申请数组
space = num / 32 + 1;
arr = (int *)malloc(sizeof(int) * space); // 初始化bit位为0
for (i = 0; i <= num; i ++)
clr(i, arr); // 设置num的比特位为1
set(num, arr); // 测试
if (test(num, arr)) {
printf("成功!\n");
} else {
printf("失败!\n");
}
} return 0;
}
参考链接
算法_bitmap算法的更多相关文章
- GMM算法k-means算法的比较
		1.EM算法 GMM算法是EM算法族的一个具体例子. EM算法解决的问题是:要对数据进行聚类,假定数据服从杂合的几个概率分布,分布的具体参数未知,涉及到的随机变量有两组,其中一组可观测另一组不可观测. ... 
- 简单易学的机器学习算法——EM算法
		简单易学的机器学习算法——EM算法 一.机器学习中的参数估计问题 在前面的博文中,如“简单易学的机器学习算法——Logistic回归”中,采用了极大似然函数对其模型中的参数进行估计,简单来讲即对于一系 ... 
- 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)
		一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ... 
- 重新想象 Windows 8 Store Apps (31) - 加密解密: 哈希算法, 对称算法
		原文:重新想象 Windows 8 Store Apps (31) - 加密解密: 哈希算法, 对称算法 [源码下载] 重新想象 Windows 8 Store Apps (31) - 加密解密: 哈 ... 
- Hash散列算法  Time33算法
		hash在开发由频繁使用.今天time33也许最流行的哈希算法. 算法: 对字符串的每一个字符,迭代的乘以33 原型: hash(i) = hash(i-1)*33 + str[i] ; 在使用时.存 ... 
- 变易算法 - STL算法
		欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/mutating-algorithms.h ... 
- STL非变易算法 - STL算法
		欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/1394600460.html 原创:ST ... 
- 【啊哈!算法】算法7:Dijkstra最短路算法
		上周我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”.本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”.例如求下图 ... 
- 【啊哈!算法】算法6:只有五行的Floyd最短路算法
		暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有 ... 
随机推荐
- MySql: log 位置
			mysql日志文件位置 登录mysql终端日志文件路径mysql> show variables like 'general_log_file';+------------------+---- ... 
- NetBeans建立跳过测试构建的快捷方式
			在项目浏览器中右键项目->属性,如图进行设置: 此后按下图即可运行自定义行为: 
- links and softwares
			links 普通 http://www.ncpa-classic.com//special/2014gejujie/index.shtml ; 中国大剧院 http://tieba.baidu.com ... 
- checkbox check all or ancheck all
			<script type="text/javascript" src="js/jQuery.1.8.3.min.js"></script> ... 
- PLSQLDeveloper 常用设置
			PLSQL Developer常用设置及快捷键 1.登录后默认自动选中My Objects (已验证可用) 默认情况下,PLSQL Developer登录后,Brower里会选择All obj ... 
- ubuntu系统怎么分区
			首先科普下windows和linux的文件系统和主分区: 1.电脑的主分最多只有只能由四个.如果是win7和linux双系统,则windows系统可能会占到1-2个主分区,那linux最多只能有两个主 ... 
- 基于netty-socketio的web推送服务
			实时消息的推送,PC端的推送技术可以使用socket建立一个长连接来实现.传统的web服务都是客户端发出请求,服务端给出响应.但是现在直观的要求是允许特定时间内在没有客户端发起请求的情况下服务端主动推 ... 
- 【Android】一种提高Android应用进程存活率新方法
			[Android]一种提高Android应用进程存活率新方法 SkySeraph Jun. 19st 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph ... 
- mysql salve从库设置read only 属性
			在MySQL数据库中,在进行数据迁移和从库只读状态设置时,都会涉及到只读状态和Master-slave的设置和关系. 经过实际测试,对于MySQL单实例数据库和master库,如果需要设置为只 ... 
- SMARTY模板中如何使用get,post,request,cookies,session,server变量
			{$smarty}保留变量不需要从PHP脚本中分配,是可以在模板中直接访问的数组类型变量,通常被用于访问一些特殊的模板变量.例如,直接在模板中访问页面请求变量.获取访问模板时的时间戳.直接访问PHP中 ... 
