所以我写了一个函数来查找图中度数最小的 k 个节点。它看起来像这样:
def smallestKNodes(G, k):
leastK = []
for i in range(G.GetMxNId()):
# Produces an iterator to the node
node = G.GetNI(i)
for j in range(k):
if j >= len(leastK):
leastK.append(node)
break
elif node.GetDeg() < leastK[j].GetDeg():
leastK.insert(j, node)
leastK = leastK[0:k]
break
return leastK[0:k]
我的问题是当所有节点的度数相同时,它每次都选择相同的节点。我怎样才能做到这一点,它需要所有零度或其他节点,然后随机选择 k 个节点?
规定:
(1)假设k = 7,那么如果有3个度数为0的节点和10个度数为1的节点,我想选择所有度数为0的节点,但随机选择4个度数为1的节点。
(2) 如果可能,我不想访问任何节点两次,因为可能有太多节点无法放入内存。也可能有非常多的具有最小度数的节点。在某些情况下,也可能存在非常少量的节点。