![]() |
![]() |
Caranthir |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
Подскажите плиз)
Файл содержит не более n (от1 до 1.000.000) положительных чисел, каждое из которых не превышает 10^7 (телефонный номер). Все номера в файле уникальны. Присутствие дубликата считается ошибкой. Результат. Упорядоченнный по возрастанию список целых чисел, каждое из которых не превышает 10^7. На выходе должен быть получен файл отсортированных по возрастанию номеров. Ограничения. ~1Мб ОП. место на диске не ограничено. время выполнения не должно превышать нескольких минут, если оно будет сокращено до нескольких секунд, то дальнейшая оптимизация не требуется. |
![]() ![]() |
hiv |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Вот первый вариант.
Номера разбрасываются по 90 временным файлам в соответствии с первыми двумя цифрами номера. Везде буферный ввод вывод. Сортировка типа radix битовая (оказалась самой быстрой, ускоренный пузырек более 40сек работал). Итого: Входной файл текстовый без повторяющихся номеров - 9 000 000 байт (1 000 000 номеров). Время работы 4,157 сек. Кто быстрее? ![]() Максимум выделяемой динамической памяти на данные не превысил 742900 байт. Выходной файл текстовый с отсортированными номерами - 9 000 000 байт (1 000 000 номеров). Программа - ![]() (обновлена) Параметры машины: ОС - WinXP Процессор - Pentium4 1.8ГГц ОЗУ - 512 Мб Винт - 40Гб 7200об/мин ЗЫ: Берусь теперь за второй вариант, предложенный Michael_Rybak. Если у кого есть предложения по оптимизации готового кода - буду рад ![]() Сообщение отредактировано: hiv - 15.12.2006 10:17 -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
Michael_Rybak |
![]()
Сообщение
#3
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Вот первый вариант. Номера разбрасываются по 90 временным файлам в соответствии с первыми двумя цифрами номера. Везде буферный ввод вывод. Сортировка типа radix битовая (оказалась самой быстрой, ускоренный пузырек более 40сек работал). Итого: Входной файл текстовый без повторяющихся номеров - 9 000 000 байт (1 000 000 номеров). Время работы 4,157 сек. Кто быстрее? ![]() Максимум выделяемой динамической памяти на данные не превысил 742900 байт. Выходной файл текстовый с отсортированными номерами - 9 000 000 байт (1 000 000 номеров). Программа - Параметры машины: ОС - WinXP Процессор - Pentium4 1.8ГГц ОЗУ - 512 Мб Винт - 40Гб 7200об/мин ЗЫ: Берусь теперь за второй вариант, предложенный Michael_Rybak. Если у кого есть предложения по оптимизации готового кода - буду рад ![]() Еще можно попробовать поразрядную сортировку (т.е. по 10 файликов разибвать и сливать 8 раз). Напишешь? |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 10:02 |