【问题标题】:Optimal data structure for abritrary 2D traversal?abritrary 2D 遍历的最佳数据结构?
【发布时间】:2015-09-10 05:01:32
【问题描述】:

我正在研究与图像相关的算法,并且想知道对于不可预测的 2D 遍历结构有什么好的选择:

  • 从一组像素开始
  • 遍历到邻居(从左到右或对角线,总是 1 远,没有跳跃)。
  • 根据某些输出(随着时间的推移,每个方向的相似速率),继续执行更多遍历到具有下一个方向的下一个像素。

对于简单的遍历,数组在顺序读取时很好并且非常快,对于随机访问,可以做的不多,但我想知道这里是否可以做一些事情,如果简单地存储在一个“向上”的数组中实际上可以在大内存中相当远的是(5 + 百万像素)。你能想到什么好的结构吗?我很乐意在这里用内存换取速度,但我想不出任何结构可以帮助实际上制作一个项目数组,每个项目都存储一个指向其 8 个邻居的指针,但这听起来会很慢开始创建,并且我不会对这些图像进行超过 1 到 3 次传递,因此它最终可能会比简单的数组实现慢。

欢迎提出任何建议。

【问题讨论】:

    标签: c# .net arrays algorithm data-structures


    【解决方案1】:

    Space-filling curves 是您正在寻找的。它们在内存中为与邻居相关的操作提供缓存友好的数据布局。

    但是,请注意premature optimization。在进行任何类型的优化之前,请确保您有一个有效的算法。然后你可以开始优化它,进行基准测试并将它们与基本的非优化版本进行比较。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2015-04-26
    • 2015-06-30
    • 1970-01-01
    相关资源
    最近更新 更多