![]() |
Модераторы: ginnie, korob2001 |
![]() ![]() ![]() |
|
wkd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 14.5.2008 Репутация: нет Всего: нет |
Возникла проблемма, прошу помочь с решением.
На входе имеется строка, вида: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccddddddddddeeeee" Необходимо перемешать все данные случайным образом, чтоб на выходе получить что-то похожее на: "...dacbbcdaaabceda...". Как это сделать, по возможности качественно перемешать все и быстро? Голову сломал, нашел лишь похожую проблемму http://forum.vingrad.ru/topic-170846.html, но так и не разобрался, уровень знание пока не тот, а сделать надо. Помогите пожалуйста! PS: даже при одинаковой вводной, конечный результат должен быть случайным. Это сообщение отредактировал(а) wkd - 17.8.2009, 15:57 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
wkd, предлагаю "нетрадиционный" вариант
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
wkd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 14.5.2008 Репутация: нет Всего: нет |
Огромное спасибо, работает быстро даже при большом вводном массиве! Мои изыски подвешивали машинку=((( Есть куда стремиться! Но есть ли возможность перемешать данные более качественно? Пример, вводные:
aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccccccccccccccddddddddddddddddddddeeeeeeeeeeeeeeeeeeee Вывод следующий: eseloesbeeosssbbossbssssbsblslsssssslsebelleelbeeebbeeeeoleeeboeblblbobblbblbbllllloololoooloooooooo Под час повторение значений еще более жесткое! Можно ли перемешать качественнее? Пропускать строку так несколько раз, заметно замедляет работу=( Это сообщение отредактировал(а) wkd - 17.8.2009, 16:30 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
Да не за что, этого добра у нас полно (традиционный вариант):
Это сообщение отредактировал(а) ginnie - 17.8.2009, 16:27 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
wkd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 14.5.2008 Репутация: нет Всего: нет |
Спасибо, второй вариант лучше=)
|
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 5 Всего: 27 |
Тоже, вроде, традиционный:
Это сообщение отредактировал(а) KSURi - 17.8.2009, 21:49 -------------------- Died at Life.pl line 21 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
KSURi, а ты уверен в корректности своего кода? Для "ab" он случайно "aa" не может выдать?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 5 Всего: 27 |
Может, не подумал об этом. Но судя по входным данным такого не будет.
-------------------- Died at Life.pl line 21 |
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 9 Всего: 50 |
Можно так:
Функция shuffle из стандартного модуля List::Util работает быстро, в несколько раз быстрее, чем последний код ginnie. Но, впрочем, когда я вставил код функции из модуля в основную программу, ускорение практически исчезло. ![]() |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
amg, ты говоришь про код функции shuffle()? Там же XS. Или ты взял код из List::Util::PP? Это сообщение отредактировал(а) ginnie - 18.8.2009, 10:15 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
amg |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 9 Всего: 50 |
|
||||
|
|||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 5 Всего: 27 |
Практически мой любимый модуль, а про shuffle() забыл...
-------------------- Died at Life.pl line 21 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: Системное программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |