我有一个非常稀疏且规模巨大的表格。
也就是说,我的表格索引可能非常大,但表格中的元素数量非常少。
我一直在考虑如何处理这个数据结构。
我排除了使用行x列
的表格,因为它占用了太多的内存,并且查找行/列中所有元素需要太多的时间。
相反,我想到了使用两个映射:行
和列
。
让我们看一下行
。密钥是行索引,键k
的值是其中所有元素所在的列号列表。
示例(1表示该位置存在元素):
0 1 0
1 0 1
将会是这个 rows
映射:
0: [1]
1: [0, 2]
我会保留一个类似的
cols
映射,其中键是列号,对于键k
的值是在列k
中的所有元素的行号列表。
当我想要从表格中删除行k
时,我会执行以下操作:
del rows[k]
但这不会从cols
映射中删除顶点。
我需要迭代所有被删除一些元素的列,并从cols
映射中删除每个元素。
是否有一种O(1)
方法可以做到这一点?
O(<# 行中的条目数>*<# 行中元素列的条目数>)
。在平均情况下,这可能少于几个操作。 - clwhisk