• sparse_hash_map、dense_hash_map和sparsetable的实现细节


    sparse_hash_map、dense_hash_map和sparsetable的实现细节

    翻译自sparsehash文档

    sparsetable

    sparsetable 是random access container,占用内存极少的数组(没有赋值的元素平均占用1~2 bits)。例如创建了长度是5的数组并且赋值a[2] = [big struct],那么a[2]会占用很大内存,但是a[0], a[1], a[3], a[4]不会。

    sparsetable 可以看作是一组groups,每个group负责M个。第一个group负责t[0]..t[M-1],第二个负责t[M]..t[2M-1],依此类推(M默认是48)。sparsetable初始化时候创建了 (99/M +1)个group,之后元素的增删查改都在对应的group上操作,t[i]实际上对应(t.group[i/M])[i%M]。

    每个分桶有一个保存值的vector,和大小为M的bitmap,每一位标识对应的元素是否赋值了。查找元素按这个步骤,寻找下标i的元素(i<M),如果bitmap[i]是0那么下标i没有被赋值,如果是1,那么取vector找到对应的值。

    operate cost description
    find O(M) 如果bitmap[i]=0,从vector里找元素是最耗时的,依然是常量时间
    insert O(M) 如果bitmap[i]=1,相当于find后做一次赋值;如果bitmap[i]=0,需要在vector中插入元素,再将bitmap[i]置1
    delete O(M) null

    sparse_hash_set

    sparse_hash_map

  • 相关阅读:
    element ui 日期选择器的各种快捷选项
    vue实现带搜索的模拟下拉框组件
    前端面试100问(31-40)
    前端面试100问(22-30)
    古德-图灵估计(Good-Turing Estimate)
    拉普拉斯平滑(Laplace Smoothing)
    分类 与 聚类
    推荐系统
    文本聚类(Text clustering)
    文本分类(Text Categorization)
  • 原文地址:https://www.cnblogs.com/lessmore/p/sparsehash.html
Copyright © 2020-2023  润新知