Форум программистов, компьютерный форум CyberForum.ru

Разъясните КМП алгоритм - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Использование регулярных выражений http://www.cyberforum.ru/cpp-beginners/thread1305672.html
На входе есть некая последовательность символов А, представленная в виде массива. Нужно, используя регулярное выражение, найти посделовательности B и C внутри A и вернуть номер последнего символа в B и первого в C; Можно ли это сделать с помощью std::regex?
C++ Подсчитать количество способов размещения, чтобы между числами k было ровно k других чисел Условие: Дано следующие множество чисел {1,1,1,2,2,2...9,9,9} (тройки). Подсчитать количество способов размещения всех этих чисел в строку/ряд таким образом, чтобы между двумя последовательными числами k располагалось ровно k других. Вывести все эти способы размещения. Пример такого размещения для множество {1,1,2,2...16,16} (пары)... http://www.cyberforum.ru/cpp-beginners/thread1305668.html
Циклы for и while (выполнить в двух вариантах) C++
Циклы for и while (выполнить в двух вариантах) Вычислить и вывести на экран в виде таблицы значения функции F от x1 до x2 с шагом dx. F=\begin{cases} & \text{ -a{x}^{3}-b x+c<0 a\neq0}; & \text{\frac{x-a}{x-c} x+c>0 a=0 }; & \text{ \frac{x}{c}+\frac{c}{x} } \end{cases} (x/c+c/x) - в остальных случаях (это функия просто в ряд записана) где a, b и c - действительные числа.
C++ Задать значение данных в экспоненциальной форме
Нужно решить задачу по физике, но вот столкнулся с проблемой степеней, как их задать не могу понять, чтоб вывод нормальный был. m=9.1*10^(-31) q=1.6*10^(-19) W(к)=4.8*10^(-18) R(1)=1 R(2)=6 Нужно найти В-?
C++ Перемножение квадратных матриц с вещественными числами http://www.cyberforum.ru/cpp-beginners/thread1305632.html
Что-то никак не могу найти ошибку: #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <fstream> #include <string> #include <iomanip> using namespace std;
C++ Подпишите функции. Матрица void transp(double O, double L, int M, int N) { for (int i=0;i<M ;i++) for (int j=0;j<N ;j++) L=O; } void sort(double A, int M, int N) { подробнее

Показать сообщение отдельно
Marlboro_August
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 9
20.11.2014, 04:28     Разъясните КМП алгоритм
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int algorithm_KMP (char s[], char q[])
    { 
    int  i=0, j=-1, N, M; 
    N = strlen(s); 
    M = strlen(q); 
    int *d =(int*)malloc(M*sizeof(int)); 
    d[0]=-1;
    while(i<M-1)
        {
        while((j>=0) && (q[j]!=q[i]))
        j = d[j];
        i++;
        j++;
 
        if(q[i]==q[j])
            d[i]=d[j];
        else
            d[i]= j;
        }
 
    for(i=0,j=0;(i<N)&&(j<M); i++,j++)
        while((j>=0)&&(q[j]!=s[i]))
            j=d[j];
    free (d);   
    if (j==M)
        return i-j;
    else
        return -1;
    }
Объясните, пожалуйста, этот код
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru