উভয়ই ঠিক একই জেনেরিক অ্যালগরিদম ব্যবহার করে প্রয়োগ করা যেতে পারে:
Inputs:
G: Graph
s: Starting vertex (any for Prim, source for Dijkstra)
f: a function that takes vertices u and v, returns a number
Generic(G, s, f)
Q = Enqueue all V with key = infinity, parent = null
s.key = 0
While Q is not empty
u = dequeue Q
For each v in adj(u)
if v is in Q and v.key > f(u,v)
v.key = f(u,v)
v.parent = u
প্রাইম, পাস f = w(u, v)
এবং ডিজকস্ট্র পাসের জন্য f = u.key + w(u, v)
।
আর একটি মজার বিষয় হ'ল উপরের জেনেরিকও ব্রেথথ ফার্স্ট সার্চ (বিএফএস) বাস্তবায়ন করতে পারে যদিও এটি অতিরিক্ত পরিমাণে হবে কারণ ব্যয়বহুল অগ্রাধিকারের সারির সত্যিকার প্রয়োজন নেই। বিএফএসে জেনেরিক অ্যালগরিদমের উপরে ওঠার জন্য, f = u.key + 1
যা সমস্ত ওজন 1-এ প্রয়োগ করার সমান হয় (যেমন বিএফএস পয়েন্ট এ থেকে বিতে যাওয়ার জন্য ন্যূনতম সংখ্যার প্রান্ত দেয়)।
অন্তর্দৃষ্টি
জেনেরিক অ্যালগরিদমের উপরের দিকে চিন্তা করার জন্য এখানে একটি ভাল উপায়: আমরা দুটি বালতি 'এ' এবং 'বি' দিয়ে শুরু করি, আপনার সমস্ত সূচি বিতে রেখে দিন যাতে বালতি এ খালি থাকে। তারপরে আমরা বি থেকে একটি শীর্ষকে এক এ স্থানান্তরিত করলাম। এখন এ-এর শীর্ষে অবস্থিত সমস্ত প্রান্তগুলি দেখুন যা বি এর শীর্ষ প্রান্তগুলিকে অতিক্রম করে থাকে আমরা এই ক্রস-ওভার প্রান্তগুলি থেকে কিছু মানদণ্ড ব্যবহার করে একটি প্রান্তটি বেছে নিয়েছি এবং বি থেকে প্রান্তটি অনুসারে প্রান্তকে স্থানান্তরিত করেছি উ: খ খালি না হওয়া পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি করুন।
এই ধারণাটি বাস্তবায়নের জন্য একটি শক্তিশালী উপায় হ'ল এটি A এর শীর্ষ প্রান্তের জন্য প্রান্তের একটি অগ্রাধিকারের সারি বজায় রাখা যা বি পর্যন্ত ছাড়িয়ে যায় অবশ্যই স্পষ্টত গ্রাফটি বিচ্ছিন্ন না হলে সমস্যা হবে troubles তাহলে প্রশ্নটি হ'ল আমরা কি পরিবর্তে শীর্ষে সারির অগ্রাধিকার সারি বজায় রাখতে পারি? এটি বাস্তবে আমরা আমাদের সিদ্ধান্ত হিসাবে শেষ পর্যন্ত বি থেকে কোন শীর্ষটি বেছে নিতে পারি is
ঐতিহাসিক প্রেক্ষাপট
এটি আকর্ষণীয় যে উভয় অ্যালগরিদমের পিছনে কৌশলটির জেনেরিক সংস্করণটি 1930 সালের মতো ধারণা হিসাবে পুরানো, এমনকি ইলেকট্রনিক কম্পিউটারগুলি আশেপাশে ছিল না।
গল্পটি শুরু হয়েছে ওতাকার বোরেভকার সাথে, যিনি ন্যূনতম ব্যয়ের বৈদ্যুতিক লাইনের সাথে মোরাভিয়া (এখন চেক প্রজাতন্ত্রের অংশ) শহরের শহরগুলি কীভাবে সংযুক্ত করতে পারেন তা বোঝার চেষ্টা করার জন্য একটি পরিবারের বন্ধুটির জন্য একটি অ্যালগরিদম প্রয়োজন। তিনি ১৯৩26 সালে গণিত সম্পর্কিত জার্নালে তাঁর অ্যালগরিদম প্রকাশ করেছিলেন, কারণ কম্পিউটার বিজ্ঞান তখন ছিল না। এটি ভোটাচ জার্নাকের নজরে এসেছিল যিনি বোরিভকার আলগোরিদমটির উন্নতির কথা চিন্তা করেছিলেন এবং এটি ১৯৩০ সালে প্রকাশ করেছিলেন। বাস্তবে তিনি একই অ্যালগরিদম আবিষ্কার করেছিলেন যা আমরা এখন ১৯ Prim সালে প্রিমের অ্যালগরিদম হিসাবে জানি যা এটি পুনরায় আবিষ্কার করেছিল।
এই সমস্ত থেকে স্বাধীন, ১৯66 সালে তাঁর ইনস্টিটিউট যে নতুন কম্পিউটারের বিকাশ করেছিল তার দক্ষতা প্রদর্শনের জন্য ডিজকস্ট্রার একটি প্রোগ্রাম লেখার প্রয়োজন ছিল। তিনি ভেবেছিলেন যে নেদারল্যান্ডসের দুটি শহরের মধ্যে ভ্রমণের জন্য কম্পিউটারের সংযোগ পাওয়া ভাল হবে। তিনি 20 মিনিটের মধ্যে অ্যালগরিদমটি ডিজাইন করেছিলেন। তিনি কিছু সরলকরণের সাথে 64 টি শহরের গ্রাফ তৈরি করেছিলেন (কারণ তার কম্পিউটারটি 6-বিট ছিল) এবং এই 1956 কম্পিউটারের জন্য কোড লিখেছিল। তবে তিনি তাঁর অ্যালগরিদম প্রকাশ করেননি কারণ প্রাথমিকভাবে কম্পিউটার বিজ্ঞান জার্নাল ছিল না এবং তিনি মনে করেছিলেন এটি সম্ভবত খুব গুরুত্বপূর্ণ নয়। পরের বছর তিনি নতুন কম্পিউটারগুলির সংযোগের টার্মিনালগুলির সমস্যা সম্পর্কে জানলেন যে তারের দৈর্ঘ্য হ্রাস করা হয়েছিল। তিনি এই সমস্যাটি নিয়ে ভাবেন এবং জার্নাক / প্রাইমকে পুনরায় আবিষ্কার করেন ' s অ্যালগরিদম যা আবার একই কৌশলটি ব্যবহার করে যা তিনি এক বছর আগে আবিষ্কার করেছিলেন সবচেয়ে স্বল্পতম পথ অ্যালগরিদম হিসাবে। তিনিউল্লেখ করেছেন যে তাঁর দুটি অ্যালগরিদমই কলম বা কাগজ ব্যবহার না করেই তৈরি করা হয়েছিল। ১৯৫৯ সালে তিনি দু'টি অ্যালগরিদম একটি কাগজে প্রকাশ করেছিলেন যা মাত্র আড়াই পৃষ্ঠার দীর্ঘ।