Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में दो स्ट्रिंग्स के बीच न्यूनतम संपादन दूरी खोजने का कार्यक्रम

मान लीजिए कि हमारे पास दो शब्द S और T हैं, तो हमें S से T में बदलने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या ज्ञात करनी होगी। ऑपरेशन तीन प्रकार के हो सकते हैं, ये हैं

  • एक चरित्र डालें,
  • एक चरित्र हटाएं
  • एक चरित्र बदलें।

इसलिए यदि इनपुट स्ट्रिंग्स "मूल्यांकन" और "उतार-चढ़ाव" हैं, तो परिणाम 5 होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • n :=s का आकार, m :=t का आकार,

  • n + 1

    आकार का एक सरणी dp बनाएँ
  • मेरे लिए 0 से n की सीमा में

    • dp[i] :=आकार की नई सरणी m + 1

    • j के लिए 0 से m की सीमा में:

      • डीपी [आई, जे]:=0

      • अगर मैं =0, तो डीपी [i, जे] =जे

      • अन्यथा जब j =0, तब dp[i, j] :=i

  • s:=रिक्त स्थान और संयोजन s, t:=रिक्त स्थान और संयोजन t

  • मैं के लिए 1 से n की सीमा में

    • j के लिए 1 से m की सीमा में

      • यदि s[i] t[j] नहीं है, तो dp[i, j] :=1 + min of dp[i-1, j], dp[i, j-1], dp[i-1, j - 1]

      • अन्यथा dp[i, j] :=dp[i – 1, j – 1]

  • वापसी डीपी [एन, एम]

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int minDistance(string s, string t) {
      int n = s.size();
      int m =t.size();
      int** dp = new int*[n+1];
      for(int i =0;i<=n;i++){
         dp[i] = new int[m+1];
         for(int j=0;j<=m;j++){
            dp[i][j]=0;
            if(i==0)dp[i][j]=j;
            else if(j==0)dp[i][j] = i;
         }
      }
      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];
   }
};
main(){
   Solution ob;
   cout << (ob.minDistance("fluctuate", "evaluate"));
}

इनपुट

"fluctuate"
"evaluate"

आउटपुट

5

  1. C++ में एक लाइन के मध्य-बिंदु को खोजने का प्रोग्राम

    इस समस्या में, हमें दो बिंदु A और B दिए गए हैं, जो एक रेखा के आरंभ और अंत बिंदु हैं। हमारा काम C++ में एक लाइन के मध्य-बिंदु को खोजने के लिए एक प्रोग्राम बनाना है। समस्या का विवरण - यहाँ, हमारे पास एक रेखा है जिसमें शुरुआती और अंत बिंदु A(x1, y1) और B(x2, y2) हैं। और हमें रेखा के मध्य-बिंदु को खोजन

  1. C++ में त्रिभुज के केंद्रक को खोजने का कार्यक्रम

    इस समस्या में, हमें एक 2D सरणी दी गई है जो त्रिभुज के तीन शीर्षों के निर्देशांकों को दर्शाती है। हमारा काम C++ में त्रिभुज के Centroid को खोजने के लिए एक प्रोग्राम बनाना है। सेंट्रोइड त्रिभुज का वह बिंदु है जिस पर त्रिभुज की तीन माध्यिकाएं प्रतिच्छेद करती हैं। माध्यिका त्रिभुज की वह रेखा है जो त्र

  1. C++ में एक बाइनरी ट्री के दो नोड्स के बीच की दूरी का पता लगाएं

    मान लें कि हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें दो नोड्स u और v के बीच की दूरी ज्ञात करनी है। मान लीजिए कि पेड़ नीचे जैसा है - अब (4, 6) =4 के बीच की दूरी, पथ की लंबाई 4 है, (5, 8) के बीच की लंबाई =5 आदि। इस समस्या को हल करने के लिए, हम एलसीए (सबसे कम सामान्य पूर्वज) ढूंढेंगे, फिर