#include #include #include #include #define FIRST 0 #define SECOND 1 char *genstring ( int s, int l ) { char *A; int i; A = (char *)malloc((l+1) * sizeof(char)); A[l] = '\0'; for (i=0; i n) return 0; i = j = 0; while (i < n) { if (S[i] == T[j]) { if (++j == m) return 1; } ++i; } return 0; } char *stutter ( char *T, int m, int k ) { char *A; int i, j; A = (char *)malloc((m*k+1) * sizeof(char)); A[m*k] = '\0'; for (i=0; i 3) { s = atoi(argv[1]); n = atoi(argv[2]); m = atoi(argv[3]); } else { printf("Usage: ./a.out alphabet_size |S| |T|\n"); scanf("%d%d%d", &s, &n, &m); } srand((unsigned int)time(NULL)); printf("s = %d\nn = %d\nm = %d\n\n", s, n, m); S = genstring(s,n); printf("S = %s\n", S); T = genstring(s,m); printf("T = %s\n", T); printf("\n+++ Exhaustive search\n"); k = exhs(S,n,T,m); printf(" k = %d\n", k); printf("\n+++ Divide and Conquer Strategy 1\n"); k = dnc1(S,n,T,m,s); printf(" k = %d\n", k); printf("\n+++ Divide and Conquer Strategy 2\n"); k = dnc2(S,n,T,m,s); printf(" k = %d\n", k); printf("\n+++ The subsequence is:\n"); A = stutter(T,m,k); prnsubseq(S,n,A,m*k); free(S); free(T); free(A); exit(0); }