2016-05-04 17 views
1

私は、の有向重み付きグラフG =(V、E)を持っています。有向グラフでパスの確率を見つける方法は?

このグラフでは、edge(v [i]、v [j])の重みはv [i]とv [j]の間の遷移のカウントです。私は、タスクを達成するための最良の方法を決定しようとしています

:パスの確率Pを見つけるためにどのようにノードAからノードBに

をすべての重みは正の整数です。例えば

weight(A,B)=count of transition from A to B 
weight(B,C)=count of transition from B to C 
weight(B,D)=count of transition from B to D 
weight(D,C)=count of transition from D to C 

そして、我々はいくつかのパスを持っている:これらのパスの確率Pを計算し、最適なものを選択する方法、だから、

A->B->C 
A->B->D->C 

を?

+1

確率はここから来るはずです。 「移行回数」とはどういう意味ですか?そして、1つの道を最も良くするものは何ですか?あなたは私たちが質問に答えるのに十分な問題文を私たちに与えていません。 – user2357112

+0

@ user2357112たとえば、遷移の数 - AからBへの遷移の数。最良の経路は、最も確率の高い経路である。私はこれを解決しようとしました:P =このパスに属する辺の重みの合計。しかし、私は最大の長さのパスが最大の確率を持つという問題がありますが、それは間違っています – Andrei

答えて

3

問題をshortest path problemに減らすことによって解決することができます。これは、確かに確率が論議されているとします(つまり、それぞれの重みは範囲[0,1]です)。

グラフをG=(V,E)とし、2つの頂点間の確率をw(u,v)とします。

定義する:いくつかのノードtにいくつかのノードsから W '(U、V)= -log(W(U、V))

最短経路は、その後、使用グラフ内の最短経路であります重量関数としてw'。その確率はw(v1,v2) * w(v2,v3) * ... * w(vn-1,vn)で、パスv1->v2->...->vnについて

:あなたはDijkstra's algorithmまたはBellman-Ford algorithm

証明を使用して最短経路を見つけることができます。

重量としてw'使用して、任意の最短経路アルゴリズムを使用して、このパスのコストは:

d(v1,vn) = w'(v1,v2) + w'(v2,v3) + ... + w'(vn-1,vn) = 
d(v1,vn) = -log(w(v1,v2)) + -log(w(v2,v3) + ... + -log(w(vn-1,vn)) = 
d(v1,vn) = -1* [ log(w(v1,v2)) + log(w(v2,v3)) + ... + log(w(vn-1,vn)) = 
d(v1,vn) = -1* log(w(v1,v2) * w(v2,v3) * ... * w(vn-1,vn)) 

これは明らかsからtに見つかった最小限の経路にも当てはまります。
これは、このパスは、最小値があることを意味します

s(s,t) = -1* log(w(s,v2) * w(v2,v3) * ... * w(vn-1,t)) 

を、ログが単調関数であるから、それはまたw(s,v2) * w(v2,v3) * ... * w(vn-1,t)の最大値である-1 * w(s,v2) * w(v2,v3) * ... * w(vn-1,t)の最小値であり、そしてそれはまさに確率です。

+0

これはかなり洗練されたようです。私は、viの代わりに配列表記法v [i]を使用することをお勧めします(実際にはOPの中にあるv_iの代わりに)。私は "対数"のトリックへの参照を追加することをお勧めします。私はそれが実際よりも見た目が*より難しくなるので、過剰な線を取り除くことを提案する。また、何らかの独立性を想定していると思います。 – Matsmath

+0

@amit w '(u、v)の範囲([0; 1])の値は?ノードuからノードvへの遷移のw(u、v)=数があれば、w '(u、v)を得る方法は? – Andrei

+0

@Andrei '-log(ノードuからノードvへの遷移の数)'は、一般的な 'w(。、。)'について述べています。 – amit

関連する問題