Изменения

Перейти к: навигация, поиск

Турбо-алгоритм Бойера-Мура

19 байт добавлено, 20:40, 3 апреля 2016
Псевдокод
'''while''' (i <= n - m)
'''int''' j = m - 1; '''while''' (j >= 0 && '''and''' x[j] == y[i + j])
--j;
'''if''' (u != 0 && '''and''' j == m - 1 - shift)
j -= u
'''if''' (j < 0)
OUTPUT(i); shift = bm_gs[0]; u = m - shift;
'''else'''
'''int''' v = m - 1 - j; '''int''' turbo_shift = u - v; '''int''' bc_shift = bm_bc[y[i+j]] - m + j + 1; shift = MAX (turbo_shift, bc_shift); shift = MAX ( shift, bm_gs[j+1]);
'''if''' (shift == bm_gs[j+1])
u = MIN((m - shift), v);
'''else'''
'''if''' (turbo_shift < bc_shift) shift = MAX (shift, (u+1)); u = 0;
i += shift;
251
правка

Навигация