![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
DooZ |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
Здравствуйте,
код скрипта
файл 1.txt
файл 2.txt
теперь собственно задача ![]() есть файл 1.txt и файл 2.txt как видно из кода, скрипт должен просто напросто смешать данные из двух файлов определенным образом: что бы данные из файла 1.txt определенное количество раз смешались с данными из файла 2.txt собственно скрипт отлично с этим справляется, когда данных не много но проблема возникает, когда данных: 1.txt - 8.000.000 строк 2.txt - 100.000 строк работает очень медленно и жрет кучу памяти я пробовал разбить 1.txt на мелкие файлы, но скорость оставляет желать лучшего... да и опять же нужна рандомность, т.е. что бы данные были каждый раз рандомные, в смысле смешивались рандомно собственно прошу помощи ![]() Добавлено через 2 минуты и 21 секунду тут собственно получается если из примера взять входные данные, то на файле в 8 миллионов строк и 100 тысяч строк соответсвенно, операций придется проделать: (8.000.000 * 10) / 5 = 40.000.000, данный скрипт с ними не справляется... все это опять же как пример, в том скрипте, который действительно нужен, данных получается за 200 миллионов с лишним... |
||||||
|
|||||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
||||
|
||||
DooZ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
2gcc сенькс, щас буду читать и разбираться
Добавлено через 3 минуты и 35 секунд почитал, чет не понял как тот модуль подходит к моей задаче? |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
вы словами расскажите, что надо сделать
|
|||
|
||||
DooZ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
словами затрудняюсь, в принципе если запустить мой скрипт, все будет понятно
попробую словами описать: задача из файла 1.txt взять 5 строк, причем рандомом у каждой строки есть так называемый счетчик, сколько она раз учавствовала в перемешивании далее из файла 2.txt берем строку, так же рандомную, и к ней приклеиваем те 5 строк, что взяли выше, далее у каждой строки из файла 1.txt увеличиваем (или уменьшаем) счетчик как в примере т.е. что бы знать, сколько раз та или иная строка учавствовала в работе, соответственно когда мы строки смешали нужное кол-во раз, мы их больше не используем в итоге должно получиться, что из файла 1.txt нужное кол-во строк смешается с каждой строкой из файла 2.txt опять же нужное кол-во раз вообщем словами объяснить очень сложно, проще запустить скрипт и все станет понятно там в выходном файле out.txt сразу все видно |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perldoc -q "How do I select a random line from a file"
|
|||
|
||||
DooZ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
2arto Вы запускали скрипт, который я в начале выложил?
запустите, все станет сразу понятно рандомные строки из файла это я просто написал, что бы как-то понять задачу, там все намного сложнее |
|||
|
||||
dva300 |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: -1 Всего: 1 |
при условии что я правильно понял... рассмотрим частный случай - 1) N строк из файла №1 может участвовать в перестановке один раз 2) M строк из файла два может участвовать в перестановке один раз для простоты возьмем N=5 M=1 зачем одну и туже комбинацию прогонять по несколько раз я не понимаю - разве что вывод будет в разные файлы.... в итоге задача сводится к тому каким образом уникально получить комбинацию из M+N строк на выходе (и главное быстро) в сети бродят задачи под название "тосовка колоды карт".... решение задачи
получаем @mas_end = уникально сформированный массив из M+N
для примера - подобный алгоритм у меня работает на уникальном тусовании файла примерно твоих обьемов. т.е. тебе нужно просто последовательно уменьшать область выбора твоих строк. я как то пробовал что-то подобное делать с сортировкой так и 10тыс строк не смог осилить - успевал и поесть и поспать. --------------------
Участник движения Культура Вождения |
||||||
|
|||||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
вы просто не поняли решения, которое я предложил.
|
|||
|
||||
dva300 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: -1 Всего: 1 |
если я правильно понял вообще суть вопроса то это есть всего полдела - мне можно читать в память потому как со строками надо работать. каковы условия задачи у человека - хз. если же этого не надо то конечно можно и с файлом на прямую. --------------------
Участник движения Культура Вождения |
|||
|
||||
dva300 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: -1 Всего: 1 |
to DooZ
см пример - может поможет - формат вызова - src.pl file1 file2 N M N - сколько строк взять из файла file1 M- сколько строк взять из файла file2 вывод будет в файл в этой же директории src_out.txt проверял на file1 - 1 мио file2 -10K N = 10K M = 5K 2 сек
Это сообщение отредактировал(а) dva300 - 20.4.2010, 20:52 --------------------
Участник движения Культура Вождения |
|||
|
||||
gcc |
|
||||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
DooZ, данные отсортированные, поиск по такому файлу будет быстрый если считывать по байтово и делить поровну
примерно так:
http://ru.wikipedia.org/wiki/%D0%94%D0%B2%...%B8%D1%81%D0%BA из wikipedia для бинарного:
Это сообщение отредактировал(а) gcc - 20.4.2010, 21:15 |
||||||||
|
|||||||||
DooZ |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
2gcc к моей задаче файлы не подходят
2dva300 Ваш код на моем примере с моими двумя файлами в котором 8 миллионов и 10к строк, вообще зависает =) видимо не поняли что надо, ну лана, буду своими силами решать задачу хотя если запустить мой пример - в начале, все станет предельно ясно из выходного файла |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |