【问题标题】:Bitmapping Algorithm位图算法
【发布时间】:2012-12-30 03:27:46
【问题描述】:

数据集是一个二维网格。从实时源更新网格的频率非常高,但处理这些数据需要很长时间。

计时器在固定时间对网格进行采样,以获取标记为脏且需要处理的单元格。

启动处理的开销,称为函数 P() 需要很长时间来引导。 P 可以采用一维数组,例如水平或垂直的扫描线。

问题是如何设计一种高效的算法,将二维网格上的任意一组脏位“分块”成扫描线,从而最大限度地减少调用 P() 的次数?

【问题讨论】:

  • 你必须举个例子,或者更好的解释。
  • 为什么你称这个扫描线不只是线?实际上,“扫描线”是一个非常精确的术语,表示更新 3d 场景的算法。据我了解,您想计算一行或一列中脏单元格的数量来决定应该处理哪一行,对吗?

标签: c++ performance algorithm bitmap


【解决方案1】:

您可以研究prefix sum 算法的变体,以并行快速扫描位图,隔离脏块,并将指向这些脏块的指针打包到可以传递的新数组或“扫描线”中到你的P() 函数。

例如,使用并行线程,对二维数组执行前缀求和,其中脏块的值为1,非脏块的值为0。完成前缀和后,所有脏块将从1....N 开始向上计数。现在,使用一组并行线程,复制或创建指向已编号脏块的指针到一个新的“扫描线”数组......来自前缀和的值成为扫描线数组中每个脏块的槽的基本哈希值块应该被引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2012-02-17
    • 2012-10-14
    • 2013-07-17
    • 2018-05-20
    • 1970-01-01
    相关资源
    最近更新 更多