本帖最后由 凤鸾 于 2012-1-31 12:21 编辑
- Hashing
- 搜索(Searching)是用的最广泛的一种技术。搜索技术包括:merges ,joins,formats,indexs以及一些特别的操作和functions.
- 对于merge,sql,conditional logic等都是基于comparsion:也就是将key与表里面的一个或多个keys进行比较。这种方法因为是跟key的value进行比较进而判断是相等或不等,是一种速度很慢,耗费内存的一种做法。而且对于merge,得事先对data进行排序,如果数据集比较大的话,那么更是一种低效率的选择。
- Hashing哈希是一种基于DIRECT-ADDRESSING的方法。
- 对于direct addressing,有3种:key –indexing, BITMAPPING, HASHING.
- 1) key-indexing
- 用表中的key的值作为index的方法。
- 例子:
- 假设我们不能对2个数据集进行排序,但想将saml中的信息根据key,加到large中。我们该怎么操作呢?下面是用key-indexing的方法解决。
- data smal;
- input key s_sat;
- cards;
- 2 1
- 3 2
- 5 3
- 2 0
- 7 4
- 9 5
- 5 6
- 7 9
- 3 7
- ;
- data large;
- input key l_sat;
- cards;
- 1 7
- 2 3
- 2 6
- 9 1
- 9 3
- 7 1
- ;
- data match ;
- array hkey (-4000000 : 4000000) _temporary_ ;
- do until ( eof1 ) ;
- set smal end = eof1 ;
- if missing (hkey(key)) then hkey(key) = s_sat ; /*第一个do-unitl:将表smal中的key加载到key-index*/
- end ;
- do until ( eof2 ) ;
- set large end = eof2 ;
- s_sat = hkey(key) ;
- if s_sat > . then output ; /*第二个do-unitl:在large中搜索每个key,匹配的话,就将其输出来*/
- end ;
- stop ;
- run ;
- 值得注意的:1)在smal中的变量s_sat,必须用s_sat=hkey(key)的计算然后output.否则会很诡异的bug.2)saml中的key有重复观测,自动只保留第一条,重复的观测行被删掉。
- Key-indexing缺点:key-index必须是有限的整数。而且存储这些key-index,如果key-index是很大的数的话,那么存在这些index是要消耗很大的内存的。从而就有了bitmapping,它存储key-index是以bits存储的。减少了空间。
- 2)bitmapping, bitmapping是key-indexing的一个进步。在此省略。
- 3)hashing
- [color=Red]还在更新中[/color]
复制代码 |