|
����� � �������, ��������, �������������������: ������ ����� ��������� � ������.
������� �����
������� � ����������� - ������ �.
����� ������� �������, ������������ � ��������� ������ - ����, �� ����� ���������� ��� ���������� ��������, ��, ����� ������ �������� ������� �� ��������� � ������ �������, ��� ��� ����� ����� ����� � �������� ASCII � ��� ������� ������ � ��������� ���������, �� ���������� ����������� �������. ������������� � ��������� ������ ��� ������ ����� ���� ������ �����������.
����� ������� ���������� x � y [ i , i + m - 1 ], ����� ������ - �� ����� 1. ����� �������, ������ y [ i + m ] ����������� ����� �������� � ��������� �������, � ������, ����� ���� ����������� � ������� ������� ��� ������ ������� �������. ������������ ������� ������� �������, ����� ������� � ������ ��������� ������ �:
bc[ a ] = min { j | 0 <= j <= m � x[ m - 1 - j ] = a }, ���� a ����������� � x,
bc[ a ] = m � ��������������� ������.
��������� ������ � ������� ����� ������������� � ����� �������. �������� �� ������������� ������ ������, �������� ������������� ���������� ��������� �� ��������.
���������� �� ��
void QS( char *y, char *x, int n, int m)
{
int i, qs_bc[ ASIZE ];
/* Preprocessing */
for ( i = 0; i < ASIZE; i++ ) qs_bc[ i ] = m + 1;
for ( i = 0; i < m; i ++ ) qs_bc[ x[ i ] ] = m - 1;
/* Searching */
i = 0;
while ( i <= n - m ) {
if ( memcmp( &y[ i ], x, m ) == 0 ) OUTPUT( i );
i += qs_bc[ y[ i + m ] ]; /* shift */
}
}
| |