����� �� �����.


������ ���������.

����� � �������, ��������, �������������������:
������ ����� ��������� � ������.


�������� �������-������

������� � ����������� - ������ �.

     ��� �������� �������� � ���������� ����������� ������� ��������� ������ ����. ������������� ������ ����� ������� ����� ����� ������������ ����������, ���������� �� ����� ������������ ( �������� ������ ���� �� ������ ����������� ;-( ).

     ���, ������� � �� �������� �� ���� �������. �����������, ������ ������ ������� ����� ���������, �������������� �������� ����� ������, ����������� � ��������. ��� �������� ��� �������� �������� ��������� �, ��� �����, ����� ��������� �������� ������.

     ��������� ��������� �� ������� i, ��� ������� x[ 0, m - 1 ] �������������� � ������ ������ y[ i, i + m - 1 ]. �����������, ��� ������ ������������ ��������� ����� y[ i + j ]x[ j ] , ��� 1 < j < m. ����� y[ i, i + j - 1 ] = x[ 0, j - 1 ] = ua = y[ i + j ] =/= x[ j ] = b.

     �� ������ ������ ����� �������, ��� ������� ������� u �������� � �����-������ ��������� �������� ������ u. �������� ������� ����� ������� - ������� u ( �� ����������� �� ����� ������ u ). ��� �������� ��� � ���������� ���������: ����� mp_next[ j ] - ����� ������� x[ 0, j - 1 ]. ����� ����� ������ �� ����� ����������� ��������� � ����� y[ i + j ]x[ j - mp_next[ j ] ] ��� ������ ���������� ��������������� �������. ������� mp_next ����� ���� ��������� �� O( m ) ����� ����� �������. ������������ ����� ��������� �� 1 ������ - m

���������� �� ��

/* Preprocessing */

void PRE_MP( char *x, int m, int mp_next[] ) {
  int i, j; 
  
  i=0; 
  j=mp_next[0]=-1; 
  while ( i < m ) {
     while ( j > - 1 && x[i] != x[j] ) j=mp_next[j]; 
    mp_next[++i]=++j;
   }
  }
  
  void MP( char *x, char *y, int n, int m ) {
    int i, j, mp_next[XSIZE]; 
   
   /* Preprocessing */
   PRE_MP(x, m, mp_next );
   
   /* Searching */
   i=j=0; 
   while ( i < n ) {
      while ( j > -1 && x[j] != y[i] ) j=mp_next[j]; 
      i++; 
      j++; 
      if ( j >= m ) {
          OUTPUT( i - j ); 
         j = mp_next[ j ]; 
      }
    }
} 
 
   


���������� �������� �������� ������ ����
�������� ������-���� �������� ��������
�������� �����-������ �������� �����-�������-������
�������� �������-������ �� ����� �� ������� ��������
�������� ������-���

SpyLOG