Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
Всех приветствую! Получил следующее задание: "отсортировать файл, состоящий из целых чисел, с помощью алгоритма двухпутевого двухфазного простого слияния с внутренней сортировкой ". Проблем с организацией двухпутевого двухфазного простого слияния , ровно как и с пониманием внутренней сортировки - нет. Пожалуйста, объясните, на кой фиг выполнять внутреннюю сортировку наряду с внешней и в какой вообще момент это делать? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 22:25 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
Внутренняя сортировка гораздо быстрее внешней. Поэтому она выполняется перед внешней сортировкой слиянием, поскольку для последней требуются уже отсортированные потоки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 22:48 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 22:51 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov , т.е. для начала я разбиваю файл на два, в каждом из них использую какую-нибудь внутреннюю сортировку, а потом уже далее по алгоритму двухпутевого двухфазного простого слияния. Я правильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 23:03 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
НевъезжающийЯ правильно понял? Да. Более-менее. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 23:08 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
Невъезжающий, это старая тема. О ней писали такие столпы как Кнут и Вирт. Вобщем суть в том что при попытке сортировать файлы во много раз превышающие оперативку - нужны спец алгоритмы основанные на механике диска. Просто так сортирнуть много-терабайтный файл невозможно. Для этого и создавались многофазные алгоритмы которые подготавливали частично сортированные кусочки файла - потом делали их слияние в один большой. Кусочки сортировались в оперативке. Слияние - дешёвая операция с точки зрения диска т.к. требует относительно плавного чтения кусочков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 23:46 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
Короче, фигня какая-то выходит. 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 чисел (во всех трёх случаях) и проверю свои догадки. Может быть итерациям рознь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 03:53 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВнутренняя сортировка гораздо быстрее внешней. Поэтому она выполняется перед внешней сортировкой слиянием, поскольку для последней требуются уже отсортированные потоки. не перед, а в процессе ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 05:54 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
MasterZiv , перед / в процессе - не важно. В поставленной задаче внутренняя сортировка будет только увеличивать общее время сортировки. В общем, я прогнал 100М целых чисел (~ 0.84 ГБ) для первого и третьего примера. t1 = 3259 сек t3 = 3050 секНевъезжающий t1 ~ t3 (ожидался знак ">"), т.к. как кол-во итераций в первом и во втором случае будет одинаковым , несмотря на то, что алгоритм в третьем примере работает с уже упорядоченными последовательностями. Как и предполагалось... Либо я вообще всё не так понял :-\ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 12:20 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
И кстати, гугл вообще ничего не знает про соединение внутренней и внешней сортировок. Когда задаешь подобный запрос, то выводятся туториалы, где описаны отдельно внутренние и отдельно внешние сортировки, но никак не их совместное использование. Что-то здесь не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 12:27 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
Гугл не умеет индексировать мозг твоего преподавателя. Вобщем лучше подойти к нему и навсяк случай уточнить идёт ли речь о MergeSort или еще о каких-то расширенных его версиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 16:39 |
|
||
|
Совокупление внешней и внутренней сортировок
|
|||
|---|---|---|---|
|
#18+
НевъезжающийИ кстати, гугл вообще ничего не знает про соединение внутренней и внешней сортировок. Когда задаешь подобный запрос, то выводятся туториалы, где описаны отдельно внутренние и отдельно внешние сортировки, но никак не их совместное использование. Что-то здесь не так. Нет никакого соединения сортировок. Алгоритм внешней сортировки: Мы берём файл, разбиваем его на блоки (блок должен содержать целое кол-во записей). начальный этап заключается в том, что каждый блок зачитывается в память и записи в нём сортируются в памяти, затем блоки записываются назад в файл. Последующие этапы -- блоки размером B считываются в N(тут 2) потоков в память, и сливаются. Поскольку записи отсортированы, то получается отсортированный блок с размером в N(два) раз больше. Блок записывается на диск (в другой файл), и так далее. Затем производится слияние блоков размером в 2B. Затем 4B, и так далее, пока в файле не останется 2 блока и после слияния получится один целевой файл. Вот на начальном этапе (0-ом) и используется сортировка в памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 17:28 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39130364&tid=2018676]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
154ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 249ms |

| 0 / 0 |
