我试图在Java的帮助下找到下一个问题的解决方案。我有一个图表,这是一个很好的例子:
有它的符号:
[{ A = {C = 0.7},{D = 0.3}},
{ C = {out = 0.2},{F = 0.8}},
{ D = {C = 0.1},{F = 0.2},{G = 0.3},{E = 0.4}},
{ S = {A = 0.4},{B = 0.6}},
{ E = {G = 0.3},{out = 0.7}},
{ G = {B = 0.2} {out = 0.8}},
...
S - 是一个起始节点(S = 1), out - 是图表之外的一种方式。
我想跟踪图表并知道每个节点有多少百分比。 例如, A = 0.4 * S(S = 1), C = 0.7A + 0.1D, D = 0.3A + 0.7B
我认为可以通过递归(DFS用于有向图,特别是Tarjan的算法)来实现它,但是虽然存在循环,但我认为它没有帮助。另一种解决方案是求解线性方程组。 我不知道什么是更好的工作,也许有一些解决方案存在这种任务。 这个例子只是一个例子,但我应该考虑我喜欢appr。 2000个节点(谁知道有多少个循环)。
你会怎么做?
答案 0 :(得分:2)
求解线性方程式似乎是一种非常好的方法。
您可以尝试使用Gaussian Elimination。我很确定你可以在网上找到已编写的Java代码来为你完成。
答案 1 :(得分:0)
注意:对于循环图,求解一个线性方程组不会给出概率。它为您提供了预期的多样性。
好的,问题是给出一个图形 G ,为每个节点计算访问该节点的概率。这是一个精确的算法。
该算法在图形大小上基本上是线性的,但在SCC的大小中是指数。我不确定你的周期是什么样的。