moved F from stack to heap in sequential to avoid seg faults due to large array
git-svn-id: svn://anubis/gvsu@180 45c1a28c-8058-47b2-ae61-ca45b979098e
This commit is contained in:
parent
ab4c97e4e1
commit
8182bdd1b1
@ -62,36 +62,37 @@ void similarityMatrix(vector<char> & s, vector<char> & t)
|
|||||||
{
|
{
|
||||||
int s_size = s.size();
|
int s_size = s.size();
|
||||||
int t_size = t.size();
|
int t_size = t.size();
|
||||||
int F[s_size+1][t_size+1];
|
int (*F)[s_size+1][t_size+1] =
|
||||||
|
(int (*)[s_size+1][t_size+1]) new int[(s_size+1) * (t_size+1)];
|
||||||
int max_x = 0, max_y = 0, max_val = 0;
|
int max_x = 0, max_y = 0, max_val = 0;
|
||||||
for (int i = 0; i <= t_size; i++) /* set first row to 0's */
|
for (int i = 0; i <= t_size; i++) /* set first row to 0's */
|
||||||
F[0][i] = 0;
|
(*F)[0][i] = 0;
|
||||||
for (int i = 0; i <= s_size; i++) /* set first column to 0's */
|
for (int i = 0; i <= s_size; i++) /* set first column to 0's */
|
||||||
F[i][0] = 0;
|
(*F)[i][0] = 0;
|
||||||
for (int i = 1; i <= s_size; i++)
|
for (int i = 1; i <= s_size; i++)
|
||||||
{
|
{
|
||||||
for (int j = 1; j <= t_size; j++)
|
for (int j = 1; j <= t_size; j++)
|
||||||
{
|
{
|
||||||
/* Compute the value for the matrix */
|
/* Compute the value for the matrix */
|
||||||
F[i][j] =
|
(*F)[i][j] =
|
||||||
max(
|
max(
|
||||||
max(
|
max(
|
||||||
F[i][j-1] - 2,
|
(*F)[i][j-1] - 2,
|
||||||
F[i-1][j-1] + (eq(s[i-1], t[j-1]) ? 1 : -1)
|
(*F)[i-1][j-1] + (eq(s[i-1], t[j-1]) ? 1 : -1)
|
||||||
),
|
),
|
||||||
max(
|
max(
|
||||||
F[i-1][j] - 2,
|
(*F)[i-1][j] - 2,
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
/* See if we found a new maximum value */
|
/* See if we found a new maximum value */
|
||||||
if (F[i][j] > max_val)
|
if ((*F)[i][j] > max_val)
|
||||||
{
|
{
|
||||||
max_val = F[i][j];
|
max_val = (*F)[i][j];
|
||||||
max_x = i;
|
max_x = i;
|
||||||
max_y = j;
|
max_y = j;
|
||||||
}
|
}
|
||||||
else if (F[i][j] == max_val)
|
else if ((*F)[i][j] == max_val)
|
||||||
{
|
{
|
||||||
/* If we found a value the same as our current maximum
|
/* If we found a value the same as our current maximum
|
||||||
* value, see if it has a greater i+j value */
|
* value, see if it has a greater i+j value */
|
||||||
@ -116,4 +117,5 @@ void similarityMatrix(vector<char> & s, vector<char> & t)
|
|||||||
#endif
|
#endif
|
||||||
cout << "Maximum value is " << max_val << " at position ("
|
cout << "Maximum value is " << max_val << " at position ("
|
||||||
<< max_x << ", " << max_y << ")" << endl;
|
<< max_x << ", " << max_y << ")" << endl;
|
||||||
|
delete[] F;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user