1 | ||||||
Префикс-функция17.12.2011, 19:20. Показов 12518. Ответов 3
Метки нет (Все метки)
Возникла ситуация:
где бы я не читал разбор, немного непотно, как работает префикс-функция? Объясните, а что не пойму, попрошу изложить детальнее. код префикс-функции
0
|
17.12.2011, 19:20 | |
Ответы с готовыми решениями:
3
Префикс-функция префикс функция Префикс - функция постфикс и префикс в c++ |
21.12.2011, 14:27 | 2 | ||||||||||
код бредовый по-моему, но рабочий.
не пойму, что делает в нем k = p[k-1]; как я понял, из этого цикла можно выйти только кода k будет равен нулю:
k все ещё было бы больше нуля и s[k] стало бы равно s[i], что привело бы выходу из цикла. но увы, не удалось,т.к. если, например, в какой-то момент k>0 и попадаем в этот цикл и, например, s[k] = 'H', то после выполнения k = p[k-1], k изменится, но s[k] так и останется равным 'H'. вот мой код, рабочий, проверял, оказался немножко быстрее, чем на википедии:
1
|
13 / 13 / 2
Регистрация: 10.09.2011
Сообщений: 179
|
|
21.12.2011, 14:36 | 3 |
есть книга Окулов : алгоритмы обработки строк, там понятно описано
1
|
21.12.2011, 16:32 | 4 |
вообще, достаточно вот тут среди всего бреда, который мало кто поймет, взглянуть вот на это, и всё станет понятно:
Был не прав насчет кода, строку на википедии не совсем удачную выбрали, из-за чего неправильно понял алгоритм. В этой строке 'aabaaab' как раз учитывается тот момент, про который ругался в предыдущем посте. Для этой строки префикс-функция равна: [0,1,0,1,2,2,3] (смутить может предпоследняя цифра). Добавлено через 1 час 5 минут Dani предыдущий пост не воспринимай серьезно, там я неправильно написал да и код тоже неправильный из-за того, что не полностью понял алгоритм (кое какой момент смутил, как раз в том посте и ругался из-за него). Вообщем, возьми строку "aabaaab", про которую писал выше и попробуй понять, как получить из неё префикс-функцию [0,1,0,1,2,2,3].
1
|
21.12.2011, 16:32 | |
21.12.2011, 16:32 | |
Помогаю со студенческими работами здесь
4
Префикс наименования переменных Префикс L и русские буквы Префикс L перед текстовой строкой Заменить префикс “пере” на “при” Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |