我有一本字典的字典。密钥是图中的节点。例如,让我们假设图中的节点i由字典中的密钥i表示。与该键对应的值又是一个字典,其中键是图中节点i的邻居。这些键有默认值1。让我们看看下面的示例 -如何从字典词典中删除所有项目的发生?
该图中的节点是 - [1,2,3,4,5,6]
邻居:
1->[2,4,5,6]
2->[3]
3->[4,6]
4->[1,6]
5->[1]
6->[1,3,4]
所以词典的词典是这样的:
{1:{2:1,4:1,5:1,6:1},2:{3:1},3:{4:1,6:1},4:{1:1,6:1},5:{1:1},6:{1:1,3:1,4:1}}
现在,在算法的不同阶段,我想实现,我需要从其他节点的邻居列表中删除一个节点x的所有出现秒。如果x = 4,则删除后,词典的词典应该是这样的:
{1:{2:1,5:1,6:1},2:{3:1},3:{6:1},4:{1:1,6:1},5:{1:5},6:{1:1,3:1}}
我用字典的字典而不是列表的字典,使删除效率。但它仍然是昂贵的。
这样做的效率最高?
我曾经保留过neighbors_of数据结构,但没有想到使用set!谢谢。我决定改变方法,因为我认为在预处理阶段需要做太多的工作来创建数据结构,如果图形规模庞大,这可能会很昂贵。 –
恐怕你在内存和CPU周期数之间有一个权衡。如果您想要腾出内存,则只能存储一次连接。如果你想快点,你可以将它们存储两次。创建反转表毕竟是一个快速操作,只需很少的代码行。 (我猜如果你有几千万个连接,那么你以后就不能和O(n)算法一起生活,因为当你考虑所有的处理时,它们往往会变成O(n^2)。) – DrV
对。说得通。 –