আমি বুঝতে চেষ্টা করছি যে ডিজকস্ট্রার অ্যালগরিদম কেন নেতিবাচক ওজন নিয়ে কাজ করবে না। সংক্ষিপ্ত পথগুলির উপর একটি উদাহরণ পড়ে , আমি নিম্নলিখিত পরিস্থিতিটি বের করার চেষ্টা করছি:
2
A-------B
\ /
3 \ / -2
\ /
C
ওয়েবসাইট থেকে:
প্রান্তগুলি সবগুলি বাম থেকে ডানে দিকে নির্দেশিত, আমরা যদি এ থেকে শুরু করি, ডিজকস্ট্রার অ্যালগোরিদমটি প্রান্তটি (এ, এক্স) নূন্যতম ডি (এ, এ) + দৈর্ঘ্য (প্রান্ত), (এ, বি) বেছে নেবে। এরপরে এটি ডি (এ, বি) = 2 সেট করে এবং অন্য প্রান্ত (y, C) কমিয়ে ডি (এ, ওয়াই) + ডি (ওয়াই, সি) চয়ন করে; একমাত্র পছন্দটি (এ, সি) এবং এটি ডি (এ, সি) = 3 নির্ধারণ করে। তবে এটি মোট দৈর্ঘ্য 1 সহ সি এর মাধ্যমে এ থেকে বি যাওয়ার সবচেয়ে কমতম পথ কখনই খুঁজে পায় না।
আমি বুঝতে পারি না ডিজকস্ট্রার নিম্নলিখিত প্রয়োগটি ব্যবহার করে কেন, ডি [বি] এর সাথে আপডেট করা হবে না 1
(যখন অ্যালগোরিদম ভার্টেক্স সিতে পৌঁছে যাবে তখন এটি বিয়ের উপর শিথিল হবে, দেখুন ডি [বি] এর সমান হয় 2
, এবং তাই আপডেট হয় এর মান 1
)।
Dijkstra(G, w, s) {
Initialize-Single-Source(G, s)
S ← Ø
Q ← V[G]//priority queue by d[v]
while Q ≠ Ø do
u ← Extract-Min(Q)
S ← S U {u}
for each vertex v in Adj[u] do
Relax(u, v)
}
Initialize-Single-Source(G, s) {
for each vertex v V(G)
d[v] ← ∞
π[v] ← NIL
d[s] ← 0
}
Relax(u, v) {
//update only if we found a strictly shortest path
if d[v] > d[u] + w(u,v)
d[v] ← d[u] + w(u,v)
π[v] ← u
Update(Q, v)
}
ধন্যবাদ,
মেইর