powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Совокупление внешней и внутренней сортировок
12 сообщений из 12, страница 1 из 1
Совокупление внешней и внутренней сортировок
    #39130243
Всех приветствую!

Получил следующее задание: "отсортировать файл, состоящий из целых чисел, с помощью алгоритма двухпутевого двухфазного простого слияния с внутренней сортировкой ".

Проблем с организацией двухпутевого двухфазного простого слияния , ровно как и с пониманием внутренней сортировки - нет.
Пожалуйста, объясните, на кой фиг выполнять внутреннюю сортировку наряду с внешней и в какой вообще момент это делать?


Спасибо!
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39130255
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внутренняя сортировка гораздо быстрее внешней. Поэтому она выполняется перед внешней
сортировкой слиянием, поскольку для последней требуются уже отсортированные потоки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39130257
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39130263
Dimitry Sibiryakov , т.е. для начала я разбиваю файл на два, в каждом из них использую какую-нибудь внутреннюю сортировку, а потом уже далее по алгоритму двухпутевого двухфазного простого слияния.
Я правильно понял?
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39130265
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НевъезжающийЯ правильно понял?
Да. Более-менее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39130284
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Невъезжающий, это старая тема. О ней писали такие столпы как Кнут и Вирт.
Вобщем суть в том что при попытке сортировать файлы во много раз превышающие
оперативку - нужны спец алгоритмы основанные на механике диска. Просто так
сортирнуть много-терабайтный файл невозможно. Для этого и создавались
многофазные алгоритмы которые подготавливали частично сортированные
кусочки файла - потом делали их слияние в один большой. Кусочки сортировались
в оперативке. Слияние - дешёвая операция с точки зрения диска т.к. требует
относительно плавного чтения кусочков.
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39130352
Короче, фигня какая-то выходит.

1 . Предположим, у нас есть файл из n-неповторяющихся случайных целых чисел . Сортируем их с помощью двухпутевого двухфазного простого слияния :Алгоритм №1Шаг 1. Исходный файл f разбивается на два вспомогательных файла f1 и f2.

Шаг 2. Вспомогательные файлы f1 и f2 сливаются в файл f, при этом одиночные элементы образуют упорядоченные пары.

Шаг 3. Полученный файл f вновь обрабатывается, как указано в шагах 1 и 2. При этом упорядоченные пары переходят в упорядоченные четверки.

Шаг 4. Повторяя шаги, сливаем четверки в восьмерки и т.д., каждый раз удваивая длину слитых последовательностей до тех пор, пока не будет упорядочен целиком весь файл.

После выполнения i проходов получаем два файла, состоящих из серий длины 2 i . Окончание процесса происходит при выполнении условия 2 i >=nНа сортировку затратили время t1 .

2 . Также имеем файл из n-неповторяющихся случайных целых чисел . Сортируем их с помощью двухпутевого двухфазного простого слияния с предварительной внутренней сортировкой на шаге 1а:Алгоритм №2Шаг 1. Исходный файл f разбивается на два вспомогательных файла f1 и f2.

Шаг 1а. Содержимое файлов f1 и f2 сортируется с помощью внутренней сортировки.

Шаг 2. Вспомогательные файлы f1 и f2 сливаются в файл f, при этом одиночные элементы образуют упорядоченные пары.

Шаг 3. Полученный файл f вновь обрабатывается, как указано в шагах 1 и 2. При этом упорядоченные пары переходят в упорядоченные четверки.

Шаг 4. Повторяя шаги, сливаем четверки в восьмерки и т.д., каждый раз удваивая длину слитых последовательностей до тех пор, пока не будет упорядочен целиком весь файл.

После выполнения i проходов получаем два файла, состоящих из серий длины 2 i . Окончание процесса происходит при выполнении условия 2 i >=nНа сортировку затратили время t2 .

3 . А теперь предположим, что изначальный файл состоит из n-последовательных целых чисел : 1, 2 .. n.
В первом шаге Алгоритма будет два файла с упорядоченными значениями: f1 [1, 3, 5 .. n -1] и f2 [2, 4, 6 .. n] - таким образом, имитируем внутреннюю сортировку (из Алгоритма №2). Используем Алгоритм №1.
На сортировку затратили время t3 .
____________________________________________________________________________________

Что имеем.
t1 ~ t3 (ожидался знак ">"), т.к. как кол-во итераций в первом и во втором случае будет одинаковым , несмотря на то, что алгоритм в третьем примере работает с уже упорядоченными последовательностями.
t1 < t2 (ожидался знак ">") - здесь тоже всё очевидно. Во втором примере на шаг 1а тратится время, которое потом ничем не компенсируется.

Так что я вообще не понимаю прелести ускорения в указанном задании.

P.S. Ну это, конечно, всё в теории... На данный момент ожидаю, когда обработается файл из 100M чисел (во всех трёх случаях) и проверю свои догадки. Может быть итерациям рознь...
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39130364
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВнутренняя сортировка гораздо быстрее внешней. Поэтому она выполняется перед внешней
сортировкой слиянием, поскольку для последней требуются уже отсортированные потоки.


не перед, а в процессе )
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39130653
MasterZiv , перед / в процессе - не важно. В поставленной задаче внутренняя сортировка будет только увеличивать общее время сортировки.

В общем, я прогнал 100М целых чисел (~ 0.84 ГБ) для первого и третьего примера.
t1 = 3259 сек
t3 = 3050 секНевъезжающий t1 ~ t3 (ожидался знак ">"), т.к. как кол-во итераций в первом и во втором случае будет одинаковым , несмотря на то, что алгоритм в третьем примере работает с уже упорядоченными последовательностями.
Как и предполагалось...

Либо я вообще всё не так понял :-\
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39130660
И кстати, гугл вообще ничего не знает про соединение внутренней и внешней сортировок. Когда задаешь подобный запрос, то выводятся туториалы, где описаны отдельно внутренние и отдельно внешние сортировки, но никак не их совместное использование.

Что-то здесь не так.
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39131021
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гугл не умеет индексировать мозг твоего преподавателя. Вобщем лучше подойти к нему и навсяк
случай уточнить идёт ли речь о MergeSort или еще о каких-то расширенных его версиях.
...
Рейтинг: 0 / 0
Совокупление внешней и внутренней сортировок
    #39131082
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НевъезжающийИ кстати, гугл вообще ничего не знает про соединение внутренней и внешней сортировок. Когда задаешь подобный запрос, то выводятся туториалы, где описаны отдельно внутренние и отдельно внешние сортировки, но никак не их совместное использование.

Что-то здесь не так.

Нет никакого соединения сортировок.
Алгоритм внешней сортировки:
Мы берём файл, разбиваем его на блоки (блок должен содержать целое кол-во записей).

начальный этап заключается в том, что каждый блок зачитывается в память и записи в нём сортируются в памяти,
затем блоки записываются назад в файл.

Последующие этапы -- блоки размером B считываются в N(тут 2) потоков в память, и сливаются. Поскольку записи отсортированы, то
получается отсортированный блок с размером в N(два) раз больше. Блок записывается на диск (в другой файл), и так далее.

Затем производится слияние блоков размером в 2B. Затем 4B, и так далее, пока в файле не останется 2 блока и после слияния получится один целевой файл.

Вот на начальном этапе (0-ом) и используется сортировка в памяти.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Совокупление внешней и внутренней сортировок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]