我有一张非常稀疏的桌子,尺寸很大。
即,我的表的索引可能非常大,但表中的元素数量非常少。
我一直在为此考虑一个数据结构。
我排除了rows x cols
表格,因为查找行/列中的所有元素需要太多内存和太多时间。
相反,我想到了使用两个地图:rows
和cols
。
让我们看看rows
。键是行索引,键的值是 rowk
中所有元素的列号列表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)
办法做到这一点?