![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| amg |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Господа!
Нужно эффективное решение. Требуется заменить каждую из непрерывной последовательности букв "N" на "M". Последовательность, подлежащая замене, ограничена слева буквой "X" и справа "Y". Один вариант у меня есть, но не уверен, что он (самый) хороший.
У кого есть другие варианты, предлагайте, пожалуйста. Должно получиться
|
||||
|
|||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
У меня есть вот такой вариант:
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| nitr |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
банально
по-детски (но весело):
|
||||
|
|||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Nab, nitr, спасибо!
Привожу результаты тестирования кода на скорость (Benchmark, 2e6 циклов на строке длиной 20 символов) и память (Memchmark, на строке длиной 20e6 символов)
|
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
amg, тест повтори, но поменяй местами мой и твой скрипт
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Повторил, поменяв местами "me" и "nitr1". Результат тот же (по памяти поменялись местами, но это нормально, в документации к Memchmark предупреждают, что точность не гарантируется).
nitr, что-то показалось неожиданным? |
|||
|
||||
| Nab |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Вот блин, оказался самым тормознутым, и самым толстым...
amg, а проверь плиз вот такой вариант:
Добавлено @ 13:54 Кстати, мой первый вариант не корректен, потому как поймает и просто 'XMNNY' Я думаю что вариант nitra, свмый оптимальный... там очень простой паттерн и минимум вычислений... Сложные регекспы растут во времени экспоненциально Можно и мой по такому принципу попробовать:
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
||||
|
|||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Почти так же быстро, как и вариант nitr'а.
Основной вывод: при замене в регулярных выражения заглядывание вперед/назад занимает больше времени, чем повторение выражения и конкатенация в правой части регулярки. Еще раз спасибо всем! С Новым годом! |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Попробуй попользоваться ещё http://search.cpan.org/author/MJD/Memoize-1.01/Memoize.pm. Это сообщение отредактировал(а) tishaishii - 30.12.2006, 15:29 |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |