什么是存储和操作网格的更快的方法: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 (将#修改为@)