微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么是存储和操作网格的更快的方法:2D数组,1D数组或哈希表?

如何解决什么是存储和操作网格的更快的方法:2D数组,1D数组或哈希表?

对于我的 Node.js 应用程序,我需要选择性能最好的结构来表示网格。

我的要求/限制是:

  • 要存储的网格本质上是二维的(x,y),并且不是很大(100-300个单元格)
  • 网格中的某些单元格不包含任何内容,即,网格将为25%的空间为空
  • 我将不得不经常处理网格。我需要做一些繁重的工作 网格算法,例如 flood-fill A *寻路等
  • 这是更改网格并再次应用算法的重复模拟过程
  • 我的目标是在有限的时间内进行数百次仿真,因此每一毫秒都很重要
  • 我不在乎代码的可读性
  • 使用的内存量也是一个小问题
  • 无法切换到另一种编程语言

我一直在以下三个选项中进行选择:

var grid = [height][width];
grid[y][x] = {};
var grid = [height * width]; 
grid[y * height + x] = {}; 
var y = ~~(index % height); 
var x = index - height * y;
var grid = []; 
var key = x + ',' + y; 
grid[key] = {};

一个是最舒适的,因为我将大量操作坐标,这意味着xy将一直很方便。可能的缺点-与一维数组相比,我读到保存对象时它可能会慢得多。

很好,并且可能非常快。但是我需要将index转换为xy,反之亦然,这是额外的计算,涉及到索引到坐标转换的模数。我仍然在许多好的资源中看到了这种方法

第三种方式对我来说是新手,但我已经在一些健壮的代码示例中看到了它,而且我读到从哈希表中检索对象与2D数组相比也更快。

我对合成基准测试不太信任,因此到目前为止,我不希望与几乎空逻辑建立代码竞争。但是,如果我现在选择错误的方式,然后不得不恢复原状,恐怕还有很长的路要走。

我看到过类似的问题,问这些方法的不同对,但是没有一个反映我的要求足够接近。

感谢您考虑使用代码示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。