![]() |
Быстро перемешать символы в строке
Добрый день, столкнулся с задачей перемешивания символов в строчке размером в сотню мегабайт.
Привет -> рПвите Само собой при помощи цикла, строчек и getCharAt это все происходит _очень_ медленно (порядка 2 минут) и сжирает феерический объем оперативы. Код AS3:
Код AS3:
|
Дайте ссылку пример на файла, если не трудно)
У меня есть идея насчет применения алгоритма Фишера-Йетса, но с примером было бы проще работать |
KumoKairo
Ссылка на .zip архив в котором лежит json, в поле bytearray которого лежит перемешанный по данному принципу base64. Если перемешать обратно и декодировать из base64, то получится .swf (в bytearray) Но можете любой длинный текст засунуть в base64 и оно ничем не будет принципиально отличаться от вышеназванного ужаса. http://sdrv.ms/17Ph50p Спасибо :-) |
Не вдаваясь в остальные подробности...
Код:
!(X операция Y == Z)Код:
X операция Y != ZКонкатенация строк в таких объемах - непрактично. Лучше один раз выделить память и потом в нее писать. Если вам нужно перемешать всю строку, то, ничего не поделаешь, вам ее всю прийдется поместить в память, но если можно предсказать распределение символов в строке, то можно было бы сделать блоками (и тогда одновременно памяти было бы задействовано меньше). Но, с точки зрения алоритмической сложности: никаких ускорений вам не светит. Скорость как была линейной, так и останется. |
wvxvw
Понятно, спасибо. Вообще вроде сделать работу быстрее, тот же самый файл распаковывается средствами Flash из zip на порядок быстрее, чем выполняется такая простейшая операция. Из этого я сделал вывод, что можно сделать решение "не в лоб". А вот какое - знаний не хватает По поводу if'а согласен, но эта часть кода выполняется один раз и потому не критично. А до рефакторинга не добрался еще. |
flasher190, можно еще на stackoverflow спросить, правда там форум слишком отягощенный оформительскими извратами, и за неправильный формат поста могут заминусовать, и проигнорить.
|
Цитата:
|
mikhailk,
у нас хитрый способ шифровки документов (все равно бесполезный, но ТЗ такое). Уже переформулировали задачу, решили сделать по другому. Теперь программа обрабатывает все за 5-10 секунд. Всем спасибо :) Но все равно обидно, что AVM2 работает в разы медленней Java, не говоря уже о нативном коде. |
Используйте воркеры (Workers).
|
Цитата:
swf (bytes) -> original string (base64) -> shuffled string -> original string (base64) -> swf (bytes) А вообще, вот. UPD. опоздал с постом :) |
| Часовой пояс GMT +4, время: 17:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.