zoukankan      html  css  js  c++  java
  • 渐进式动态存储分配策略

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

    一次一分配的步骤是出现先一个新等价类,调用一次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,不够时立即分配新插槽。

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

  • 相关阅读:
    frog-jump
    nth-digit
    binary-watch
    elimination-game
    evaluate-division
    random-pick-index
    integer-replacement
    rotate-function
    longest-substring-with-at-least-k-repeating-characters
    decode-string
  • 原文地址:https://www.cnblogs.com/servo/p/3324012.html
Copyright © 2011-2022 走看看