ফ্লয়েড-ওয়ারশাল, ডিজকস্ট্রার এবং বেলম্যান-ফোর্ড অ্যালগরিদমের মধ্যে পার্থক্য সম্পর্কে আমি কি ঠিক বলেছি?


12

আমি তিনটি অধ্যয়ন করছি এবং আমি নীচে তাদের থেকে আমার সূত্র উল্লেখ করছি। কেউ আমাকে বলতে পারবেন আমি তাদের সঠিকভাবে যথেষ্ট বুঝতে পেরেছি কিনা? ধন্যবাদ.

  1. ডিজকস্ট্রার অ্যালগরিদম কেবল তখনই ব্যবহৃত হয় যখন আপনার একক উত্স থাকে এবং আপনি একটি নোড থেকে অন্য নোডের সবচেয়ে ছোট পথ জানতে চান তবে এই ক্ষেত্রে ব্যর্থ হন

  2. ফ্লয়েড-ওয়ারশালের অ্যালগরিদম ব্যবহার করা হয় যখন সমস্ত নোডের যে কোনও একটি উত্স হতে পারে, সুতরাং আপনি চান যে কোনও উত্স নোড থেকে যে কোনও গন্তব্য নোডে পৌঁছানোর জন্য সবচেয়ে কমতম দূরত্ব চান। এটি কেবল তখনই ব্যর্থ হয় যখন নেতিবাচক চক্র থাকে

(এটি সর্বাধিক গুরুত্বপূর্ণ I আমি বোঝাতে চাইছি এটিই আমি সম্পর্কে কমপক্ষে নিশ্চিত :)

৩.বেলম্যান-ফোর্ডটি ডিজকস্ট্রার মতো ব্যবহৃত হয়, যখন কেবল একটি উত্স থাকে। এটি নেতিবাচক ওজন পরিচালনা করতে পারে এবং এর কাজটি কোনও উত্স ব্যতীত ফ্লয়েড-ওয়ারশালের সমান?

আপনার যদি একবার দেখার দরকার হয় তবে সংশ্লিষ্ট অ্যালগোরিদমগুলি হবেন (সৌজন্য উইকিপিডিয়া):

বেলম্যান-ফোর্ড:

 procedure BellmanFord(list vertices, list edges, vertex source)
   // This implementation takes in a graph, represented as lists of vertices
   // and edges, and modifies the vertices so that their distance and
   // predecessor attributes store the shortest paths.

   // Step 1: initialize graph
   for each vertex v in vertices:
       if v is source then v.distance := 0
       else v.distance := infinity
       v.predecessor := null

   // Step 2: relax edges repeatedly
   for i from 1 to size(vertices)-1:
       for each edge uv in edges: // uv is the edge from u to v
           u := uv.source
           v := uv.destination
           if u.distance + uv.weight < v.distance:
               v.distance := u.distance + uv.weight
               v.predecessor := u

   // Step 3: check for negative-weight cycles
   for each edge uv in edges:
       u := uv.source
       v := uv.destination
       if u.distance + uv.weight < v.distance:
           error "Graph contains a negative-weight cycle"

Dijkstra:

 1  function Dijkstra(Graph, source):
 2      for each vertex v in Graph:                                // Initializations
 3          dist[v] := infinity ;                                  // Unknown distance function from 
 4                                                                 // source to v
 5          previous[v] := undefined ;                             // Previous node in optimal path
 6                                                                 // from source
 7      
 8      dist[source] := 0 ;                                        // Distance from source to source
 9      Q := the set of all nodes in Graph ;                       // All nodes in the graph are
10                                                                 // unoptimized - thus are in Q
11      while Q is not empty:                                      // The main loop
12          u := vertex in Q with smallest distance in dist[] ;    // Start node in first case
13          if dist[u] = infinity:
14              break ;                                            // all remaining vertices are
15                                                                 // inaccessible from source
16          
17          remove u from Q ;
18          for each neighbor v of u:                              // where v has not yet been 
19                                                                                 removed from Q.
20              alt := dist[u] + dist_between(u, v) ;
21              if alt < dist[v]:                                  // Relax (u,v,a)
22                  dist[v] := alt ;
23                  previous[v] := u ;
24                  decrease-key v in Q;                           // Reorder v in the Queue
25      return dist;

ফ্লয়েড-Warshall:

 1 /* Assume a function edgeCost(i,j) which returns the cost of the edge from i to j
 2    (infinity if there is none).
 3    Also assume that n is the number of vertices and edgeCost(i,i) = 0
 4 */
 5
 6 int path[][];
 7 /* A 2-dimensional matrix. At each step in the algorithm, path[i][j] is the shortest path
 8    from i to j using intermediate vertices (1..k−1).  Each path[i][j] is initialized to
 9    edgeCost(i,j).
10 */
11
12 procedure FloydWarshall ()
13    for k := 1 to n
14       for i := 1 to n
15          for j := 1 to n
16             path[i][j] = min ( path[i][j], path[i][k]+path[k][j] );

আমি নিশ্চিত যে ডিজকস্ট্রার অ্যালগরিদম নেতিবাচক-ওজন নোডগুলি পরিচালনা করতে পারে। যদি negativeণাত্মক ওজন চক্র থাকে তবে অ্যালগরিদম নির্বিশেষে সবচেয়ে সংক্ষিপ্ততম পথটি সংজ্ঞায়িত।
কেভিন ক্লাইনে

1
@ কেভিঙ্কলাইন: উইকিপিডিয়া আপনার দাবির সমর্থন করে না (আমি উইকিপিডিয়া দাবি করছি না ঠিক যদিও, এবং আমার অ্যালজ থিরি বইটি কয়েকশ মাইল দূরে রয়েছে) তবে, বাস্তব জীবনের সময়ভিত্তিক বা গতি-ভিত্তিক রাউটিং সমস্যাগুলি রয়েছে নেতিবাচক প্রান্ত নেই, তাই আমি সাধারণত প্রয়োজনের উপর নির্ভর করে ডিজস্ক্রা বা ফ্লয়েড করি। যতদূর আমি মনে করি, বেশিরভাগ বাস্তব-জীবন-সংক্রান্ত কার্টোগ্রাফিকাল রাউটিং অ্যালগোসগুলি ডিজন্কট্রার আধুনিকীকরণের সংস্করণ ভিত্তিক, তবে আমি কেবল এটি আমার পূর্ববর্তী কর্মস্থলে পড়েছি এমন কিছু বৈজ্ঞানিক গবেষণাপত্র থেকে মনে করি।
আাদাম

@ আডাম: আমি ভুল। প্রত্যেক প্রান্তে পরিদর্শন এড়াতে ডিজকস্ট্র অ-নেতিবাচকতা কাজে লাগায়।
কেভিন ক্লাইন

হ্যাঁ, আপনি সঠিকভাবে বুঝতে পেরেছিলেন :) :)
সংঘুন লি

উত্তর:


3

আমি যদি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনার বোঝাটি সঠিক।

  • জিক্সট্রা গ্রাফের সোর্স নোড থেকে অন্যান্য নোডের সর্বনিম্ন ব্যয়ের পথ খুঁজে বেড়ায়, যদি সেখানে নেতিবাচক ওজনের প্রান্ত থাকে না। (টার্গেট নোডটি পাওয়া গেলে এবং হিউরিস্টিকস যুক্ত করার পরে কেবলমাত্র এটি বন্ধ করেই ডিজকস্ট্রা সহজেই এ * অ্যালগোরিদমে রূপান্তরিত হতে পারে))
  • বেলম্যান-ফোর্ড ডিজকস্ট্রার মতোই কাজ করে তবে ধীর। তবে এটি নেতিবাচক ওজনের প্রান্তগুলি পরিচালনা করতে পারে।
  • ফ্লয়েড-ওয়ারশাল প্রতিটি নোড থেকে অন্য নোডের সর্বনিম্ন ব্যয়ের পাথের ব্যয় খুঁজে পায়। (এটি একটি সংখ্যার ম্যাট্রিক্স প্রদান করে)) এটি জিক্স্ট্রা বা বেলম্যান-ফোর্ডের তুলনায় অনেক ধীর er আপনি যা লিখেছেন তার বিপরীতে, কোনও নেতিবাচক চক্র দেখা দিলে এটি ব্যর্থ হয় না, কেবল কিছু নোডের নিজের জন্য ব্যয় করার জন্য এটি অর্থহীন নেতিবাচক সংখ্যার প্রতিবেদন করে।

1
নাহ, ফ্লোয়েড-ওয়ারশাল কেবল পথের দৈর্ঘ্য নয়, জিক্সট্রা এবং বেলম্যান-ফোর্ডের মতো পাথগুলিও তাদের গুনতে পারে।
কনরাড রুডল্ফ

অবশ্যই, পরিবর্তন সঙ্গে।
সিজার বাউটিস্তা

3
আমি এখনও প্রথমটিকে ডিজজস্ট্রার হিসাবে বিবেচনা করব যদি এটি কোনও টার্গেট নোডে থামানো হয় তবে তাত্ত্বিকতা ব্যবহার করা হয়নি।
এলিয়ট বল

1
@ সিএসএ - ফ্লয়েড ওয়ারশাল হ'ল ও (এন is 3), সুতরাং এত বড় গ্রাফের জন্য প্রায় 10 ^ 300 অপারেশন প্রয়োজন হবে। প্রতিটি অপারেশন ধরে নিয়ে প্ল্যাঙ্কের সময় লাগে, যখন মহাবিশ্বে নিয়মিত পদার্থের সমস্ত প্রোটন ক্ষয় হয়ে যায় এবং কেবলমাত্র সুপারম্যাসিভ ব্ল্যাকহোলগুলি অবশিষ্ট থাকবে । আমি বিশ্বাস করি অভ্যন্তরীণ লুপের সমান্তরাল করা সম্ভব হতে পারে। যদি এটি সত্য হয় তবে সূর্যের ভর দিয়ে শুরু হওয়া সমস্ত ব্ল্যাক হোলগুলি বাষ্পীভূত হওয়ার আগে আপনি যথেষ্ট ভাগ্যবান হতে পারেন।
জুলাইস

1
(ধরে নিই যে আপনি প্রতিটি প্রসেসের তুলনায় কম অ্যাটম ব্যবহার করে একটি প্রসেসিং নোড তৈরি করতে পারেন, এবং পর্যবেক্ষণযোগ্য মহাবিশ্বের সমস্ত পরমাণু ব্যবহার করতে পারেন, এটিই ... তবে তারপরে আপনার ডেটা সংরক্ষণ করার জন্য সম্ভবত আপনার সকলের প্রয়োজন হবে)
জুলাই 22
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.