如何解决什么是存储和操作网格的更快的方法: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] = {};
第一个是最舒适的,因为我将大量操作坐标,这意味着x
和y
将一直很方便。可能的缺点-与一维数组相比,我读到保存对象时它可能会慢得多。
秒很好,并且可能非常快。但是我需要将index
转换为x
和y
,反之亦然,这是额外的计算,涉及到索引到坐标转换的模数。我仍然在许多好的资源中看到了这种方法。
第三种方式对我来说是新手,但我已经在一些健壮的代码示例中看到了它,而且我读到从哈希表中检索对象与2D数组相比也更快。
我对合成基准测试不太信任,因此到目前为止,我不希望与几乎空逻辑建立代码竞争。但是,如果我现在选择错误的方式,然后不得不恢复原状,恐怕还有很长的路要走。
我看到过类似的问题,问这些方法的不同对,但是没有一个反映我的要求足够接近。
感谢您考虑使用代码示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。