Пример #1
0
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   <Diff analysis algoritms>   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
/// Método que analiza os 2 ficheiros actualziando as estruturas auxiliares necessárias para fazer o output da diferença entre eles
void Diff::analyzeFiles() {
    findCorrespondentLines();

    for (size_t lineIndex = 0; lineIndex < originalFileLinesStatus.size(); ++lineIndex) {
        LCS lcs;
        string LCSFound;

        if (originalFileLinesStatus[lineIndex].getLinesStatus() == LINE_MODIFIED) {
            lcs = LCS(originalFileData[lineIndex], modifiedFileData[lineIndex]);
            LCSFound = lcs.findLCS();
        }

        if (originalFileLinesStatus[lineIndex].getLinesStatus() == LINE_MOVED_AND_MODIFIED) {
            lcs = LCS(originalFileData[lineIndex], modifiedFileData[originalFileMovedLinesIndexsInModifiedFile[lineIndex]]);
            LCSFound = lcs.findLCS();
        }

        if (LCSFound.empty())
            continue;

        //update aos infos dos chars da linha do ficheiro original
        size_t currentPosOnLCS = 0;
        vector <bool> lineCharsChangedOnOriginalFile(originalFileData[lineIndex].size(), true);
        for (size_t charIndex = 0; charIndex < originalFileData[lineIndex].size(); ++charIndex) {
            if (currentPosOnLCS < LCSFound.size()) {
                if (LCSFound[currentPosOnLCS] == originalFileData[lineIndex][charIndex]) {
                    lineCharsChangedOnOriginalFile[charIndex] = false;
                    ++currentPosOnLCS;
                }
            } else {
                break;
            }
        }

        originalFileLinesStatus[lineIndex].setLineCharsChangedOnOriginalFile(lineCharsChangedOnOriginalFile);



        //update aos infos dos chars da linha do ficheiro modificado
        currentPosOnLCS = 0;
        int indexOfOriginalLineOnModifiedFile = originalFileMovedLinesIndexsInModifiedFile[lineIndex];
        vector <bool> lineCharsChangedOnModifiedFile(modifiedFileData[indexOfOriginalLineOnModifiedFile].size(), true);
        for (size_t charIndex = 0; charIndex < modifiedFileData[indexOfOriginalLineOnModifiedFile].size(); ++charIndex) {
            if (currentPosOnLCS < LCSFound.size()) {
                if (LCSFound[currentPosOnLCS] == modifiedFileData[indexOfOriginalLineOnModifiedFile][charIndex]) {
                    lineCharsChangedOnModifiedFile[charIndex] = false;
                    ++currentPosOnLCS;
                }
            } else {
                break;
            }
        }

        originalFileLinesStatus[lineIndex].setLineCharsChangedOnModifiedFile(lineCharsChangedOnModifiedFile);


    }
}
Пример #2
0
int LCS( char *X, char *Y, int i, int j) {
	if(i < 0 || j < 0) {
		return 0;
	}
	else if(X[i] == Y[j]) {
		return 1 + LCS(X, Y, i - 1, j - 1);
	}
	else
		return MAX(LCS(X, Y, i-1, j), LCS(X, Y, i, j-1));
}
Пример #3
0
int LCS(char *stra,char *strb,int m,int n){
    if(m==0 || n==0){
        return 0;
    }
    if(stra[m-1] == strb[n-1]){
        return 1+LCS(stra,strb,m-1,n-1);
    }
        return MAX(LCS(stra,strb,m-1,n),LCS(stra,strb,m,n-1));
    
}
Пример #4
0
int LCS(char *s1, char *s2, int i, int j)
{
    int c;
    if(i == 0 || j == 0) return 0;
    if(s1[i] == s2[j]) {
        c = LCS(s1, s2, i-1, j-1) + 1;
    } else {
        int c1 = LCS(s1, s2, i-1, j);
        int c2 = LCS(s1, s2, i, j-1);
        c = max(c1, c2); 
    }
    return c;
}
Пример #5
0
int main() {

    char* a = "AGGACAT";
    char* b = "ATTACGAT";
    printf("first test returns %i, should be 5 \n", LCS(a,b));

    a = "AAGCTTAAGAAGCCTTCAACAGG";
    b = "GGGTTTGGCATGTCCTTGACCAT";
    printf("second test returns %i, should be 14 \n", LCS(a,b));

    a = "ATCTGTGGTGGAAAGGCTAACATACC";
    b = "CAAGAAATGTTAACTCAGAGTTGT";
    printf("third test returns %i, should be 12 \n", LCS(a,b));

}
Пример #6
0
int main(int argc, const char *argv[]){
	int i=strlen(argv[1]),j=strlen(argv[2]);
	int lcs_length, k, l;

	temp = (int**)malloc(sizeof(int*)*(i+1));
	for(k=0;k<=i;k++){
		*(temp+k) = (int*)malloc(sizeof(int)*(j+1));
		for(l=0;l<=k;l++){
			temp[k][l] = 0xffffffff;
		}
	}


	lcs_length = LCS(argv[1],argv[2],i,j);
	printf("A: %s\nB: %s\n\n",argv[1],argv[2]);
	printf("LCS Lenght is %d\n\n",lcs_length);

	for(l=0;l<=j;l++){
		for(k=0;k<=i;k++){
			printf("%d	",temp[k][l]);
		}
		printf("\n");
	}

	for(k=0;k<i;k++){
		free(*(temp+k));
	}
	free(temp);
}
Пример #7
0
Файл: lcs.c Проект: ckelkar/DAA
void main(int argc,char *argv[]){

int *first_length_pointer,*second_length_pointer; //pointers to the lengths of arrays
int **LCSarray; //stores lengths of the subsequences
int i;
char *firststring,*secondstring; //input strings
int firststring_length=0;
int secondstring_length=0;
first_length_pointer=&firststring_length;
second_length_pointer=&secondstring_length;
	if(argc!=2){
	printf("\nInvalid Arguments");
	exit(0);
	}
calculate_lengths(argv[1],&firststring_length,&secondstring_length);
firststring_length=*first_length_pointer;
secondstring_length=*second_length_pointer;
firststring=createarray(firststring_length); //allocates memory for first input string
secondstring=createarray(secondstring_length);//allocates memory for second input string
populatearray(firststring,secondstring,argv[1]);
LCSarray=createLCSarray(firststring_length,secondstring_length); //creates LCSmatrix
LCS(firststring_length,secondstring_length,LCSarray,firststring,secondstring);

free(LCSarray);

}
int main()
{
    char* XArray = " ABCBDAB";
    char* YArray = " BDCABA";
    int XLength = strlen(XArray);
    int YLength = strlen(YArray);
    int **MaxLenghtMetrix = (int **)malloc(XLength*sizeof(int *));
    int i;
    for(i = 0; i < XLength; ++i)
    {
        MaxLenghtMetrix[i] = (int *)malloc(YLength*sizeof(int));
    }
    int **SolvedNumberMetrix = (int **)malloc(XLength*sizeof(int *));
    for(i = 0; i < XLength; ++i)
    {
        SolvedNumberMetrix[i] = (int *)malloc(YLength*sizeof(int));
    }
    LCSLength(XLength-1,YLength-1, XArray, YArray,
               MaxLenghtMetrix, SolvedNumberMetrix);
    printf("================\n");
    printf("MaxLenghtMetrix:\n");
    print_array(MaxLenghtMetrix,XLength,YLength);
    printf("================\n");
    printf("SolvedNumberMetrix:\n");
    print_array(SolvedNumberMetrix,XLength,YLength);
    LCS(XLength-1,YLength-1,XArray,SolvedNumberMetrix);
    return 0;
}
int main (int argc, char const *argv[])
{
	int i, j;
	char X[] = "ABCBDAB";
	char Y[] = "BDCABA";
	printf("%d\n", LCS(X, Y, strlen(X) - 1, strlen(Y) - 1));
	
	// generating the actual subsequence using DP array. 
	i = 0 ;
	for(j = 0; j < strlen(Y);) {
		if(X[i] == Y[j]) {
			printf("%c", X[i]);
			i++;
			j++;
		}
		else{
			if(DP[i+1][j] > DP[i][j+1]) {
				i++;
			}
			else
				j++;
		}
	}
	printf("\n");
	return 0;
}
Пример #10
0
int main(int argc, char** argv)
{
	char X[] = "ABCDGH";
	char Y[] = "AEDFHR";

	int i = 0;
	int m = strlen(X);
	int n = strlen(Y);

	L = (int**) malloc(m * sizeof(int*));

	for (i = 0; i < m; i++)
	{
		L[i] = (int*) malloc(n * sizeof(int));
	}

	printf("Length of LCS is %d\n", LCS( X, Y, m, n ) );

	for (i = 0; i < m; i++)
	{
		free(L[i]);
	}

	free(L);
}
Пример #11
0
int main (int argc, char const *argv[])
{
	char X[] = "ABCBDAB";
	char Y[] = "BDCABA";
	
	printf("%d", LCS(X, Y, strlen(X) - 1, strlen(Y) - 1));
	return 0;
}
Пример #12
0
int main (int argc, char const *argv[])
{
	char X[] = "WRWWLWWLWWLWLWRRWRWWWRWWRWLW";
	char Y[] = "WWRRWLWLWWLWWLWWRWWRWWLW";
	
	printf("%d", LCS(X, strrev(Y), strlen(X) - 1, strlen(Y) - 1));
	return 0;
}
Пример #13
0
int main(void) 
{
	char* ptr1 = "abcde";
	char* ptr2 = "acde";
	LCS(ptr1, ptr2);
	printf("\n");

	return 0;
}
Пример #14
0
int main(void)
{
  char a[7] = {'a', 'b', 'c', 'b', 'd', 'a', 'b'};
  char b[7] = {'b', 'd', 'c', 'a', 'b', 'a'};
  int res[7][7];
  LCS(a, b, 7, 7, res);
  printf("%d\n", res[6][6]);
  return 0;
}
Пример #15
0
int main(int argc, char** argv) {
  int num;
  scanf("%d",&num);
  while(num--){
    scanf("%s",s1);
    scanf("%s",s2);
    printf("%d\n",LCS());
  }
  return 0;
}
Пример #16
0
int main()
{
    ifstream cin("input.txt");
    cin>>s1>>s2; l1=strlen(s1); l2=strlen(s2);
    int i1,i2,i,l = LCS(s1,l1,s2,l2,i1,i2);
    cout<<l<<" "<<i1<<" "<<i2<<endl;
    for(i=0;i<l;i++) cout<<s1[i1+i]; cout<<endl;
    for(i=0;i<l;i++) cout<<s2[i2+i]; cout<<endl;    
    return 0;
}
Пример #17
0
int main(void){
    char *s1,*s2;
    s1 = (char*)calloc(sizeof(char), MAX);
    s2 = (char*)calloc(sizeof(char), MAX);
    scanf("%s%s",s1,s2);
    printf("%d",LCS(s1,s2));
    free(s1);
    free(s2);
    return 0;
}
Пример #18
0
int main()
{
    char str1[] = "BDCABA";
    char str2[] = "ABCBDAB";
    
    LCS(str1, strlen(str1), str2, strlen(str2));
    
	getchar();
    return 0;
}
void LCS(int i,int j,char *XArray,int **SolvedNumberMetrix)
{
    if(i == 0|| j == 0)
    {
        return ;
    }
    if(SolvedNumberMetrix[i][j] == 1)
    {
        LCS(i-1,j-1,XArray,SolvedNumberMetrix);
        printf("%c",XArray[i]);
    }
    else if(SolvedNumberMetrix[i][j] == 2)
    {
        LCS(i-1,j,XArray,SolvedNumberMetrix);
    }
    else
    {
        LCS(i,j-1,XArray,SolvedNumberMetrix);
    }
}
Пример #20
0
static float similarity_detect(hashtable *htab, char **str1, int n, char **str2, int m, int sim_algo)
{
	uint32_t lcs_len = 0;
	hash_for_each_do(htab, hash_callback);
	if (sim_algo == LCS_YES) {
		lcs_len = LCS(str1, n, str2, m, htab);
		return lcs_len * 2.0 / sim_union;
	} else { /* LCS_NOT */
		return sim_intersect * 2.0 / sim_union;
	}
}
Пример #21
0
int main()
{
    char A[1000], B[1000];
    while (scanf("%s%s", A, B) > 0)
    {
        int n = strlen(A);
        int m = strlen(B);
        printf("%d\n", LCS(A, B, n, m));
    }
    return 0;
}
Пример #22
0
void main()
{
	freopen("in.txt", "r", stdin);
	while(gets(s1))
	{
		gets(s2);
		init();
		LCS();
		dfs(m, n);
		putchar('\n');
	}
}
Пример #23
0
main()
{  
    char a[]="AGGTAB";
    char b[]="GXTXAYB";
    
    int m = strlen(a);
    int n = strlen(b);
 
    printf("%d",m);
    printf("%d",n);
    printf("\n\nLongest common string is: %d",LCS(a,b,m,n)); 
  
}
Пример #24
0
int main(){
	int i, j;
	while(gets(str1) && gets(str2)){
		len1=strlen(str1);
		len2=strlen(str2);
		for(i=0; i<len1; i++)
			for(j=0; j<len2; j++)
				memo[i][j]=-1;
		int res=LCS(0,0);
		printf("%d\n",res);
	}
	return 0;
}
Пример #25
0
int LCS(const char* x, const char* y, int i, int j){
	int a, b;
	if(temp[i][j]<0){
		if(i==0 || j==0){
			temp[i][j] = 0;
		}
		else if(x[i-1]==y[j-1]){
			temp[i][j] = LCS(x,y,i-1,j-1)+1;
		}
		else{
			a=LCS(x,y,i-1,j);
			b=LCS(x,y,i,j-1);
			if(a>=b){
				temp[i][j] = a;
			}
			else{
				temp[i][j] = b;
			}
		}
	}

	return temp[i][j];
}
Пример #26
0
std::vector < std::vector<size_t>> slowSuffPrefLCS(const std::string& str1, const std::string& str2)
{
	std::vector<std::vector<size_t>> res;
	res.resize(str1.size());
	for (size_t i = 0; i < res.size(); ++i)
	{
		res[i].resize(str2.size());
		for (size_t j = 0; j < res[i].size(); ++j)
		{
			res[i][j] = LCS(str1.substr(i), str2.substr(0, j + 1));
		}
	}
	return res;
}
Пример #27
0
int main()
{   int d;
    char a[2010],b[2010];
    int i,j,k,temp,temp1,coun,ma;

    while(scanf("%s",&a)!=EOF&&scanf("%s",&b)!=EOF) {
        i=strlen(a);
        j=strlen(b);
        coun=LCS(a,b,i,j);
        printf("%d\n",coun);
    }


}
Пример #28
0
    int minDistance1(string word1, string word2) 
	{
        int m = word1.size();
		int n = word2.size();
		if (word2.empty())
			return m;
		if (word1.empty())
			return n;
		int lcs = LCS(word1, m, word2, n);
		if (m <= n) {
			return n - lcs;
		} else {
			return m - lcs;
		}
    }
Пример #29
0
int main(int argc, const char* argv[])
{
    Type A, B;
    int i = 5000;
    printf("Input string A:\n");
    A = (Type)malloc(sizeof(char) * i);
    scanf("%s", A);
    printf("Input string B:\n");
    B = (Type)malloc(sizeof(char) * i);
    scanf("%s", B);
    
    LCS(A, strlen(A), B, strlen(B));
    
    return 0;
}
int main()
{
	char *query = (char*)malloc(sizeof(char)*MAXNUM);
	char *text = (char*)malloc(sizeof(char)*MAXNUM);
	printf("请输入query:");
	gets(query);
	printf("请输入text:");
	gets(text);
	//char query[] = "ABCBDAB";
	//char text[] = "BDCABA";
	int query_len = 0, text_len = 0, i, j;
	while(query[query_len] != '\0'){query_len++;};
	while(text[text_len] != '\0'){text_len++;};
	LCS(query, query_len, text, text_len);
	printf("LCS长度为%d\r\n",LCSPro[query_len][text_len]);
	printf("LCS为");
	PrintPath(query, query_len, text_len);
	free(query);
	free(text);
}