C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

レーベンシュタイン距離計算アルゴリズムを実装するためのC++プログラム


2つの文字列間のレーベンシュタイン距離は、編集操作で1つの文字列を別の文字列に変換するために必要な編集の最小数を意味します。単一文字の挿入、削除、または置換。

例: 猫とマットの間のレーベンシュタイン距離は1-

です
cat mat(substitution of ‘c’ with ‘m’)

これは、レーベンシュタイン距離計算アルゴリズムを実装するためのC++プログラムです。

アルゴリズム

Begin
   Take the strings as input and also find their length.
   For i = 0 to l1
      dist[0][i] = i
   For j = 0 to l2
      dist[j][0] = j
   For j=1 to l1
      For i=1 to l2
         if(s1[i-1] == s2[j-1])
            track= 0
         else
            track = 1
         done
         t = MIN((dist[i-1][j]+1),(dist[i][j-1]+1))
         dist[i][j] = MIN(t,(dist[i-1][j-1]+track))
      Done
   Done
   Print the Levinstein distance: dist[l2][l1]
End

#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
#define MIN(x,y) ((x) < (y) ? (x) : (y)) //calculate minimum between two values
int main() {
   int i,j,l1,l2,t,track;
   int dist[50][50];
   //take the strings as input
   char s1[] = "tutorials";
   char s2[] = "point";
   //stores the lenght of strings s1 and s2
   l1 = strlen(s1);
   l2= strlen(s2);
   for(i=0;i<=l1;i++) {
      dist[0][i] = i;
   }
   for(j=0;j<=l2;j++) {
      dist[j][0] = j;
   }
   for (j=1;j<=l1;j++) {
      for(i=1;i<=l2;i++) {
         if(s1[i-1] == s2[j-1]) {
            track= 0;
         } else {
            track = 1;
         }
         t = MIN((dist[i-1][j]+1),(dist[i][j-1]+1));
         dist[i][j] = MIN(t,(dist[i-1][j-1]+track));
      }
   }
   cout<<"The Levinstein distance is:"<<dist[l2][l1];
   return 0;
}

出力

The Levinstein distance is:8

  1. 補間検索アルゴリズムを実装するC++プログラム

    二分探索手法の場合、リストは等しい部分に分割されます。補間検索手法の場合、プロシージャは補間式を使用して正確な位置を見つけようとします。推定位置を見つけた後、その位置を使用してリストを分離できます。毎回正確な位置を見つけようとするため、検索時間が短縮されます。この手法では、アイテムが均一に分散されている場合、アイテムを簡単に見つけることができます。 補間検索手法の複雑さ 時間計算量:O(log 2 (log 2 n))平均的な場合、O(n)は最悪の場合(アイテムが指数関数的に分散される場合) スペースの複雑さ:O(1) Input − A sorted li

  2. 配列シャッフリング用のFisher-Yatesアルゴリズムを実装するC++プログラム

    Fisher-Yatesアルゴリズムは、配列要素のランダムな順列を生成します。つまり、配列のすべての要素をランダムにシャッフルします。フィッシャー-イェーツアルゴリズムは偏りがないため、配列のすべての順列は同じように発生する可能性があります。 C++で配列シャッフルするためのFisher-Yatesアルゴリズムを実装するプログラムは次のとおりです- 例 #include <iostream> #include <t;stdlib.h> using namespace std; int main() {    int n;