IH.

Connect

November 28, 2024 · 10 min read

Dijkstra's Algorithm সহজ ভাষায় সবচেয়ে কম খরচের পথ কীভাবে খুঁজে বের করে?

বাস্তব জীবনের একটি উদাহরণের মাধ্যমে Dijkstra's Algorithm কীভাবে কাজ করে, Shortest Path কীভাবে বের করে এবং Graph Theory-তে এর গুরুত্ব সহজভাবে জানুন।

DSA Graph Theory Dijkstra Algorithms Python

Dijkstra’s Algorithm সহজ ভাষায়

Graph Theory শেখার সময় সবচেয়ে গুরুত্বপূর্ণ Algorithm-গুলোর একটি হলো Dijkstra’s Algorithm

অনেকের কাছেই Algorithm-টি প্রথমে বেশ কঠিন মনে হয়। কিন্তু যদি এটাকে বাস্তব জীবনের একটি উদাহরণের সাথে মিলিয়ে দেখা যায়, তাহলে বিষয়টি অনেক সহজ হয়ে যায়।

আজ আমি ঠিক সেই চেষ্টাই করবো।


উদাহরণ

কিছুদিন আগে জাদু PC নিয়ে একটি Event হয়েছিল।

ধরুন আপনি একজন Student।

আপনার Budget খুবই কম। ৩০–৪০ হাজার টাকা দিয়ে PC বানানোর মতো সামর্থ্য নেই। তাই ১০ হাজার টাকার Setup-এর কথা শুনে আপনিও Event-এ অংশগ্রহণ করার সিদ্ধান্ত নিলেন।

সমস্যা হলো—

  • Event হবে গুলশানে
  • আপনি থাকেন পুরান ঢাকা (লালবাগ)-এ
  • আপনার কাছে Smartphone-ও নেই, তাই Google Maps ব্যবহার করার সুযোগও নেই।

তাই Event-এর দিন আপনি সকাল সকাল বের হয়ে গেলেন এবং মানুষের কাছে রাস্তা জিজ্ঞেস করতে শুরু করলেন।

আপনার লক্ষ্য একটাই—

সবচেয়ে কম খরচে গুলশানে পৌঁছানো।


রাস্তার Map

নিচের Diagram-এ বিভিন্ন Location এবং তাদের মধ্যে যাতায়াতের ভাড়া দেখানো হয়েছে।

                 পুরান ঢাকা
                /          \
             ১০            ২০
              /              \
ঢাকা বিশ্ববিদ্যালয় ------- কাকরাইল
      |   \              /   \
    ১০    ২৫          ৫     ২০
      |       \        /       |
      |      মালিবাগ রেলগেট   |
      |            \      |     |
      |             \    ২০     ২৫
      |              \    |     |
      └────────────── মৌচাক ─────┘
                           |
                          ৩০
                           |
                        গুলশান

ছবির Graph (Image থেকে)

নিচের Diagram-টি Image অনুযায়ী Markdown আকারে উপস্থাপন করা হলো।

FromToCost
পুরান ঢাকাঢাকা বিশ্ববিদ্যালয়১০
পুরান ঢাকাকাকরাইল২০
ঢাকা বিশ্ববিদ্যালয়কাকরাইল১০
ঢাকা বিশ্ববিদ্যালয়মৌচাক২৫
কাকরাইলমৌচাক
কাকরাইলমালিবাগ রেলগেট১০
মৌচাকমালিবাগ রেলগেট০ (হেঁটে যাওয়া যায়)
মৌচাকগুলশান২৫
মালিবাগ রেলগেটগুলশান২০

Note: উপরের তথ্যগুলো আপনার দেওয়া Hand-drawn Diagram-এর ভিত্তিতে লেখা হয়েছে।


Step 1

আপনি শুরু করলেন পুরান ঢাকা থেকে।

দুটি রাস্তা আছে—

গন্তব্যভাড়া
ঢাকা বিশ্ববিদ্যালয়১০ টাকা
কাকরাইল২০ টাকা

যেহেতু আপনি সবচেয়ে কম খরচের পথ খুঁজছেন, তাই আপনি ঢাকা বিশ্ববিদ্যালয়-এ গেলেন।

এখন আপনি Mark করে রাখলেন—

  • ✅ পুরান ঢাকা
  • ✅ ঢাকা বিশ্ববিদ্যালয়

Step 2

এখন আপনি ঢাকা বিশ্ববিদ্যালয়ে।

এখান থেকে যাওয়া যায়—

গন্তব্যভাড়া
পুরান ঢাকা১০
কাকরাইল১০
মৌচাক২৫

পুরান ঢাকা আপনি ইতোমধ্যে Visit করেছেন।

তাই সেটি বাদ দিলেন।

এখন সবচেয়ে কম খরচের রাস্তা—

কাকরাইল (১০ টাকা)

আপনি সেখানে চলে গেলেন।


Step 3

এখন আপনি কাকরাইলে।

এখান থেকে যাওয়া যায়—

গন্তব্যভাড়া
পুরান ঢাকা২০
ঢাকা বিশ্ববিদ্যালয়১০
মৌচাক
মালিবাগ রেলগেট১০

পুরান ঢাকা এবং ঢাকা বিশ্ববিদ্যালয় আগেই Visit করা হয়েছে।

তাই বাকি রইলো—

  • মৌচাক (৫)
  • মালিবাগ রেলগেট (১০)

যেহেতু ৫ টাকা কম লাগে,

আপনি মৌচাক-এ চলে গেলেন।


Step 4

এখন আপনি মৌচাকে।

এখান থেকে যাওয়া যায়—

গন্তব্যভাড়া
ঢাকা বিশ্ববিদ্যালয়২৫
কাকরাইল
মালিবাগ রেলগেট০ (হেঁটে যাওয়া যায়)
গুলশান২৫

যেহেতু মালিবাগ রেলগেট একদম কাছেই এবং হেঁটে যাওয়া যায়,

আপনি ০ টাকা খরচে মালিবাগ রেলগেট চলে গেলেন।


Step 5

এখন আপনি মালিবাগ রেলগেটে।

এখান থেকে যাওয়া যায়—

গন্তব্যভাড়া
কাকরাইল১০
মৌচাক
গুলশান২০

কাকরাইল এবং মৌচাক আগে থেকেই Visit করা হয়েছে।

তাই একমাত্র নতুন রাস্তা—

গুলশান (২০ টাকা)

আপনি অবশেষে গুলশানে পৌঁছে গেলেন।


Shortest Path

অবশেষে আপনার পাওয়া সবচেয়ে কম খরচের পথ হলো—

পুরান ঢাকা

     ১০

ঢাকা বিশ্ববিদ্যালয়

     ১০

কাকরাইল



মৌচাক



মালিবাগ রেলগেট

     ২০

   গুলশান

মোট খরচ—

10 + 10 + 5 + 0 + 20 = 45 টাকা

এখান থেকে কী শিখলাম?

এতক্ষণে আপনি আসলে একটি গুরুত্বপূর্ণ বিষয় শিখেছেন।

প্রতিবার আপনি—

  • সবচেয়ে কম Cost-এর Node নির্বাচন করেছেন।
  • যেসব জায়গা আগে Visit করেছেন, সেগুলো আবার Visit করেননি।
  • প্রতিটি নতুন Node-এ পৌঁছে তার Neighbor-গুলো Compare করেছেন।
  • ধীরে ধীরে Destination পর্যন্ত সবচেয়ে কম খরচের পথ বের করেছেন।

এটাই মূলত Dijkstra’s Algorithm-এর মূল ধারণা।


Dijkstra’s Algorithm-এর মূল ধারণা

Algorithm-টি প্রতিবার—

  1. সবচেয়ে কম Distance-এর Unvisited Node নির্বাচন করে।
  2. সেটিকে Visited হিসেবে Mark করে।
  3. তার Neighbor-গুলোর Distance Update করে।
  4. সব Node Visit না হওয়া পর্যন্ত Process চালিয়ে যায়।

Time Complexity

ImplementationComplexity
Simple ArrayO(V²)
Priority Queue (Min Heap)O((V + E) log V)

Python Implementation

নিচে Dijkstra’s Algorithm-এর একটি সাধারণ Python Implementation দেওয়া হলো।

import sys

vertices = [
    [0, 0, 1, 1, 0, 0, 0],
    [0, 0, 1, 0, 0, 1, 0],
    [1, 1, 0, 1, 1, 0, 0],
    [1, 0, 1, 0, 0, 0, 1],
    [0, 0, 1, 0, 0, 1, 0],
    [0, 1, 0, 0, 1, 0, 1],
    [0, 0, 0, 1, 0, 1, 0]
]

edges = [
    [0, 0, 1, 2, 0, 0, 0],
    [0, 0, 2, 0, 0, 3, 0],
    [1, 2, 0, 1, 3, 0, 0],
    [2, 0, 1, 0, 0, 0, 1],
    [0, 0, 3, 0, 0, 2, 0],
    [0, 3, 0, 0, 2, 0, 1],
    [0, 0, 0, 1, 0, 1, 0]
]

def to_be_visited():
    global visited_and_distance
    v = -1
    for index in range(num_of_vertices):
        if visited_and_distance[index][0] == 0 and (
            v < 0 or visited_and_distance[index][1] <= visited_and_distance[v][1]
        ):
            v = index
    return v

num_of_vertices = len(vertices[0])

visited_and_distance = [[0, 0]]

for _ in range(num_of_vertices - 1):
    visited_and_distance.append([0, sys.maxsize])

for _ in range(num_of_vertices):
    to_visit = to_be_visited()

    for neighbor_index in range(num_of_vertices):
        if (
            vertices[to_visit][neighbor_index] == 1
            and visited_and_distance[neighbor_index][0] == 0
        ):
            new_distance = (
                visited_and_distance[to_visit][1]
                + edges[to_visit][neighbor_index]
            )

            if visited_and_distance[neighbor_index][1] > new_distance:
                visited_and_distance[neighbor_index][1] = new_distance

    visited_and_distance[to_visit][0] = 1

for i, distance in enumerate(visited_and_distance):
    print(
        f"Distance of {chr(ord('A') + i)} from source vertex: {distance[1]}"
    )

উপসংহার

Dijkstra’s Algorithm প্রথম দেখায় কিছুটা জটিল মনে হলেও, বাস্তবে এটি খুবই স্বাভাবিক একটি ধারণার উপর কাজ করে—প্রতিবার সবচেয়ে কম খরচের পথটি বেছে নিয়ে ধীরে ধীরে Destination-এর দিকে এগিয়ে যাওয়া।

Google Maps, Ride Sharing App, GPS Navigation, Network Routing এবং অসংখ্য Real-world System-এ এই Algorithm বা এর উন্নত সংস্করণ ব্যবহার করা হয়।

Graph Theory শেখার ক্ষেত্রে Dijkstra’s Algorithm একটি মৌলিক এবং অত্যন্ত গুরুত্বপূর্ণ বিষয়। এর মূল ধারণাটি একবার পরিষ্কার হয়ে গেলে পরবর্তীতে Shortest Path সম্পর্কিত আরও অনেক Algorithm শেখা অনেক সহজ হয়ে যায়।