> For the complete documentation index, see [llms.txt](https://phitron.gitbook.io/algorithm/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://phitron.gitbook.io/algorithm/dijkstra/_-dijkstra-naive-approach.md).

# মডিউল ৬\_৩ঃ Dijkstra Naive Approach

আমরা এখন Dijkstra এলগোরিদমের Naive ভারশনটা শিখব।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FNVuY6YCsjwFNxiw3raQj%2Fgraph%20(8).png?alt=media&amp;token=5863f138-57e3-4db9-a07c-3a5957d1f18e" alt=""><figcaption></figcaption></figure>

বিএফএস নিশ্চয়ই তুমি ভালো করে বুঝো।  বিএফএস এ আমাদের একটা নোডে কখনো দুইবার যাওয়া দরকার হয়নি, আমরা প্রতিবার দেখেছি একটা নোড ভিজিটেড কিনা, যদি ভিজিটেড না হয় তাহলে সেই নোডকে কিউতে পুশ করে দিয়েছি এবং ডিসটেন্স ১ বাড়িয়ে দিয়েছি। Dijkstra তে আমরা একই ভাবে কিউ তে নোড রাখবো তবে ভিজিটেড দিয়ে আপডেট না করে নতুন এজকে “রিল্যাক্স” বা আপডেট করবো।&#x20;

উপরের গ্রাফটাই খেয়াল করি। ধরি এখানে সোর্স নোড হচ্ছে ০ । এখন আমরা distance এ্যারে মেইন্টেইন করবো।

শুরুতে সোর্স নোড এর ডিস্টেন্স ০ ধরি ও বাকি সকল নোড এর ডিস্টেন্স infinite ধরি।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F1he72ib3FgZuCCzcmMVS%2FScreenshot%202024-01-28%20211459.png?alt=media&amp;token=80bc4ba8-b015-482c-bc7a-5872f4373f9e" alt=""><figcaption></figcaption></figure>

এবার একটি কিউ মেইনটেইন করব ও কিউ এর ফ্রন্ট এ সোর্স নোড ও তার কস্টকে ডিস্টেন্সকে পুশ করব।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FcU9o8BvVHWmYuAu8rTXl%2FScreenshot%202024-01-28%20212130.png?alt=media&amp;token=4e1338ae-3776-4e94-99a1-0bf20d11161a" alt=""><figcaption></figcaption></figure>

এবার কিউ এর ফ্রন্ট এলিমেন্ট অর্থাৎ ০ কে নিব ও পপ করে দিব। ০ থেকে যে সকল নোড এ যাওয়া যায় তাদের পাথ রিলেক্স করা যায় কিনা দেখব। যেমন ০ থেকে ১ এ যেতে,

dis\[0]+cost(0,1) = 0+5 = 5 < dis\[1]\(infinity)

তাই ১ এর নতুন distance কে distance array তে আপডেট করব আর ১ কে ও তার distance কে কিউতে পুশ করব।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FFbdsQjH1PIiq4yqzsY3Z%2FScreenshot%202024-01-28%20212634.png?alt=media&amp;token=0c08448a-da28-4de8-b9ef-9c79a97877db" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FHczVOTIoBf6vEbWwhf9n%2FScreenshot%202024-01-28%20212659.png?alt=media&amp;token=ba9d05f6-cb05-42e5-9f4f-c759a4f502d2" alt=""><figcaption></figcaption></figure>

০ থেকে ২ এও যাওয়া যায়।

dis\[0]+cost(0,2) = 0+2 = 2< dis\[2]\(infinity)

তাই ২ এর নতুন distance কে distance array তে আপডেট করব আর ২কে ও তার distance কে কিউতে পুশ করব।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FTh9AqUggLZJ6JPNV6ZFn%2FScreenshot%202024-01-28%20212953.png?alt=media&amp;token=e355de9d-f9c1-4c79-a9e1-7daa37e1a64b" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FGfm1L4EaAGWRlGjWfjSG%2FScreenshot%202024-01-28%20213013.png?alt=media&amp;token=98942f04-8c79-4bc2-b809-057c9f0356f3" alt=""><figcaption></figcaption></figure>

এখন কিউ এর ফ্রন্ট এলিমেন্টকে আবার নিব এবং তাকে পপ করে দিব। এখন সেটি হচ্ছে ১।১ থেকে যে সকল নোড এ যাওয়া যায় তাদের পাথ রিলেক্স করা যায় কিনা দেখব। ১ থেকে কোনো নোড এ যাওয়া যায় না। তাই এই স্টেপ এ কোনো আপডেট হবে না।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FTh9AqUggLZJ6JPNV6ZFn%2FScreenshot%202024-01-28%20212953.png?alt=media&amp;token=e355de9d-f9c1-4c79-a9e1-7daa37e1a64b" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FjP4DWDoitRDiImpC1YYh%2FScreenshot%202024-01-28%20213806.png?alt=media&amp;token=c9628977-2b5f-4177-b3de-1f87730c5071" alt=""><figcaption></figcaption></figure>

এবার কিউ এর ফ্রন্ট এলিমেন্ট অর্থাৎ ২ কে নিব ও পপ করে দিব। ২ থেকে যে সকল নোড এ যাওয়া যায় তাদের পাথ রিলেক্স করা যায় কিনা দেখব। যেমন ২ থেকে ৩এ যেতে,

dis\[2]+cost(2,3) = 2+3 = 5 < dis\[3]\(infinity)

তাই ৩ এর নতুন distance কে distance array তে আপডেট করব আর ৩ কে ও তার distance কে কিউতে পুশ করব।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FuDDBAXLfSYjWJKkZodRR%2FScreenshot%202024-01-28%20214156.png?alt=media&amp;token=ea084bf8-60d0-4919-93a0-53e58eb4eade" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FREXrUdYg63MtkdNKvaDa%2FScreenshot%202024-01-28%20214021.png?alt=media&amp;token=c71b0cbd-6f6d-47bd-92fe-76daf3a2e29b" alt=""><figcaption></figcaption></figure>

আবার ২ থেকে ১ এও যাওয়া যায়। ২থেকে ১ এ গেলে ১ এর পাথ রিল্যাক্স হবে কেননা

dis\[2]+cost(2,1)=2+1=3<5

তাই  ১ এর নতুন distance কে distance array তে আপডেট করব আর ৩ কে ও তার distance কে কিউতে পুশ করব।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F6mx6SB7qAhYGvrsBpQ43%2Fimage.png?alt=media&amp;token=948a15df-9da7-43ed-8741-c0a1ccf5ce79" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F2RrRjQQCpiJPPAYmgB2i%2Fimage.png?alt=media&amp;token=65924bbf-162b-4d35-a10d-d92a0db5cc1c" alt=""><figcaption></figcaption></figure>

এখন কিউ এর ফ্রন্ট এলিমেন্টকে আবার নিব এবং তাকে পপ করে দিব। এখন সেটি হচ্ছে ৩।৩ থেকে যে সকল নোড এ যাওয়া যায় তাদের পাথ রিলেক্স করা যায় কিনা দেখব। ৩ থেকে কোনো নোড এ যাওয়া যায় না। তাই এই স্টেপ এ কোনো আপডেট হবে না।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2Ffo3h8XO8oVXgDuRTKgyf%2Fimage.png?alt=media&amp;token=9b3b7129-22a1-409d-b321-91c3e93aa6e7" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FSdJeX8nL4Jjyl4YpHmja%2Fimage.png?alt=media&amp;token=fe2e4250-900e-49cd-bb79-42099a63deb2" alt=""><figcaption></figcaption></figure>

এখন কিউ এর ফ্রন্ট এলিমেন্টকে আবার নিব এবং তাকে পপ করে দিব। এখন সেটি হচ্ছে ১।১ থেকে যে সকল নোড এ যাওয়া যায় তাদের পাথ রিলেক্স করা যায় কিনা দেখব। ১ থেকে কোনো নোড এ যাওয়া যায় না। তাই এই স্টেপ এ কোনো আপডেট হবে না।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F34XrEKJtNKsvCQQjftL7%2Fimage.png?alt=media&amp;token=afa9dc0f-7b07-4511-8672-1e26d7436ea2" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F9oPz202Z1z641dLHmKcz%2Fimage.png?alt=media&amp;token=97994203-99ca-4f6c-96b3-ccbec83efc5a" alt=""><figcaption></figcaption></figure>

এখন যেহেতু কিউটা এম্পটি হয়ে গেছে তার মানে আমাদের কাজ শেষ । এবার যদি Distance এ্যারেটার দিকে তাকায় তাহলে বুঝব যে ০ থেকে প্রতিটা নোড এ যাওয়ার শর্টেস্ট ডিস্টেন্স আমরা পেয়ে গেছি।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F34XrEKJtNKsvCQQjftL7%2Fimage.png?alt=media&amp;token=afa9dc0f-7b07-4511-8672-1e26d7436ea2" alt=""><figcaption></figcaption></figure>
