gvsu/cs677/pa2/sequential.cc
josh e85aa39946 finished filling out similarity matrix
git-svn-id: svn://anubis/gvsu@164 45c1a28c-8058-47b2-ae61-ca45b979098e
2008-09-20 16:27:19 +00:00

82 lines
1.7 KiB
C++

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void usage(char * prog);
void similarityMatrix(vector<char> & s, vector<char> & t);
bool readFile(char * fileName, vector<char> & v);
void usage(char * prog)
{
cout << "Usage: " << prog << " <file1> <file2>" << endl;
exit(42);
}
int main(int argc, char * argv[])
{
vector<char> file1, file2;
if (argc < 3)
usage(argv[0]);
readFile(argv[1], file1);
readFile(argv[2], file2);
similarityMatrix(file1, file2);
}
bool readFile(char * fileName, vector<char> & v)
{
ifstream in(fileName);
if (!in.is_open())
return false;
while (!in.eof())
{
char chr;
in >> chr;
v.push_back(chr);
}
return true;
}
void similarityMatrix(vector<char> & s, vector<char> & t)
{
int s_size = s.size();
int t_size = t.size();
int F[s_size][t_size];
for (int i = 0; i < t_size; i++)
F[0][i] = 0;
for (int i = 0; i < s_size; i++)
F[i][0] = 0;
for (int i = 1; i < s_size; i++)
{
for (int j = 1; j < t_size; j++)
{
F[i][j] =
max(
max(
F[i][j-1] - 2,
F[i-1][j-1] + (s[i] == t[j] ? 1 : -1)
),
max(
F[i-1][j] - 2,
0
)
);
}
}
#if 0
cout << "Matrix: " << s_size << " x " << t_size << endl;
for (int i = 0; i < s_size; i++)
{
for (int j = 0; j < t_size; j++)
{
printf("%02d ", F[i][j]);
}
printf("\n");
}
#endif
}