You are on page 1of 3

NAME:Jerio Soares ROLL:14 CLASS:SE-B/COMPS

EXPERIMENT:10 SUBJECT:AOA

CODE:
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<string.h>

char T[30],P[10];
int d = 256,q = 11;
int T_length = 0,P_length = 0;
int t[20];
int m;
int sh_count = 0;
int pi[10] = {0,0,0,0,0,0,0,0,0,0};

void prefix(char P[],int length)


{
    int m = length;
    int j = 0;
    int i = 0;
    pi[0] = 0;

    for(j=1;j<m;j++)
    {
        while(i>0 && P[i] != P[j])
        {   i = pi[i];  }
        if(P[i] == P[j])
        i++;
        pi[j] = i;
    }
    printf("\t");
    for(i=0;i<m;i++)
    printf("%c ",P[i]);
    printf("\nPI\t");
    for(i=0;i<m;i++)
    printf("%d ",pi[i]);
}
NAME:Jerio Soares ROLL:14 CLASS:SE-B/COMPS
EXPERIMENT:10 SUBJECT:AOA

void kmp(char P[],char T[],int m,int n)


{
    prefix(P,m);
    int i = 0,j = 0;
    // i -> pointer for pattern P
    //j -> pointer for pattern T
    //"pi" is a prefix array
    for(j=0;j<n;j++)
    {
        if(P[i] == T[j])
        {
            if(i == m-1)
            {
                printf("\nShift occurs after shift %d",j-m+1);
                i = 0;            
            }
            else
            i++;
        }
        else
        {
            if(i == 0)
            i++;
            else
            {
                j = j - pi[j-1];
            }
            i = 0;
        }
    }
}

void main()
{
    int i=0;
NAME:Jerio Soares ROLL:14 CLASS:SE-B/COMPS
EXPERIMENT:10 SUBJECT:AOA

    printf("\nEnter the Sequence :");


    gets(T);
    printf("\nEnter the target Pattern :");
    gets(P);
 
    T_length = strlen(T);
    P_length = strlen(P);
   
    kmp(P,T,P_length,T_length);
}

OUTPUT:

You might also like