hustyangju的足迹

Stay Hungry,Stay Foolish

BloomFilter——大规模数据处理利器

loom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。   一. 实例    为了说明Bloom Filter存在的重要意义,举一个实例:   假设要你写一...

2015-07-23 15:59:43

阅读数 348

评论数 0

使用bitmap处理海量数据

bitmap是一个十分有用的结构。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。  适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下 基本原理及要点:使...

2015-07-23 15:43:09

阅读数 731

评论数 0

c/c++ 数据结构之位图(bitmap)详解

1.  概述 位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。 2. 位图实现 (1)自己实现 在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在。 #define INT_BITS...

2015-07-23 15:17:48

阅读数 3960

评论数 2

map insert()两种使用方法

#include #include #include #include using namespace std; int main(int argc, char *argv[]) { map m; typedef map::value_type vt; ...

2015-07-23 14:52:27

阅读数 1058

评论数 1

STL 之 hash_map源码剖析

// Filename: stl_hash_map.h // hash_map和hash_multimap是对hashtable的简单包装, 很容易理解 /* * Copyright (c) 1996 * Silicon Graphics Computer Systems, Inc....

2015-07-23 14:42:49

阅读数 817

评论数 0

STL之hashtable源码剖析

// Filename: stl_hashtable.h //////////////////////////////////////////////////////////////////////////////// // 本实作的hashtable采用的是开链法, 其内存布局如下 //...

2015-07-23 10:04:49

阅读数 734

评论数 0

常用哈希函数的比较及其C语言实现

基本概念 所谓完美哈希函数,就是指没有冲突的哈希函数,即对任意的 key1 != key2 有h(key1) != h(key2)。 设定义域为X,值域为Y, n=|X|,m=|Y|,那么肯定有m>=n,如果对于不同的key1,key2属于X,有h(key1)!=h(key2),那么称h...

2015-07-22 23:36:23

阅读数 2992

评论数 0

[C++设计模式] composite 组合模式

组合(Composite)模式的其它翻译名称也很多,比如合成模式、树模式等等。在《设计模式》一书中给出的定义是:将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。 从定义中可以得到使用组合模式的环境为:在设计中想表示对象的“部分-整体”层次结...

2015-07-22 15:43:05

阅读数 633

评论数 0

[C++设计模式] proxy 代理模式

代理模式:为其他对象提供一种代理以控制对这个对象的访问。 Proxy: 保存一个引用使得代理可以访问实体。若RealSubject和Subject的接口相同,Proxy会引用Subject,就相当于在代理类中保存一个Subject指针,该指针会指向RealSubject; 提供一...

2015-07-22 10:45:07

阅读数 744

评论数 0

[C++设计模式] state 状态模式

《head first 设计模式》中的例子很不错,想制造一个自动交易的糖果机,糖果机有四个状态:投入钱不足,投入钱足够,出售糖果,糖果售罄。糖果机的当前状态处于其中不同的状态时,它针对同一个操作的反映动作也不同。传统面向过程编程会套用if-else对不同的状态下分别处理,逻辑麻烦而且不具有可拓展性...

2015-07-21 16:41:04

阅读数 613

评论数 0

[C++设计模式] iterator 迭代器模式

迭代器模式定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象。 迭代器分内部迭代器和外部迭代器,内部迭代器与对象耦合紧密,不推荐使用。外部迭代器与聚合容器的内部对象松耦合,推荐使用。 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合...

2015-07-21 15:37:02

阅读数 735

评论数 0

[C++设计模式]template 模板方法模式

模板法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 按照《headfirst 设计模式》的例子,煮茶和煮咖啡的算法框架(流程)是一样的,只是有些算法的实现是不一样的,有些是一样的。 我们可以将共同的算法框架封装为一个虚基类,将相同的算法声明为不可覆盖的(static),不同的算法...

2015-07-21 10:29:14

阅读数 757

评论数 0

[C++设计模式] adapter 适配器模式

STL中,stack对vector或者双端队列进行封装,提供stack操作的接口就是典型的适配器模式。 将一个类的接口转换成客户希望的另外一个接口,就是适配器模式。 使用适配器模式有以下优点: 降低了去实现一个功能点的难度,可以对现有的类进行包装,就可以进行使用了; 提高了项目质量...

2015-07-20 11:00:28

阅读数 640

评论数 0

[C++设计模式] command 命令模式

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command...

2015-07-20 10:35:58

阅读数 1000

评论数 1

[C++设计模式] factory 工厂模式

说的直接点,工厂模式就是接管对象的创建,在new()的同时既可以做额外的异常处理、初始化等操作,又可以降低模块间的耦合,方便维护和拓展。 根据创建对象的复杂度,可以分为简单工厂模式、工厂法模式和抽象工厂模式。 一、简单工厂模式 ProductA、ProductB和ProductC继承...

2015-07-15 17:27:06

阅读数 621

评论数 0

[C++设计模式] decorator 装饰者模式

《head first》中 的例子:咖啡店有各种咖啡饮料,可以往咖啡里面加各种调料变成另一种饮料,如果使用继承的方式来为每一种饮料设计一个类,代码的复杂度很容易膨胀,而且会继承父类的所有特性,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;同时,又掉入了另一个陷阱,随着扩展功能的增多,子...

2015-07-15 15:32:48

阅读数 1046

评论数 0

[C++设计模式]observer 观察者模式

有这么一种松耦合的需求: 有一些类的对象对类A对象的状态变化很感兴趣,不会改变类A的对象,也不会被类A的对象改变,想以一种较小的代价观察对类A对象状态变化。 下面的几种方式也能实现上述目的 (1)通过类的继承来共同管理和维护一些感兴趣的数据或者状态,但是耦合度大,不易扩展和维护。 (2)通过调用被...

2015-07-14 17:25:56

阅读数 747

评论数 0

为什么设计模式在C++社区没有Java社区流行?

我们发现设计模式在Java社区很流行,但是在C++社区却没有那么被关注,甚至有点被排斥,究竟是什么原因造成这个差异的呢?   (1)C++内存需要自己管理,所以有些模式在C++里使用不是那么方便,但是Java不用关心内存,所以在Java里的使用设计模式有天生的优势。随着shared_ptr, we...

2015-07-14 16:36:06

阅读数 929

评论数 0

[C++设计模式] strategy 策略模式

按照陈硕老师的观点,c++里有面向过程编程,面向对象编程和面向接口编程,三种思路都各有其适用场景。 面向过程编程是沿袭C的结构化编程思路,OOP是C++的核心,也是现代高级编程语言的核心。 c++的OO核心是继承和多态,在GUI编程,构建关键类等编程中很有用,但是泛用继承和多态,会增加复用和维护的...

2015-07-14 11:17:29

阅读数 600

评论数 0

google protocol buffer的原理和使用(四)

有个电子商务的系统(假设用C++实现),其中的模块A需要发送大量的订单信息给模块B,通讯的方式使用socket。 假设订单包括如下属性: --------------------------------   时间:time(用整数表示)   客户id:userid(用整数表示)   交易...

2015-07-10 10:21:55

阅读数 790

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭