IPB
ЛогинПароль:

> Оптимизация
Caranthir
сообщение 11.12.2006 13:34
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской

Репутация: -  0  +


Подскажите плиз)

Файл содержит не более n (от1 до 1.000.000) положительных чисел, каждое из которых не превышает 10^7 (телефонный номер). Все номера в файле уникальны. Присутствие дубликата считается ошибкой.

Результат.
Упорядоченнный по возрастанию список целых чисел, каждое из которых не превышает 10^7. На выходе должен быть получен файл отсортированных по возрастанию номеров.

Ограничения.
~1Мб ОП. место на диске не ограничено. время выполнения не должно превышать нескольких минут, если оно будет сокращено до нескольких секунд, то дальнейшая оптимизация не требуется.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Michael_Rybak
сообщение 18.12.2006 14:57
Сообщение #2


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Прикольно smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 19.12.2006 17:13
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Вот четвертый вариант сортировки (всем по ковшу): blum.gif
Метод довольно подробно описан Michael_Rybak в этой теме (см. пост 40). Добавлю, что не использовал слитие номеров в общий ковш, как рассказывал Michael_Rybak, а просто считывал последовательно из 10 временных файлов и одновременно записывал в другие 10 временных файлов. Потом на каждом шаге просто менял эти две группы временных файлов местами, т.е. то что записывал - начинал читать от туда и наоборот. 20 временных файлов - это не так много smile.gif
Также везде буферный ввод вывод.

Итого:
Входной файл текстовый без повторяющихся номеров - 9 000 000 байт (1 000 000 номеров).
Время работы 3,765 сек. Что обогнало первый метод cool.gif я в шоке crazy.gif думал что медленнее будет.
Максимум выделяемой динамической памяти на данные не превысил 376 404 байт. (в принципе ничего кроме буферов чтения записи)
Выходной файл текстовый с отсортированными номерами - 9 000 000 байт (1 000 000 номеров).
Программа - Прикрепленный файл  telsort4.zip ( 2.67 килобайт ) Кол-во скачиваний: 335

Параметры машины: теже

ЗЫ: Все я выдохся... Да и надоело уже...


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Caranthir   Оптимизация   11.12.2006 13:34
klem4   Эм ну ты бы показал свой вариант, а то что оптимиз...   11.12.2006 14:05
Malice   Файл текстовый ? Может есть смысл переписать его в...   11.12.2006 14:29
hiv   Первое, что приходит на ум: 1) Последовательно про...   11.12.2006 14:34
Caranthir   Мысли: При объёме ОП в 1 Мб туда можно забросить ...   11.12.2006 14:48
hiv   Еще раз повторю - могут ли номера телефонов начина...   11.12.2006 14:51
Lapp   От этого зависит прийдется тебе работать с просто...   11.12.2006 15:03
Caranthir   Неа, нулей нет А если разбивать на файлы, тогда ...   11.12.2006 14:55
hiv   :) Тогда номер телефона можно спокойно хранить в ...   11.12.2006 15:03
Lapp   2Lapp: Номера могут быть и разной длины... К стат...   11.12.2006 15:18
Caranthir   "для хранения данных в системе может быть выд...   11.12.2006 15:07
hiv   Методы сортировки   11.12.2006 15:10
Caranthir   А вот если разбивать на 4 файла по 250000, тогда п...   11.12.2006 15:16
Michael_Rybak   Проблема с ведущими нулями решается временным допи...   11.12.2006 15:27
Caranthir   хм...нечего я не искажал. Файл текстовый-> номе...   11.12.2006 15:29
Caranthir   Respeсt кто помогал))   11.12.2006 15:42
klem4   Кстати не стоит забывать о том, что после разбиени...   11.12.2006 16:15
Michael_Rybak   Кстати не стоит забывать о том, что после разбиен...   11.12.2006 17:30
hiv   Ну хорошо. Можно попробовать обоими способами и ср...   12.12.2006 9:09
Malice   Вот вам генератор файлов для экспериментов: proced...   12.12.2006 9:39
hiv   Вот вам генератор файлов для экспериментов: Входно...   12.12.2006 10:30
Malice   Входной формат файла - текстовый. Данные не должн...   12.12.2006 10:33
hiv   2klem4: При использовании буферного чтения записи ...   11.12.2006 16:32
Caranthir   не совсем понял..Поясни пжл как осуществить буферн...   11.12.2006 16:47
Caranthir   При сливании сравниваются только номера самих файл...   11.12.2006 17:55
Michael_Rybak   А как ты разбросаешь по файлам, чтобы в первом фай...   11.12.2006 18:52
Caranthir   прочитать весь массив, создать дополнительные фай...   11.12.2006 19:15
Michael_Rybak   А если все номера начинаются на одни и те же две ц...   11.12.2006 22:09
Caranthir   Хм...Ты прав. Если одинаковых чисел >250000 бр...   11.12.2006 23:19
Michael_Rybak   Чтобы работало в любом случае, надо 1) разбить п...   11.12.2006 23:38
Caranthir   Интересно... попробую Спасибо   12.12.2006 0:57
Altair   ИМХО (по основной задаче) Портируем текстовый фай...   12.12.2006 15:33
Michael_Rybak   Круто, риспект :) Только опять непонятно, как быт...   12.12.2006 16:12
Altair   А такие номера могут существовать? Если да, допис...   12.12.2006 16:35
hiv   Вот первый вариант. Номера разбрасываются по 90 вр...   13.12.2006 12:15
Malice   Входной файл текстовый без повторяющихся номеров ...   13.12.2006 13:29
hiv   Т.е. Все числа выровнены и добиты в начале 0-ми ?...   13.12.2006 14:35
Michael_Rybak   Вот первый вариант. Номера разбрасываются по 90 в...   13.12.2006 17:07
hiv   Еще можно попробовать поразрядную сортировку (т.е...   13.12.2006 17:41
Michael_Rybak   Есть т.н. ковшовая, или поразрядная сортировка. ...   13.12.2006 18:05
hiv   Есть т.н. ковшовая, или поразрядная сортировка... ...   14.12.2006 9:54
Caranthir   Не стесняйся - программу в студию :) Это я твою ...   14.12.2006 12:41
hiv   Это я твою смотрел и так отсортировалось_) Могу то...   14.12.2006 13:16
Michael_Rybak   А я думаю что не будет :) Это когда сортируем...   14.12.2006 16:06
Caranthir   блин....слабо пока, много получаетсся)) и....ээ......   13.12.2006 22:32
klem4   Методы сортировок :unsure:   14.12.2006 19:06
Michael_Rybak   Вот битовой там, если не ошибаюсь, нет.   14.12.2006 19:11
hiv   Вот второй вариант сортировки (просто супер): :bl...   15.12.2006 11:45
Michael_Rybak   Круто, спасибо, что пробуешь :) У меня еще вот ка...   15.12.2006 14:20
hiv   2Michael_Rybak Стыдно что сам до этого не додумалс...   15.12.2006 16:30
Michael_Rybak   Давай, ждем :)   15.12.2006 17:32
Caranthir   немного переделал твою первую версию hiv: (с) и ре...   17.12.2006 21:53
hiv   немного переделал твою первую версию hiv: Плохо пе...   18.12.2006 9:42
hiv   В третьих: функция setlength() - не обнуляет масси...   18.12.2006 10:01
hiv   Вот третий вариант сортировки (супер твикс): :blu...   18.12.2006 13:31
Michael_Rybak   Прикольно :)   18.12.2006 14:57
hiv   Вот четвертый вариант сортировки (всем по ковшу): ...   19.12.2006 17:13
Michael_Rybak   а просто считывал последовательно из 10 временных...   19.12.2006 17:22
hiv   Спасибо! :biggrin:   19.12.2006 17:58
Caranthir   [indent]Спасибо!!! Всем кто развивал т...   21.12.2006 23:02


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 21:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"