通常,“可扩展”网格表示为列表列表(行列表,每行都有单元格列表),这些列表是某种链接列表。
在此数据结构中操作(删除、插入)行既简单又便宜,只需重新链接以前的节点即可,但是当涉及到列时,例如删除列,它会变成一个非常长的操作,我需要“循环” ' 要删除索引单元格的所有行。显然这不是一个好的行为,至少对我来说是这样。
我这里不是在谈论数据库;而是在谈论数据库。我发现的一个很好的例子是将一些文本文件放入文本编辑器中,(据我所知)文本编辑器主要将行分成行,并且很容易删除行。我希望删除一列与删除某些行一样便宜且高效。
最后,我需要的是一些多维网格,但我认为任何二维简单网格都适用于MD,我对吗?
你可以有一个二维的“链接矩阵”(我忘记了正确的术语):
... Col 3 ... Col 4 ...
| |
... --X-- ... --Y-- ...
| |
... ... ... ... ...
每个单元有四个邻居,如图所示。此外,您还需要行标题和列标题来指示行/列位置,以及指向每行或列中的第一个单元格。这些最容易表示为没有向上邻居的特殊单元格(对于列标题)。
在 3 和 4 之间插入新列意味着向下迭代第 3 列中的单元格 X,并插入新的右邻居 Z。这个新单元格 Z 向左链接到 X,向右链接到 Y。您还需要添加一个新的列标题,并且垂直连接新单元格。然后4之后的所有列的位置都可以重新编号(第4列变成第5列)。
... Col 3 Col 4 Col 5 ...
| | |
... --X-----Z-----Y-- ...
| | |
... ... ... ... ...
插入一列的成本是 O(n)用于插入和链接新单元格,并且再次 O(m) 用于更新列标题。这与删除过程类似。
因为每个单元格只有四个链接,所以行插入/删除使用相同的算法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)