Dynamic Levenshtein
Previously, I had looked at calculating the Levenshtein distance between two strings. In that post I did some hand waving and claimed that the dynamic implementation will not register with the time command. Well I decided to test that claim and here is the proof.
#include <iostream>
#include <string>
using namespace std;
int minimum(int d, int i, int s);
int main(){
string s, t;
cin >> s >> t;
int sl = s.length()+1;
int tl = t.length()+1;
int* previous = new int[sl];
int* current = new int[sl];
//initialize current
for(int j=0; j<sl; ++j) *(current+j) = j;
for(int j=1; j<tl; ++j){
//Swap current and previous
int* tmp = previous;
previous = current;
current = tmp;
*(current) = j;
for(int k=1; k<sl; ++k){
if(s.at(k-1) == t.at(j-1)) *(current+k) = *(previous+k-1);
else{
*(current+k) = minimum(*(previous+k),*(current+k-1),*(previous+k-1))+1;
}
}
}
cout << *(current+sl-1) << endl;
return 0;
}
int minimum(int d, int i, int s){
int min = d;
if(i < min) min = i;
if(s < min) min = s;
return min;
}