দক্ষতার সবচেয়ে কম স্যাম্পলিং


14

যাক G গ্রাফ হবে | s এবং t দুই ছেদচিহ্ন হতে G । আমরা দক্ষতার সঙ্গে একটি সংক্ষিপ্ত পাওয়া যাবে s - t মধ্যে সব সবচেয়ে কম পথগুলিতে সেট থেকে এলোমেলোভাবে অবিশেষে এবং স্বাধীনভাবে পথ s এবং t ? সরলতার জন্য, আমরা ধরে নিতে পারি G সহজ, অনির্দেশিত এবং অপরিচ্ছন্ন।

এমনকি অনেকগুলি সীমাবদ্ধ গ্রাফগুলিতেও, s এবং এর মধ্যে সংক্ষিপ্ততম পাথের সংখ্যা জিt আকারে সূচকীয় হতে পারে । অতএব, আমরা স্বাভাবিকভাবেই এড়ানোর মত আসলে সব সবচেয়ে কম কম্পিউটিং হবে গুলি - টি পাথ। আমি সাধারণ কেস সম্পর্কে জানি না, তবে আমার কাছে মনে হয় আমরা কিছু বিশেষ গ্রাফ ক্লাসের জন্য এটি অর্জন করতে পারি।Gst

এটি এমন কিছু মনে হয় যার আগে কেউ অবশ্যই বিবেচনা করেছিল। এটি সম্পর্কে কোন বিদ্যমান গবেষণা আছে, বা সাধারণ গ্রাফগুলির জন্য এটি করা কি আসলেই সহজ?


ভাল প্রশ্ন জুহো। একটি উত্তর বিবেচনা করার সময়, আপনি "এলোমেলোভাবে একটি স্ট্র্যাড পাথের নমুনা রেখে" ঠিক কী বুঝতে পারেন? যদি এটিকে টি এবং এলোমেলোভাবে বাছাইয়ের পক্ষে যথেষ্ট হয় তবে প্রশ্নটি তুচ্ছ, সুতরাং আমি অনুমান করি যে আপনি বোঝাচ্ছেন যে সংক্ষিপ্ত পথে সমস্ত নোড একটি ফ্রিকোয়েন্সি (অর্থাত্, সম্ভাব্যতা) দিয়ে উপস্থিত হবে যা অভিন্ন বিতরণ অনুসরণ করে। নাকি অন্য কোন সংজ্ঞা আছে? বিশেষত, দ্বিপক্ষীয় গ্রাফগুলির জন্য আপনার প্রশ্নটি খুব সহজ বলে মনে হচ্ছে, তাই না?
কার্লোস লিনারস ল্যাপেজ

1
@ কার্লোস লিনারেস লেপেজে ডায়মন্ড গ্রাফটি বলে বিবেচনা করুন এবং বলুন "উল্লম্ব প্রান্ত" এর ডানদিকে রয়েছে এবং টি বাম দিকে রয়েছে। S এবং t এর মধ্যে এখন দুটি সংক্ষিপ্ততম পাথ রয়েছে । অ্যালগরিদম এই দুটি পাথের মধ্যে একটিরও সমান সম্ভাবনা নিয়ে ফিরে আসা উচিত। সুতরাং এস এবং টি "এলোমেলোভাবে তোলা" হয় না, তবে সেগুলি ইনপুট হিসাবে দেওয়া হয়। এটি কি পরিষ্কার করে দেয়? এই অর্থে, আমি দ্বিপক্ষীয় গ্রাফের জন্য সমস্যাটি খুব সহজ কিনা তা নিশ্চিত নই। ststst
জুহো

1
@ CarlosLinaresLópez অন্য কথায়, আমরা একটি গ্রাফ দেওয়া হয় এবং দুটি ছেদচিহ্ন গুলি , T ভী ( জি )এসকে এস এবং টি এর মধ্যে সংক্ষিপ্ততম সমস্ত পথের সেট হতে দিন । S এর একটি উপাদান এলোমেলোভাবে আউটপুট করুন। Gs,tV(G)SstS
জুহো

উত্তর:


6

আমি এই উত্তরটি সঠিক কিনা 100% নিশ্চিত নই, তবে এখানে যায়:

আমি মনে করি আপনি একক উত্স এবং একক সিঙ্ক সহ একটি ডিএজে, থেকে শুরু করে অবিচ্ছিন্ন যেকোনও পাথ এটিকে হ্রাস করতে পারবেন Ist

প্রদত্ত গ্রাফ G

  1. একটি নতুন খালি ডিগ্রাফ তৈরি করুন, H
  2. প্রথম: Dijkstra সবচেয়ে খাটো-পথের এই বি অংশ চালানো থেকে শুরু, তাদের সবচেয়ে কম দূরবর্তী-from- সঙ্গে সব নোড চিহ্নিত, গুলিss
  3. যাক থেকে সর্বনিম্ন দূরত্ব হতে গুলি - বনাম ; যা আমরা Dijkstra এর সবচেয়ে সংক্ষিপ্ত-পথ অ্যালগরিদমের বিএফএস পদক্ষেপ থেকে জানি।d(s,v)sv
  4. তারপর, Dijkstra সবচেয়ে খাটো-পাথ আলগোরিদিম পরবর্তী ধাপে না সবচেয়ে কম-পাথ প্রাপ্ত এ সঞ্চয় (থেকে পিছনের দিকে গিয়ে টন থেকে গুলি )।pts
  5. এখন নিম্নলিখিত লুপটি শুরু করুন; মন্তব্যগুলিতে বিস্তৃতকরণ এবং নীচে:
    • q0={t}
    • যখন q0
      • q1=
      • জন্য uq0
        • সুতরাং আমরা এই সংক্ষিপ্ত-সাবপথের জন্য টি - ইউ থেকে পরবর্তী সমস্ত নোডগুলি সন্ধান করতে চাইtu
        • সমস্ত যেমন ডি ( গুলি , ভি ) < ডি ( গুলি , ইউ )edge(u,v)Gd(s,v)<d(s,u)
          • একটি প্রতিবেশী নোড, কম d ( গুলি , ) সহ (এটি 1 কম হবে)vd(s,)1
          • অতএব, একটি সংক্ষিপ্ততম পথে সাবপথ সম্ভব।tuv
          • রাখুন vH,di-edge(u,v)H
          • এখন আমাদের পরবর্তী বারের মতো এর কম প্রতিবেশী যাচাই করা দরকার ।v
          • কি 1 রাখুনvq1
      • থেকে q 1 সেট করুন : q0q1
        • q0q1

মূলত, আমি সমস্ত সম্ভাব্য নোডগুলি সংগ্রহ করছি যা সংক্ষিপ্ততম পথে ব্যবহার করা যেতে পারে এবং সেগুলি রেখে দিচ্ছি ।H

এটি কীভাবে কাজ করে সে সম্পর্কে আরও:

ডিজকস্ট্রার সবচেয়ে সংক্ষিপ্ত-পথের অ্যালগরিদম প্রথমে একটি বিএফএস চালিয়ে কাজ করে এবং সমস্ত নোড তাদের সংক্ষিপ্ততম পথগুলি এস - ভি থেকে চিহ্নিত করে কাজ করে । পরবর্তী পদক্ষেপটি টি - এস থেকে ফিরে যেতে হবে এবং সর্বনিম্ন প্রতিবেশী নোডগুলি অনুসরণ করতে হবে।vGsvts

জিনিস, এখানে আপনি বেছে নিতে পারেন কোন অন্তত প্রতিবেশী নোড। আমি কি এখানে করতে সংগ্রহ হয় সব লিস্ট প্রতিবেশী নোড প্রতিটি পদক্ষেপ, যার মানে আমি হিসাব সব সবচেয়ে কম-পাথ।

এখন আপনি তাড়াতাড়ি ভাবেন, কিন্তু ওহে, কেন তাদেরকে ঘনিষ্ঠভাবে গণনা করা হচ্ছে , তবে আমার পথটি নেই?

উত্তরটি হ'ল, কারণ আমি একই নোড দু'বার যুক্ত এড়াতে একটি সেট ব্যবহার করি, তাই প্রতিটি সম্ভাব্য পথের জন্য আমি এটি পুনরায় গণনা এড়াতে চাই।

এখন আমাদের কাছে একটি ডিএজি রয়েছে যা আমরা যেকোন উপায়ে থেকে ট্র্যাভার করতে পারি এবং এস - টি থেকে একটি সংক্ষিপ্ত-বিপরীত পথ পেতে পারি । গ্রাফ থাকা উচিত টন একমাত্র উৎস, এবং গুলি শুধুমাত্র বেসিনে হিসাবে।tsstts


যদি উপরেরটি সঠিক হয়, তবে আমি মনে করি আমরা এটি আরও একধাপ এগিয়ে নিয়ে যেতে পারি এবং নীচের মতো সমস্যাটি সমাধান করতে পারি।

ডাগের প্রতিটি নোডকে নোড-ওজন দিন; নোড-ওজন সেই নোড থেকে পর্যন্ত পাথের সংখ্যা হবে । আসুন আমরা এই ডাব্লু ( ভি ) কল করুন ।sw(v)

আপনি এগুলি দ্রুত গণনা করতে পারেন, অ্যালগরিদম দেখুন যা জি থেকে টি-তে সহজ পাথের সংখ্যা খুঁজে পায়

আমাদের নোড-ওজন হয়ে গেলে, আমরা অভিন্নভাবে কোনও পথ বেছে নিতে পারি:

  • লেগ -কাঠামো হিসাবে DAG লেআউট করুন (চাক্ষুষ জন্য)
  • প্রতিটি স্তরে, নোডগুলির মধ্যে যেমন একটি স্বেচ্ছাসেবী অর্ডার চয়ন করুন। "বাম থেকে ডানে" একটি ধারণা।
  • ডাগকে অনুসরণ করছে: প্রতিটি পদক্ষেপে , i [ 1 , | পি | ] (যেখানে || এর অর্থ আকার-এর, এক্ষেত্রে সংক্ষিপ্ততম দৈর্ঘ্যের দৈর্ঘ্য): ii[1,|p|]||
    • বর্তমান নোড হতে দাও ( টি থেকে শুরু )uit
    • বাচ্চাদের সমস্ত ওজন যুক্ত করুন এবং একটি আরএনজি ব্যবহার করে ওজনযুক্ত বাচ্চাদের মাঝে সমানভাবে একটি চাইল্ড নোড, v i বেছে নিন ।uivi
    • সেট করুন এবং পরবর্তী পদক্ষেপে যানui+1=vi

বাম-থেকে-ডানদিকে স্তর-কাঠামো এবং ধারণাটি কেবল উত্পন্ন করার জন্য এবং প্রাথমিকভাবে সেই পথটি বেছে নেওয়ার আমার প্রাথমিক প্রয়াসের অংশ ছিল , তবে আমি এটি খুঁজে পাইনি, তাই আপনি এগুলি নিরাপদে উপেক্ষা করতে পারেন। r[0,w(t))
রিয়েলজ স্লাও

1
এই উত্তরটি দুর্দান্ত দেখাচ্ছে! আমি আইডিয়া ভালবাসি! আমি আমার বোধগম্যতার পরীক্ষা হিসাবে এটি কিছুটা আলাদাভাবে লেখার চেষ্টা করেছি (আমার উত্তরে)। যাই হোক না কেন, আমি এই সুন্দর উত্তরটির জন্য আমার প্রশংসা ভাগ করে নিতে চেয়েছিলাম!
DW

5

এখানে রিয়েলজ স্লাওর উত্তরের ধারণাগুলির উপর ভিত্তি করে একটি সমাধান দেওয়া হয়েছে। এটি মূলত তাঁর ধারণাগুলির পুনরায় প্রকাশ যা সম্ভবত আরও পরিষ্কার বা সহজ হতে পারে। পরিকল্পনাটি হ'ল আমরা দুটি ধাপে এগিয়ে যাব:

  1. প্রথমত, আমরা গ্রাফ গড়ে তুলবে নিম্নলিখিত সম্পত্তি সঙ্গে থেকে কোন পথ গুলি করার টি মধ্যে এস একটি সংক্ষিপ্ত থেকে পথ গুলি করার টি মধ্যে জি , এবং প্রত্যেক সবচেয়ে কম থেকে পাথ গুলি করার টি মধ্যে জি এছাড়াও উপস্থিত এস । সুতরাং, এস এর মধ্যে জি এর সবচেয়ে সংক্ষিপ্ততম পাথ রয়েছে : সমস্ত সংক্ষিপ্ততম পাথ এবং আরও কিছু নয়। এটি হ'ল এস ডিএজি হবে।SstSstGstGSSGS

  2. এর পরে, আমরা এলোমেলোভাবে অবিশেষে থেকে সব পাথ থেকে নমুনা হবে করার টি মধ্যে এসstS

এটি একটি স্বেচ্ছাসেবিত নির্দেশিত গ্রাফ সাধারণীকরণ করে , যতক্ষণ না সমস্ত প্রান্তের ইতিবাচক ওজন থাকে, তাই আমি সেই পদগুলিতে আমার অ্যালগরিদম ব্যাখ্যা করব। যাক W ( U , V ) কিনারায় ওজন বোঝাতে তোমার দর্শন লগ করা বনাম । (এই সাধারণীকরণ সমস্যা এ বক্তব্যে আপনি কি দিলেন। আপনি একটি unweighted গ্রাফ থাকে, তাহলে শুধু একে undirected প্রান্ত অনুমান যে প্রান্ত ওজন 1. আপনাকে একটি undirected গ্রাফ থাকে, তাহলে আচরণ ( U , V ) দুই নির্দেশ প্রান্ত যেমন তোমার দর্শন লগ করা বনাম এবং V তোমার দর্শন লগ করা ।)Gw(u,v)uv(u,v)uvvu


পদক্ষেপ 1: এক্সট্রাক্ট । Sসোর্স এস থেকে শুরু করে তে একটি একক উত্সের সংক্ষিপ্ত-পাথ অ্যালগরিদম (উদাহরণস্বরূপ, ডিজকস্ট্রার অ্যালগরিদম) চালান । G এর প্রতিটি শীর্ষবিন্দু v এর জন্য d ( s , v ) s থেকে v এর দূরত্ব চিহ্নিত করতে দিন ।GsvGd(s,v)sv

নিম্নলিখিত হিসাবে গ্রাফ সংজ্ঞায়িত করুন । এটি প্রতি প্রান্ত নিয়ে গঠিত U বনাম যেমন যে (1) ইউ বনাম একটি প্রান্ত হয় জি , এবং (2) ( গুলি , বনাম ) = ( গুলি , U ) + + W ( U , V )SuvuvGd(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)vivi+1S

  • প্রতিটি পাথ থেকে গুলি করার টি একটি সংক্ষিপ্ত পথ জি । বিশেষ করে, যে কোন পথ বিবেচনা এস থেকে গুলি করার টি বলো গুলি = v 0 , ভি 1 , V 2 , ... , বনাম = T । দৈর্ঘ্য তার প্রান্ত এর ওজন এর সমষ্টি দেওয়া হয়, যথা Σ k আমি = 1 W ( বনাম আমি - 1 , V আমি )SstGSsts=v0,v1,v2,,vk=ti=1kw(vi1,vi), তবে এর সংজ্ঞা অনুসারে , এই যোগফলটি হ'ল k i = 1 ( d ( s , v i ) - d ( s , v i - 1 ) , যা d ( s , t ) - d ( s , s ) তে টেলিস্কোপ দেয় ) = ( গুলি , T ) । অতএব, এই পথ থেকে একটি সংক্ষিপ্ত পথ গুলি করার টি মধ্যে জিSi=1k(d(s,vi)d(s,vi1)d(s,t)d(s,s)=d(s,t)stG

  • অবশেষে, -তে শূন্য-ওজনের প্রান্তের অনুপস্থিতিতে বোঝা যাচ্ছে যে এস একটি ড্যাগ।GS

পদক্ষেপ 2: একটি এলোমেলো পথের নমুনা করুন। এখন আমরা এ প্রান্ত উপর ওজন বর্জন করা করতে পারেন , আর থেকে একটি র্যান্ডম পথ নমুনা গুলি করার টি মধ্যে এসSstS

এই ব্যাপারে সাহায্য করার জন্য, আমরা গনা একটি precomputation কি করতে হবে প্রতিটি প্রান্তবিন্দু জন্য বনাম মধ্যে এস , যেখানে n হল ( বনাম ) থেকে স্বতন্ত্র পাথ সংখ্যা, মোট ছাত্র বনাম করার টি । নিম্নোক্ত পুনরাবৃত্তির সম্পর্কটি ব্যবহার করে টপোলজিক্যালি সাজানো ক্রমে এস এর শীর্ষকোষগুলি স্ক্যান করে লিনিয়ার টাইমে এই পূর্বনির্মাণটি করা যেতে পারে :n(v)vSn(v)vtS

n(v)=wsucc(v)n(w)

where succ(v) denotes the successors of v, i.e., succ(v)={w:vw 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.


Glad you took the time to fully get my answer; I wasn't sure it is correct. Now I am vindicated :D.
Realz Slaw
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.