Data structures 我将使用什么样的数据结构来容纳无限网格?

Data structures 我将使用什么样的数据结构来容纳无限网格?,data-structures,language-agnostic,Data Structures,Language Agnostic,我需要弄清楚如何制作一个无限板(有点像wordsquared.com使用的),它可以根据需要扩展,而不会丢失已经在板上的对象的位置 我将使用什么数据结构来创建类似的板 我还应该提到,我需要进行位置查询,并能够检查某个点的周围环境。使用列表。将对象添加到电路板时,请将其添加到列表中。从板中移除对象时,请将其从列表中移除。这是插入和删除的O(1),速度最快。每个对象都有一个(x,y)坐标 还是你有别的想法?我只能回答你实际提出的问题…我可以马上想到两种方法: 分配一个节点池,每个节点都有一个指向当前

我需要弄清楚如何制作一个无限板(有点像wordsquared.com使用的),它可以根据需要扩展,而不会丢失已经在板上的对象的位置

我将使用什么数据结构来创建类似的板


我还应该提到,我需要进行位置查询,并能够检查某个点的周围环境。

使用列表。将对象添加到电路板时,请将其添加到列表中。从板中移除对象时,请将其从列表中移除。这是插入和删除的
O(1)
,速度最快。每个对象都有一个
(x,y)
坐标


还是你有别的想法?我只能回答你实际提出的问题…

我可以马上想到两种方法:

  • 分配一个节点池,每个节点都有一个指向当前节点上方、下方、左侧和右侧节点的指针。因为你的董事会只会增长,所以你不必处理任何丑陋的删除。将指针保持在电路板的左上角,以便于渲染(遍历过程简单而明显)

  • 分配节点矩阵并按原样使用。当你需要扩大你的董事会,分配一个新的,并复制数据从旧的到新的之前删除它。这将是一个缓慢的重新分配,但将便于与董事会的互动


  • 所以董事会本身只会作为一个概念存在,我会跟踪列表上的所有对象?我该如何检查周围环境?列表在某一点上不是会变得非常非常大吗?只有当你在列表中放置了很多对象时,列表才会变得很大。但是如果你在里面放很多东西,一切都会变大。它不是为位置查询而设计的——你应该把它放在问题中。你可以使用一个关联数据结构,比如地图,把你的坐标作为一个键。与此列表解决方案一样,您的数据结构是根据项目的数量而不是网格的范围(这是概念性的)进行扩展的。坐标键可以让你进行基于位置的查询。我喜欢你的第一个想法,你认为用于遍历x深度周围节点的脚本会运行得很慢吗?不会,它应该运行得相当好。假设您有左上角的指针,将行指针设置为指向它。每行的列都是通过跟随指针的右边直到null来找到的,连续的行从当前行的下方指针开始直到null。在遍历列表时会有一些小开销,但对于“无限”板,您必须在某个地方进行权衡。关于编辑,位置查询会有开销,因为您没有直接访问权限(除非您构建一个二级索引,以便每3x3或5x5节都有一个索引)。但是,环境检查很简单,因为每个节点都有指向其周围所有正方形的指针。