Реферат по предмету "Разное"


Int needle len = strlen(needle)

int mystrcmp(const char *a, const char *b){ while ( *a && *b && *a == *b ) ++a, ++b; return *a - *b;}char *strstr (const char *s1, char *s2){ int n; n = strlen(s2);for ( ; ;) { s1 = strchr(s1, s2[0]); if (s1 == NULL) return NULL;if (strncmp (s1, s2, n) == 0) return (char *) s1; s1++; }}int boyer_moore(const char * haystack, const char * needle){ int i, j, k; int needle_table[256]; int needle_len = strlen(needle); int haystack_len = strlen(haystack); if (needle_len { for (i = 0; i needle_table[i] = needle_len; for (i = 1; i needle_table[needle[i]] = needle_len-i; i = needle_len; j = i; while ((j > 0) && (i { j = needle_len; k = i; while ((j > 0) && (haystack[k] = needle[j])) { k--; j--; } i += needle_table[haystack[i]]; } if (k > haystack_len - needle_len then) return 0; else return k + 1; } else return 0;}Алгоритм Бойера — МураОписание алгоритмаПервым делом строится таблица смещений для искомого шаблона. Совмещается начало текста (строки) и шаблона, проверка начинается с последнего символа шаблона. Если последний символ шаблона и соответствующий ему при наложении символ строки не совпадают, то образец сдвигается относительно строки на величину, полученную из таблицы смещений. Причем берем символ из строки(а не шаблона) и смотрим соответствующий сдвиг в таблице. Сдвигаем и снова начинаем проверку с последнего символа. Если же символы совпадают, производится сравнение предпоследнего символа шаблона и т. д. Если все символы шаблона совпали с наложенными символами строки, значит мы нашли подстроку и поиск окончен. Если же какой-то (НЕ ПОСЛЕДНИЙ) символ шаблона не совпадает с соответствующим символом строки, мы сдвигаем шаблон на ОДИН символ вправо и снова начинаем проверку с последнего символа. Весь алгоритм выполняется до тех пор, пока либо не будет найдено вхождение искомого образца, либо не будет достигнут конец строки.Алгоритм Кнута-Морриса-Пратта Этот алгоритм был получен благодаря глубокому анализу алгоритма Морриса-Пратта. Итак, посмотрим, что еще можно сделать, чтобы увеличить размер сдвига. Рассмотрим сравнение на позиции i, где образец x[ 0, m - 1 ] сопоставляется с частью текста y[ i, i + m - 1 ]. Предположим, что первое несовпадение произошло между y[ i + j ] и x[ j ] , где 1 При сдвиге вполне можно ожидать, что префикс образца u сойдется с каким-нибудь суффиксом подслова текста u. Более того, если мы хотим избежать выявления другого несовпадения ( то есть не тратить на это операцию сравнения ;-) ), буква, находящаяся за префиксом v в образце должна отличаться от b. Наиболее длинный такой префикс v называется границей u ( он встречается по обоим сторонам u ). Это приводит к следующему алгоритму: пусть kmp_next[ j ] - длина длиннейшей границы x[ 0, j - 1 ], за которой следует символ c, отличающийся от x[ j ]. Тогда после сдвига мы можем возобновить сравнения между символами y[ i + j ] и x[ j - kmp_next[ j ] ] без возможной потери местонахождения образца. Таблица kmp_next может быть вычислена за O( m ) перед поиском через применение этого же алгоритма поиска к самому образцу ( т.е y = x ). При этом максимальное количество сравнений для одного символа текста - logФ( m ), где Ф - золотое сечение: ( корень из 5 + 1 ) / 2.void PRE_KMP( char *x, int m, int kmp_next[] ) { int i, j; i=0; j=kmp_next[0]=-1; while ( i while ( j > -1 && x[ i ] != x[ j ] ) j=kmp_next[ j ]; i++; j++; if ( x[ i ] == x[ j ] ) kmp_next[i]=kmp_next[j]; else kmp_next[ i ] = j; }}void KMP( char *x, char *y, int n, int m ) { int i, j, kmp_next[XSIZE]; /* Preprocessing */ PRE_KMP(x, m, kmp_next ); /* Searching */i=j=0; while ( i while ( j > -1 && x[ j ] != y[ i ] ) j = kmp_next[ j ]; i++; j++; if ( j >= m ) { OUTPUT( i - j ); j = kmp_next[ j ]; } }}


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Рекреационная география 2
Реферат Язык как социокультурный феномен
Реферат Анализ действующих методик и прогнозирование финансового состояния организаций агропромышленного
Реферат 1. виды валютных систем
Реферат Индекс потребительских цен как показатель инфляции и как основа финансовой политики: методология построения и аналитические возможности
Реферат Особенности банкротства индивидуального предпринимателя
Реферат Baroque Art Essay Research Paper Baroque Art
Реферат Память и ее виды
Реферат Проектирование жилого дома со встроенным магазином
Реферат Прошлое настоящее и будущее в пьесе АП Чехова Вишневый сад
Реферат Формирование ценностных ориентаций в младшем школьном возрасте
Реферат Транспортная инфраструктура Великобритании
Реферат Комплексное изучение социальных групп. (Как основа для принятия управленческих решений)
Реферат Основные формы внешнеэкономических связей Украины
Реферат On MY Honor Essay Research Paper Marion