渐进式动态存储分配策略

在粗糙集约简过程中的一个重要步骤,划分等价类中,需要存储等价类。
等价类的存储分配有两种策略:一次一分配和一步到位。

一次一分配的步骤是出现先一个新等价类,调用一次malloc,以Forest Covertype为例,第一遍划分时会形成581012个等价类。
 这样需要调用581012次malloc,存储代价是    581012*sizeof(equivalence class) + 581012*sizeof(指针)   个字节。

一步到位的方法是一次性申请581012个等价类的大存储区域。 

一次一分配会过多进行函数调用,581012或许不多,但数据增大到20亿条时就不是可以忽略的代价,而且破坏数据局部性。
好处是貌似这么做不浪费存储空间。

一步到位的好处是显而易见的,缺点也很明显,在申请前无法确定到底有几个等价类会产生,多了浪费,少了不够用。而且随着约简进行,等价类会越来越少,浪费严重。

所以这种情况下完全可以借鉴操作系统对页面存储分配的策略:一次一页面。
随便打开记事本,输入一个字母,退出保存,查看文件属性, 会发现文件大小 1 字节,占用空间为 4KB。
4KB是文件系统进行分配的基本粒度单位。

所以新的构造大型决策表约简的渐进式存储分配可以这样:
1、决定插槽的数目,4KB 为粒度进行存储分配。每4KB可以以存储 1024个 4-byte 整型。
2、每个插槽只存放页面指针,初始为NULL,不够时立即分配新插槽。

这样就达到了一种新的平衡。 

posted @ 2013-09-16 11:56  simcity  阅读(350)  评论(0编辑  收藏  举报