比较数组的函数太少了

时间:2019-01-30 01:01:58

标签: c++ arguments

我正在努力做功课。我试图以多种不同方式运行此代码。这是作业中的情景- 设计一个算法(使用伪代码),该算法将两个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; 
}

0 个答案:

没有答案