![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
Необходимо случайным образом переставить местами N% символов в строке. Как наиболее оптимально это сделать?
У меня только какие-то страшные нагромождения получаются =( Это сообщение отредактировал(а) Ramirez - 3.9.2007, 15:08 |
|||
|
||||
tishaishii |
|
||||||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Добавлено через 7 минут и 19 секунд
Добавлено через 10 минут и 21 секунду А здесь настраиваемый беспорядок. Второй параметр не должен быть больше длинны строки.
Это сообщение отредактировал(а) tishaishii - 3.9.2007, 15:38 |
||||||
|
|||||||
Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
спасибо, фен-шуй, блин =)
только эта функция вообще все перемешивает, а мне надо было перемешивать некоторый процент символов. Это сообщение отредактировал(а) Ramirez - 3.9.2007, 15:48 |
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Последняя?
Перемешивает и настраивается сколько символов перемешивать. Ну из последней легко сделать это:
Это сообщение отредактировал(а) tishaishii - 3.9.2007, 15:59 |
|||
|
||||
Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
погоди. хорошо тебе, со встроенным оптимизатором кода, а мне надо сначала переварить как оно работает =)
|
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
![]() К стати, где взять такой оптимизатор? |
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
tishaishii, твой последний алгоритм затрагивает начало строки с гораздо больней вероятностью, чем конец, и переставляет уже однажды переставленные символы. Например, твой
randomize($str, 1) может дать THCOJfGDAKIElVmnBpqrsuwxyz (заглавные буквы - переставленные), хотя по условию задания нужно было "переставить местами 100% символов в строке". Но, может быть, я неправильно понял задание. Другой вариант, со вспомогательным массивом:
|
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Ну это только за счёт $len--. А если текст большой? Как работать с массивом символов и указателями?
Вот без $len--. А значит, всё зависит от псевдо-случайной величины: переставить $shuffle раз любой символ с любым. Чтобы переставить строго N% символов - недо ещё морочаться, тогда задача может быть гораздо сложнее. Вот простое решение как переставить <=N% символов.
Это сообщение отредактировал(а) tishaishii - 5.9.2007, 18:06 |
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
В результате 1_000_000 испытаний с указанными 20% перестановок букв в тексте, число букв хотя бы один раз переставленных, сводится к 23.076923077267%????. При чём, как оказалось, это число не зависит от количества заявленных процентов букв для смешивания (второй аргумент). ????
Задача: алгоритм, который гарантировал бы перестановку =N% символов. Это сообщение отредактировал(а) tishaishii - 5.9.2007, 18:12 |
|||
|
||||
amg |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
|
||||
|
|||||
Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
Даже не ожидал, что мой вопрос вызовет столь бурные дебаты. Спасибо. Я пок играюсь с обоими вариантами, но алгоритм amg, на первый взгляд действительно работает быстрее.
а из примеров tishaishii, как всегда узнаешь кучу необычных конструкций =) |
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Ramirez, если скорость работы действительно критична, то вот такое изменение кода приводит к ускорению в 20 раз:
Ирония в том, что при такой скорости работы уже имеет смысл задумываться об оптимизации по памяти. Это сообщение отредактировал(а) amg - 6.9.2007, 12:09 |
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
и можно ещё железо докупить.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |