কম্পিউটার টিউটোরিয়াল

C++-এ দুটি স্ট্রিং-এর মধ্যতম এডিট দূরত্ব (Minimum Edit Distance) বের করার প্রোগ্রাম


সমস্যা বিবরণ

দুটি শব্দ S এবং T দেওয়া থাকলে, S-কে T-তে রূপান্তর করার জন্য ন্যূনতম অপারেশন সংখ্যা বের করতে হবে। অপারেশন তিন ধরনের: ক্যারেক্টার ইনসার্ট, ডিলিট, রিপ্লেস। এটাকে লেভেনস্টাইন দূরত্ব (Levenshtein Distance) বলা হয়।

উদাহরণ: "evaluate" → "fluctuate" = ৫ অপারেশন।

সমাধানের পদ্ধতি (ডাইনামিক প্রোগ্রামিং)

  1. n = s.size(), m = t.size()।
  2. dp[n+1][m+1] টেবিল তৈরি করুন।
  3. বেস কেস: dp[0][j] = j (j ইনসার্ট), dp[i][0] = i (i ডিলিট)।
  4. স্ট্রিংগুলোর শুরুতে স্পেস যোগ করুন (1-বেসড ইন্ডেক্স)۔
  5. i = 1 থেকে n, j = 1 থেকে m লুপ চালান:
    • যদি s[i] != t[j]: dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) (ডিলিট, ইনসার্ট, রিপ্লেস)
    • অন্যথায়: dp[i][j] = dp[i-1][j-1] (ম্যাচ, কোনো কস্ট নেই)
  6. dp[n][m] রিটার্ন করুন।

C++ কোড উদাহরণ

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int minDistance(string s, string t) {
        int n = s.size();
        int m = t.size();
        vector> dp(n + 1, vector(m + 1, 0));
        
        for (int i = 0; i <= n; i++) dp[i][0] = i;
        for (int j = 0; j <= m; j++) dp[0][j] = j;
        
        s = " " + s;
        t = " " + t;
        
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (s[i] != t[j]) {
                    dp[i][j] = 1 + min({dp[i-1][j], dp[i][j-1], dp[i-1][j-1]});
                } else {
                    dp[i][j] = dp[i-1][j-1];
                }
            }
        }
        return dp[n][m];
    }
};

int main() {
    Solution ob;
    cout << ob.minDistance("fluctuate", "evaluate");
    return 0;
}

ইনপুট ও আউটপুট

ইনপুট: "fluctuate", "evaluate"

আউটপুট: 5

জটিলতা

  • সময়: O(n × m)
  • স্থান: O(n × m) — دو সারি রেখে O(min(n,m)) করা সম্ভব
  1. C++-এ বাইনারি ট্রি-এ দুটি নোডের দূরত্ব নির্ণয়

  2. সি++-এ একটি রেখার মিড-পয়েন্ট বের করার প্রোগ্রাম

  3. সি++-এ ত্রিভুজের কেন্ড্রয়েড (Centroid) বের করার প্রোগ্রাম

  4. বাইনারি ট্রির দুটি নোডের মধ্যকার দূরত্ব বের করা C++-তে