我正在努力做功课。我试图以多种不同方式运行此代码。这是作业中的情景- 设计一个算法(使用伪代码),该算法将两个2-D int数组作为输入,这些数组假定为2张黑白图像:尺寸为IxJ的initialImage x和尺寸为IxK的finalImage y。该算法将x与y逐行比较,如下所示。您的算法将采用动态编程方案将X与Y进行比较,从而确定每行之间的最小差异。
由于仅使用黑白图像,因此应假定每个图像都是一个由2个可能的值组成的2-int数组:0或1,其中0表示黑色,1表示白色。因此,该0和1值的2-D网格包括2-D黑白图像。然后,此图像的每一行就是一个填充有0或1的1-D int数组。因此,必须定义如何测量每行中0和1之间的字符串之差。
请记住,您将一次在图像中进行一行比较。
首先,将X1,*与Y1,进行比较。 (这里X1,是图像X中的第一行,Y1,*是图像Y中的第一行)。接下来,将X2与Y2进行比较...这些比较中的每一个都需要构造一个D(距离)矩阵。
在下面的示例中,X的第一行是X1 ,而Y的第一行是Y1 = 00110。 *对不起,图片无法加载,但它是两张桌子。首先是 X 1 2 3 4 5 Y 1 2 3 4 5 1 0 0 1 1 0 1 0 0 1 1 0 2 1 1 0 0 1 2 0 1 0 0 1 3 0 0 1 1 1 3 1 0 1 1 1
在完成D矩阵之后,最下面一行中的最小值是该行的最小不匹配。您需要将此值分配给变量minVali。该数字表明X1,*行与Y1,*行有何不同。然后,您将对所有行i重复此比较,并在完成后将差异汇总为变量totalDifference = Si minVali。
因此,该算法会将总差异与称为thresh的阈值进行比较。如果总值高于阈值,则声明图像不同;否则,它们被声明为相似图像。您可以假设thresh变量作为算法的输入提供。
// C++ implementation to find the uncommon
// characters of the two strings
#include <bits/stdc++.h>
using namespace std;
// size of the hash table
const int MAX_CHAR = 30;
// function to find the uncommon characters
// of the 6 strings
void findAndPrintUncommonChars(string str1, string str2, string str3, string str4, string str5, string str6)
{
// mark presence of each character as 0
// in the hash table 'present[]'
int present[MAX_CHAR];
for (int i=0; i<MAX_CHAR; i++)
present[i] = 0;
int l1 = str1.size();
int l2 = str2.size();
int l3 = str3.size();
int l4 = str4.size();
int l5 = str5.size();
int l6 = str6.size();
// for each character of str, mark its
// presence as 1 in 'present[]'
for (int i=0; i<l1; i++)
present[str1[i] - 'a'] = 1;
for (int i=0; i<l1; i++)
present[str2[i] - 'a'] = 1;
for (int i=0; i<l1; i++)
present[str3[i] - 'a'] = 1;
// for each character of str
for (int i=0; i<l4; i++)
for (int i=0; i<l5; i++)
for (int i=0; i<l6; i++)
{
// if a character of str2 is also present
// in str1, then mark its presence as -1
if (present[str4[i] - 'a'] == 1
|| present[str4[i] - 'a'] == -1)
present[str4[i] - 'a'] = -1;
else
present[str4[i] - 'a'] = 2;
if (present[str5[i] - 'a'] == 1
|| present[str5[i] - 'a'] == -1)
present[str5[i] - 'a'] = -1;
else
present[str5[i] - 'a'] = 2;
if (present[str6[i] - 'a'] == 1
|| present[str6[i] - 'a'] == -1)
present[str6[i] - 'a'] = -1;
else
present[str6[i] - 'a'] = 2;
}
// print all the uncommon characters
for (int i=0; i<MAX_CHAR; i++)
if (present[i] == 1 || present[i] == 2 )
cout << (char(i + 'a')) << " ";
}
// Driver program to test above
int main()
{
string str1 = {0, 0, 1, 0, 0};
string str2 = {1, 1, 0, 0, 1};
string str3 = {0, 0, 1, 1, 1};
string str4 = {0, 0, 1, 1, 0};
string str5 = {0, 1, 0, 0, 1};
string str6 = {1, 0, 1, 1, 1};
findAndPrintUncommonChars(str1, str4)
findAndPrintUncommonChars(str2, str5)
findAndPrintUncommonChars(str3, str6)
return 1;
}