オンライン文字列照合のためのWagnerおよびFisherアルゴリズムを実装するC++プログラム
このセクションでは、WagnerおよびFisherアルゴリズムを使用して2つの文字列を比較する方法を説明します。このアルゴリズムを使用すると、これらの文字列に一致するために必要な最小限の変更の数を見つけることができます。
これは動的計画法のアプローチです。ここでは、2本の弦からのレーベンシュタイン距離を測定します。
Input: Two strings “Support” & “Suppose” Output: Minimum number of required changes: 2
アルゴリズム
Wagnwe_Fisher(str1、str2)
入力 :2つの文字列str1とstr2
出力 :変更の最小数
l1 := length of str1, and l2 = length of str2
define a matrix d of order (l1 * l2)
fill first row of d with numbers from 0 to l1 – 1, and fill first column with numbers from 0 to l2- 1
for j in range 1 to l1, do
for i in range 1 to l2, do
if str1[i - 1] = str2[j - 1], then
tracker := 1
else
tracker := 0
temp := minimum of d[i – 1, j] + 1 and d[i, j-1] + 1
d[i, j] = minimum of temp and (d[i – 1, j - 1]+ tracker)
done
done
return d[l2, l1] サンプルコード
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int d[100][100];
int min(int a, int b) {
return (a < b) ? a : b;
}
int main() {
int i,j,str1_len,str2_len,temp,tracker;
string str1 = "Support";
string str2 = "Suppose";
str1_len = str1.length();
str2_len = str2.length();
for(i = 0; i <= str1_len;i++)
d[0][i] = i;
for(j = 0;j <= str2_len;j++)
d[j][0] = j;
for (j = 1;j <= str1_len; j++) {
for(i = 1;i <= str2_len;i++) {
if(str1[i-1] == str2[j-1]) {
tracker = 0;
} else {
tracker = 1;
}
temp = min((d[i-1][j]+1),(d[i][j-1]+1));
d[i][j] = min(temp,(d[i-1][j-1]+tracker));
}
}
cout << "The Levinstein distance " << d[str2_len][str1_len];
} 出力:
The Levinstein distance 2
-
C++での文字列変換のインプレースアルゴリズム
特定の文字列について、偶数に配置されたすべての要素を文字列の最後に転送します。要素を転送するときは、すべての偶数位置と奇数位置の要素の相対的な順序を同じに保ちます。 たとえば、指定された文字列が「a1b2c3d4e5f6g7h8i9j1k2l3m4」の場合、その文字列を「abcdefghijklm1234567891234」にインプレースでO(n)時間計算量に変換します。 次の手順は次のとおりです 3 ^ k + 1の形式のサイズの最も高いプレフィックスサブ文字列を切り取ります。このステップでは、3 ^ k + 1がn(文字列の長さ)以下になるように、最も高い非負の整数kを見つけます。
-
最適なページ置換アルゴリズムのためのC++プログラム
与えられたページ番号とページサイズ。タスクは、最適なページ置換アルゴリズムを使用してメモリブロックをページに割り当てるときのように、ヒットとミスの数を見つけることです。 最適なページ置換アルゴリズムとは何ですか? 最適なページ置換アルゴリズムは、ページ置換アルゴリズムです。ページ置換アルゴリズムは、どのメモリページを置換するかを決定するアルゴリズムです。最適なページ置換では、実際には実装できませんが、近い将来に参照されないページを置換しますが、これは最適であり、ミスが最小限であり、最適です。 例を使って図式的に説明して理解しましょう。 ここで、1、2、3を割り当てた後、メモリが