【发布时间】:2013-11-26 23:59:50
【问题描述】:
我正在寻找一种矩阵结构,一种二维数组,允许我在恒定时间内插入新的行和列。有点像二维链表。
我不能使用二维链表的原因是我仍然想保持表格的结构。
我对访问没有任何要求,但结构必须是可迭代的。 去除也应该是恒定的时间。
我猜这是做不到的,我必须在插入新行时遍历所有列,在插入新列时遍历所有行。
我问这个问题以防万一这样的事情是可能的。
【问题讨论】:
我正在寻找一种矩阵结构,一种二维数组,允许我在恒定时间内插入新的行和列。有点像二维链表。
我不能使用二维链表的原因是我仍然想保持表格的结构。
我对访问没有任何要求,但结构必须是可迭代的。 去除也应该是恒定的时间。
我猜这是做不到的,我必须在插入新行时遍历所有列,在插入新列时遍历所有行。
我问这个问题以防万一这样的事情是可能的。
【问题讨论】:
您可能需要考虑稀疏矩阵之类的东西。默认/空值由项目记录的缺失表示,整个矩阵结构标题包含矩阵的维度。行和列可以非常快速地追加,只需增加结构的边界属性即可。
但是,如果您还想在现有行和列之间插入行和列,事情会变得有点棘手,您需要将两个列表和一个二维双向链接列表。你不会在这里得到恒定的时间插入。
您的基本结构将包含一个包含行标题的结构和一个包含列标题的结构。使用正确的列表实现,插入/删除行或列 header 将是 O(n)(即与行/列数相关)。然后,每一行和每一列标题都会有一个指向它们存在的数据项的指针列表。同样,使用正确的列表实现,插入数据也应该是 O(n),与行中的项目数和列中的项目数有关。这种性能类似于列表。
【讨论】:
最后我使用了自己的解决方案。我使用两个链表和一个以一对链表节点为键的字典。插入一行和一列是 O(1) 因为链表和查找是 O(1) 因为字典。
【讨论】: