【发布时间】:2011-08-01 10:17:34
【问题描述】:
我想从图表中生成所有三元组。第一个“集合”中的所有三元组都是 1,2,3 和 1,3,2 和 3,2,1。我对这组的另一个三元组(即 2,1,3 或 3,1,2 )不感兴趣。我该怎么做?
【问题讨论】:
标签: php algorithm math graph combinatorics
我想从图表中生成所有三元组。第一个“集合”中的所有三元组都是 1,2,3 和 1,3,2 和 3,2,1。我对这组的另一个三元组(即 2,1,3 或 3,1,2 )不感兴趣。我该怎么做?
【问题讨论】:
标签: php algorithm math graph combinatorics
正如问题的 cmets 中所讨论的,墓志铭的设置究竟是什么并不是很清楚,并且出于某种原因,他/她似乎不愿意澄清。但是让我们假设“图”实际上只是由一个距离矩阵表示(这可能是问题中的数字和 X 的混乱应该显示的内容),每对顶点都有一个实际的数字距离。
在这种情况下,这里没有什么非常图形化的事情;每对顶点都有一条边,无一例外;我们所能做的就是枚举每个顶点的三元组。
对于三个顶点 a,b,c 的每个 集合,我们需要检查 d(a,b)
for i from 0 to n_vertices-3
for j from i+1 to n_vertices-2
for k from j+1 to n_vertices-1
# now i,j,k are three distinct vertices, and every set of three vertices
# will occur once as we run through the loops.
a = distances[i,j]
b = distances[i,k]
c = distances[j,k]
if a>b+c or b>a+c or c>a+b
triangle inequality is violated; complain
如果您的图表以距离矩阵以外的方式表示,或者如果很多边可能不存在,那么您需要做一些不同的事情。
(注意:如果您的图应该满足三角不等式,那么可以说它不应该丢失任何边,除非它实际上是断开的。这取决于距离是否旨在“从 x 到 y 的整体最短距离"(在这种情况下,如果三角不等式失败,那么某些东西就被破坏了,并且连通图中不应该有缺失的边)或“从 x 到 y 的直接路径的距离”(在这种情况下,如果三角不等式失败,它仅仅表明据称直接路径不值得使用)。)
【讨论】: