我正在处理跨语言的语义地图,例如口的here。
我希望能够得到这个图并提取 n 加权随机子图,其中权重由链接权重确定。也就是说,优先选择由较高权重连接的节点用于随机子图。我用google搜索是徒劳的,主要是获取有关创建具有特定子图属性的完全随机图的软件和论文。
盯着networkx
的文档并没有给我带来任何可能有帮助的东西,但不幸的是我在这个领域喋喋不休,可能因术语无知而遗漏了一些东西。
我正在寻找关于正确术语的建议(如果我错过了一些明显的东西),或指向可以执行此任务的工具(甚至是其他编程语言)。
答案 0 :(得分:1)
以下是算法的草图。
v_0
函数随机选择一个单元格(random
)。v_0
的列或行(它是对称的,因此它们相同)。weighted_pick
链接的代码段中将行放入picks = 1
。设这个顶点为v_1
。v_0
的行归零,以便永远不会再次挑选它。m/n
次,开始下一次迭代,v_1
作为新的起始顶点。将您刚刚选择的顶点保存在子图中。 n
次以获取子图的完整列表。这并不是你要求的 - 因为它选择的是长路径而不是重边缘 - 但这很容易解决。如果d(v_1, v_2) = 0
和v_1
之间没有任何边缘,您可以调整距离矩阵v_2
。然后你只会得到连接的子图,这似乎是你想要的。
这应该在O(|V|) * t
时间运行,其中t
是加权选择函数的时间复杂度。不幸的是,numpy
并没有说出searchsorted
的时间复杂度是什么,但我猜它会成为O(log n)
,因为它是&#39} ; s插入排序列表。那将为你提供O(|V| log |V|)
时间,这是非常好的。我猜你可以用大约100行的Python来完成它,如果你的数据是一个很好的格式开始。