algorithm – 网格数据结构

通常,“可扩展”网格表示为列表列表(行列表,每行包含单元格列表),这些列表是某种链接列表.

在这个数据结构中操作(删除,插入)行很容易且成本低廉,只需要重新链接以前的节点,但是当涉及到列时,例如删除列就会变成一个非常长的操作,我需要’循环’删除索引单元格的所有行.显然这不是好行为,至少在我的情况下.

我不是在说数据库;我发现这是一个很好的例子,它是文本编辑器中的一些文本文件,(据我所知)文本编辑器大多将行分成行,并且很容易删除行.我想删除一个列就像删除一些行一样便宜和高效.

最后,我需要的是一些多维网格但我认为任何2D简单网格都适用于MD,我是对的吗?

最佳答案 你可能有一个二维“链接矩阵”(我忘记了正确的术语):

... Col 3 ... Col 4 ...
      |         |
... --X-- ... --Y-- ...
      |         |
...  ...  ...  ...  ...

每个单元有四个邻居,如图所示.此外,您需要可以指示行/列位置的行和列标题,以及指向每行或每列中的第一个单元格.这些最容易表示为没有向上邻居的特殊单元(对于列标题).

在3和4之间插入一个新列意味着在col 3中向下迭代单元格X,并插入一个新的右邻居Z.这个新单元格Z向左链接到X并向右链接到Y.您还需要添加一个新的列标题,并且垂直链接新单元格.然后,4之后的所有列的位置可以重新编号(col 4变为col 5).

... Col 3 Col 4 Col 5 ...
      |     |     |
... --X-----Z-----Y-- ...
      |     |     |
...  ...   ...   ...  ...

插入列的成本是O(n)用于插入和链接新单元,而O(m)用于更新列标题.这是一个类似的删除过程.

因为每个单元只有四个链接,所以相同的算法用于行插入/删除.

点赞