第四章原则的运用精选演示课件.pptVIP

  • 1
  • 0
  • 约9.22千字
  • 约 86页
  • 2019-12-22 发布于湖北
  • 举报
分析 在原来的Trie结构中,使用数组索引可以直接定位到要比较的数组元素,非常高效 采用{(i, value)}列表后,我们希望仍然保持数组索引的高效性,即: 不遍历{(i, value)} 列表,也能知道下标为 i 的数组元素是否包含了非空值,若非空,该值在列表中的位置 使用什么数据结构可以快速知道数组中非空元素的分布? 使用一个比特串,标记数组中空元素及非空元素的位置 精选 解决方案 压缩后的trie节点由一个比特串和一个仅包含非空元素的数组组成(非空元素的位置并未保存) 精选 压缩节点的查找 用一个block(假设值为i)查找当前节点的过程: 读入当前节点的bitmap 用 i 作为比特索引,检查bitmap中的第 i 位(最左边i=0): 若该位为“0”,查找结束 若该位为“1”,且bitmap中前 i 位中“1”的个数为c,读数组第c个元素 最多两次访存: 一次访问bitmap,一次访问数组 若压缩节点可以放入一个cache行,只需访存一次 精选 算法开销分析 查找一个常规trie节点的开销:一次访存 查找一个压缩trie节点的开销: 一次访存(压缩节点在一个cache行中) 一次比特位检查(bitmap) 统计bitmap中“1”的个数:使用popcount指令,只需一个指令周期就可以统计32位寄存器中“1”的个数 一次数组访问 注意:最后3个操作不涉及内存

文档评论(0)

1亿VIP精品文档

相关文档