| Caranthir |
11.12.2006 13:34
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
Подскажите плиз)
Файл содержит не более n (от1 до 1.000.000) положительных чисел, каждое из которых не превышает 10^7 (телефонный номер). Все номера в файле уникальны. Присутствие дубликата считается ошибкой. Результат. Упорядоченнный по возрастанию список целых чисел, каждое из которых не превышает 10^7. На выходе должен быть получен файл отсортированных по возрастанию номеров. Ограничения. ~1Мб ОП. место на диске не ограничено. время выполнения не должно превышать нескольких минут, если оно будет сокращено до нескольких секунд, то дальнейшая оптимизация не требуется. |
![]() ![]() |
| Caranthir |
17.12.2006 21:53
Сообщение
#2
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
немного переделал твою первую версию hiv:
(с) и результат прилагается)
telsort1.zip ( 2.12 килобайт )
Кол-во скачиваний: 360PS/ самому плохо думается |
| hiv |
18.12.2006 9:42
Сообщение
#3
|
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: 11 |
немного переделал твою первую версию hiv: Плохо переделал Во первых использование меток считается плохим тоном программирования на паскале и может вызывать кучу завуалированных ошибок. В вторых теряется смысл битовой сортировки, ты по индексу [tel[k]-sdvig] массива rad производишь обычный подсчет количества дубликатов номера tel[k], а потом еще их распечатываешь в итоговом файле в том же дублированном количестве... А как же условие задачи? Цитата Файл содержит не более n (от1 до 1.000.000) положительных чисел, каждое из которых не превышает 10^7 (телефонный номер). Все номера в файле уникальны. Присутствие дубликата считается ошибкой. Так что подумай на досуге Сообщение отредактировано: hiv - 18.12.2006 10:27 -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
| hiv |
18.12.2006 10:01
Сообщение
#4
|
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: 11 |
В третьих: функция setlength() - не обнуляет массив, в итоге у тебя могут появиться номера, которых в твоем исходном никогда небыло... (сравни размеры твоего исходного файла и файла с результатами сортировки - первый признак наличия ошибки).
Сообщение отредактировано: hiv - 18.12.2006 10:27 -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
| hiv |
18.12.2006 13:31
Сообщение
#5
|
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: 11 |
Вот третий вариант сортировки (супер твикс):
1) Определяем диапазон номеров которые будем читать и сразу сортировать битовой сортировкой. 2) Прочитываем весь файл и обрабатываем только те номера, которые входят в диапазон. 3) Сохраняем результат сортировки текущего диапазона в итоговый файл. 4) Берем следующий диапазон чисел и заново перечитываем исходный файл, т.е. переходим к пункту 2 Никаких временных файлов на диске не создается. В данной задаче исходный файл прочитывается всего два раза. Также везде буферный ввод вывод. Спасибо Michael_Rybak за подсказку. См. пост 49 Итого: Входной файл текстовый без повторяющихся номеров - 9 000 000 байт (1 000 000 номеров). Время работы 3,657 сек. Что почти догнало метод быстрой сортировки cool.gif Максимум выделяемой динамической памяти на данные не превысил 978556 байт. Выходной файл текстовый с отсортированными номерами - 9 000 000 байт (1 000 000 номеров). Программа -
telsort3.zip ( 2.32 килобайт )
Кол-во скачиваний: 375Параметры машины: теже Сообщение отредактировано: hiv - 18.12.2006 13:31 -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
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
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![]() ![]() |
|
Текстовая версия | 10.12.2025 4:25 |