IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Алгоритм Боуера-Мура. "c" -> "pascal"
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


SOS Народ!! дайте пожалуйста у кого естя Алгоритм Боуера-Мура НА ПАСКАЛЕ!!!
Я в инете находил... но они все не работают (2).... ...(а у меня осталось всего три дня!!!!)
Или переведите вот с языка СИ на Паскаль:) с комментариями, если можно, пожалуйста!!!
:thanks:

/* Preprocessing of the Bad Character function shift */
PRE_BC( char *x, int m, int bm_bc[] ) {
int a, j;

for ( a=0; a < ASIZE; a++ ) bm_bc[ a ] = m;
for ( j=0; j < m-1; j++ ) bm_bc[ (unsigned char)x[ j ] ] = m - j - 1;
}

/* Preprocessing of the Good Suffix function shift */
PRE_GS( char *x, int m, int bm_gs[] ) {
int i, j, p, f[XSIZE];

memset( bm_gs, 0, ( m + 1 ) * sizeof( int ) );
f[ m ] = j = m + 1;
for (i=m; i > 0; i-- ) {
while ( j <= m && x[ i - 1 ] != x[ j - 1 ] ) {
if ( bm_gs[ j ] == 0 ) bm_gs[ j ] = j - i;
j = f[ j ];
}
f[ i - 1 ] = --j;
}
p=f[ 0 ];
for ( j=0; j <= m; ++j ) {
if ( bm_gs[ j ] == 0 ) bm_gs[ j ] = p;
if ( j == p ) p = f[ p ];
}
}

/* Boyer-Moore string matching algorithm */
void BM( char *x, char *y, int n, int m ) {
int i, j, bm_gs[XSIZE], bm_bc[ASIZE];

/* Preprocessing */
PRE_GS( x, m, bm_gs );
PRE_BC( x, m, bm_bc );
i=0;
while ( i <= n-m ) {
for ( j=m-1; j >= 0 && x[j] == y[ i+j ]; --j );
if ( j < 0 ) {
OUTPUT(i);
i += bm_gs[ j+1 ];
}
else i += MAX(( bm_gs[ j+1 ]), ( bm_bc[ (unsigned char)y[ i+j ] ] - m + j + 1 ) );
}
}



Заранее спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






eprsteklmn

Я оставил {result}, т.к. не имею понятия, для какой это среды. Если Дельфи - оставь Result, если ТР - оставь имя функции, как сейчас...

function BMSearch(StartPos: Integer; const S, P: String): Integer;
type
TBMTable = array[0..255] of Integer;
var
Pos, lp, i: Integer;
BMT: TBMTable;
begin

for i := 0 to 255 do BMT[i] := Length(P);
for i := Length(P) downto 1 do if BMT[Byte(P[i])] = Length(P) then
BMT[Byte(P[i])] := Length(P) - i;

lp := Length(P);
Pos := StartPos + lp -1;
while Pos <= Length(S) do
if P[lp] <> S[Pos] then Pos := Pos + BMT[Byte(S[Pos])] else
if lp = 1 then begin bmsearch{Result} := Pos; Exit; end else
for i := lp - 1 downto 1 do if P[i] <> S[Pos - lp + i] then
begin
  Inc(Pos);
    Break;
     end else if i = 1 then
      begin
        {Result}bmsearch := Pos - lp + 1;
          Exit;
           end;
           {Result}bmsearch := 0;

           end;

var i: integer;
begin
 i := bmsearch(1, 'this is a very long string to find the word in', 'is')
end.

 К началу страницы 
+ Ответить 

Сообщений в этой теме
eprsteklmn   Алгоритм Боуера-Мура. "c" -> "pascal"   10.12.2004 0:01
volvo   eprsteklmn Плохо искал: Здесь лежит полностью раб…   10.12.2004 0:36
eprsteklmn   volvo ПОльзовался я Поиском!!.... он как …   10.12.2004 0:52
eprsteklmn   volvo А можно для меня-как глупого и неопытного е…   10.12.2004 1:55
volvo   eprsteklmn Я оставил {result}, т.к. не имею поня…   10.12.2004 2:00
eprsteklmn   volvo Пасиба...теперь все пучком!!!   10.12.2004 2:05
Dron671   Посмотрел программку. И и не понял. Можете немного…   17.02.2006 5:52
volvo   Что тут комментировать? Теория хорошо описана вот…   17.02.2006 5:55
Dron671   Хех. Как быстро. Описание подробнее не куда. Вот …   17.02.2006 6:06
volvo   Dron671, я конечно тоже извиняюсь, но я попробовал…   17.02.2006 16:54
volvo   Вот то, что я нашаманил: uses strings; type arrT…   17.02.2006 19:45
Dron671   volvo, Интересно получилось. Но больше пытаюсь пон…   18.02.2006 1:46
volvo   1. А где мы задаём образ для поиска ? function bmS…   18.02.2006 1:57
Dron671   volvo, Спасибо большое. Всё работает.   19.02.2006 7:24
Dron671   Кажись не всё понятно. Точнее опят туплю. for i …   1.03.2006 5:50
Dron671   ну кто ни-будь ! Byte(p[i]) что это такое ?   2.03.2006 5:13
volvo   Ну что ты, про приведение типов (typecast) никогда…   2.03.2006 5:56
Dron671   А что получается из этого bmT[Byte(p[i])] ? Код A…   2.03.2006 15:55
volvo   Byte(p[i]) = Ord(p[i])... Кодом Ascii ты НЕ МОЖЕШ…   2.03.2006 16:18


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.04.2024 17:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name