এখানে রিয়েলজ স্লাওর উত্তরের ধারণাগুলির উপর ভিত্তি করে একটি সমাধান দেওয়া হয়েছে। এটি মূলত তাঁর ধারণাগুলির পুনরায় প্রকাশ যা সম্ভবত আরও পরিষ্কার বা সহজ হতে পারে। পরিকল্পনাটি হ'ল আমরা দুটি ধাপে এগিয়ে যাব:
প্রথমত, আমরা গ্রাফ গড়ে তুলবে নিম্নলিখিত সম্পত্তি সঙ্গে থেকে কোন পথ গুলি করার টি মধ্যে এস একটি সংক্ষিপ্ত থেকে পথ গুলি করার টি মধ্যে জি , এবং প্রত্যেক সবচেয়ে কম থেকে পাথ গুলি করার টি মধ্যে জি এছাড়াও উপস্থিত এস । সুতরাং, এস এর মধ্যে জি এর সবচেয়ে সংক্ষিপ্ততম পাথ রয়েছে : সমস্ত সংক্ষিপ্ততম পাথ এবং আরও কিছু নয়। এটি হ'ল এস ডিএজি হবে।SstSstGstGSSGS
এর পরে, আমরা এলোমেলোভাবে অবিশেষে থেকে সব পাথ থেকে নমুনা হবে করার টি মধ্যে এস ।stS
এটি একটি স্বেচ্ছাসেবিত নির্দেশিত গ্রাফ সাধারণীকরণ করে , যতক্ষণ না সমস্ত প্রান্তের ইতিবাচক ওজন থাকে, তাই আমি সেই পদগুলিতে আমার অ্যালগরিদম ব্যাখ্যা করব। যাক W ( U , V ) কিনারায় ওজন বোঝাতে তোমার দর্শন লগ করা → বনাম । (এই সাধারণীকরণ সমস্যা এ বক্তব্যে আপনি কি দিলেন। আপনি একটি unweighted গ্রাফ থাকে, তাহলে শুধু একে undirected প্রান্ত অনুমান যে প্রান্ত ওজন 1. আপনাকে একটি undirected গ্রাফ থাকে, তাহলে আচরণ ( U , V ) দুই নির্দেশ প্রান্ত যেমন তোমার দর্শন লগ করা → বনাম এবং V → তোমার দর্শন লগ করা ।)Gw(u,v)u→v(u,v)u→vv→u
পদক্ষেপ 1: এক্সট্রাক্ট । Sসোর্স এস থেকে শুরু করে তে একটি একক উত্সের সংক্ষিপ্ত-পাথ অ্যালগরিদম (উদাহরণস্বরূপ, ডিজকস্ট্রার অ্যালগরিদম) চালান । G এর প্রতিটি শীর্ষবিন্দু v এর জন্য d ( s , v ) s থেকে v এর দূরত্ব চিহ্নিত করতে দিন ।GsvGd(s,v)sv
নিম্নলিখিত হিসাবে গ্রাফ সংজ্ঞায়িত করুন । এটি প্রতি প্রান্ত নিয়ে গঠিত U → বনাম যেমন যে (1) ইউ → বনাম একটি প্রান্ত হয় জি , এবং (2) ঘ ( গুলি , বনাম ) = ঘ ( গুলি , U ) + + W ( U , V ) ।Su→vu→vGd(s,v)=d(s,u)+w(u,v)
গ্রাফ এর কিছু সুবিধাজনক বৈশিষ্ট্য রয়েছে:S
থেকে প্রতিটি সবচেয়ে কম পাথ করার টি মধ্যে জি একটি পাথ হিসাবে বিদ্যমান এস : একটি সংক্ষিপ্ত পথ গুলি = v 0 , ভি 1 , V 2 , ... , বনাম ট = T মধ্যে জি সম্পত্তি আছে ঘ ( গুলি , বনাম আমি + + 1 ) = d ( s , v i ) + w ( v i , v i)stGSs=v0,v1,v2,…,vk=tG, সুতরাং প্রান্তটি v i → v i + 1 এস এউপস্থিত রয়েছে।d(s,vi+1)=d(s,vi)+w(vi,vi+1)vi→vi+1S
প্রতিটি পাথ থেকে গুলি করার টি একটি সংক্ষিপ্ত পথ জি । বিশেষ করে, যে কোন পথ বিবেচনা এস থেকে গুলি করার টি বলো গুলি = v 0 , ভি 1 , V 2 , ... , বনাম ট = T । দৈর্ঘ্য তার প্রান্ত এর ওজন এর সমষ্টি দেওয়া হয়, যথা Σ k আমি = 1 W ( বনাম আমি - 1 , V আমি )SstGSsts=v0,v1,v2,…,vk=t∑ki=1w(vi−1,vi), তবে এর সংজ্ঞা অনুসারে , এই যোগফলটি হ'ল ∑ k i = 1 ( d ( s , v i ) - d ( s , v i - 1 ) , যা d ( s , t ) - d ( s , s ) তে টেলিস্কোপ দেয় ) = ঘ ( গুলি , T ) । অতএব, এই পথ থেকে একটি সংক্ষিপ্ত পথ গুলি করার টি মধ্যে জিS∑ki=1(d(s,vi)−d(s,vi−1)d(s,t)−d(s,s)=d(s,t)stG।
অবশেষে, -তে শূন্য-ওজনের প্রান্তের অনুপস্থিতিতে বোঝা যাচ্ছে যে এস একটি ড্যাগ।GS
পদক্ষেপ 2: একটি এলোমেলো পথের নমুনা করুন। এখন আমরা এ প্রান্ত উপর ওজন বর্জন করা করতে পারেন , আর থেকে একটি র্যান্ডম পথ নমুনা গুলি করার টি মধ্যে এস ।SstS
এই ব্যাপারে সাহায্য করার জন্য, আমরা গনা একটি precomputation কি করতে হবে প্রতিটি প্রান্তবিন্দু জন্য বনাম মধ্যে এস , যেখানে n হল ( বনাম ) থেকে স্বতন্ত্র পাথ সংখ্যা, মোট ছাত্র বনাম করার টি । নিম্নোক্ত পুনরাবৃত্তির সম্পর্কটি ব্যবহার করে টপোলজিক্যালি সাজানো ক্রমে এস এর শীর্ষকোষগুলি স্ক্যান করে লিনিয়ার টাইমে এই পূর্বনির্মাণটি করা যেতে পারে :n(v)vSn(v)vtS
n(v)=∑w∈succ(v)n(w)
where succ(v) denotes the successors of v, i.e., succ(v)={w:v→w is an edge in S}, and where we have the base case n(t)=1.
Next, we use the n(⋅) annotation to sample a random path. We first visit node s. Then, we randomly choose one of the successors of s, with successor w weighted by n(w). In other words:
choosesuccessor(v):
n = 0
for each w in succ(w):
n = n + n(w)
r = a random integer between 0 and n-1
n = 0
for each w in succ(w):
n = n + n(w)
if r < n:
return w
To choose a random path, we repeatedly iterate this process: i.e., v0=s, and vi+1= choosesuccessor
(vi). The resulting path is the desired path, and it will be sampled uniformly at random from all shortest paths from s to t.
Hopefully this helps you understand Realz Slaw's solution more easily. All credit to Realz Slaw for the beautiful and clean solution to this problem!
The one case this doesn't handle is the case where some edges have weight 0 or negative weight. However, the problem is potentially not well-defined in that case, as you can have infinitely many shortest paths.