Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Внешняя сортировка прямым слиянем. 
V
    Опции темы
Avaj
Дата 29.6.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 14.7.2008
Где: Владивосток.

Репутация: нет
Всего: 3



Никак не могу понять смысл этой сортировки.

Если кто забыл, смысл в том, чтобы остсортировать файл, используя ещё 3 файла, чтоб разделять "серии" и вроде можно брать из каждого файла только по одному числу для сравнения.

И вот значит есть у меня файлы f1, f2 и g1, g2. Сначала пусть  все числа в файле f1, а f2 - пустой.
Числа пусть такие - 200, 4, 60, 11, 2, 0, 50, 6, 3, 20, 14, 60.
И теперь нужно произвольно разделить эти числа в оба файла: f1: (200, 4, 60, 11, 2, 50), f2:(0, 6, 3, 20, 14, 60), т.е. длина серии пока равна 1.
Затем происходит слияние в серии по 2 и получаются такие файлы:
g1: (0, 200), (3, 60), (2, 14), 
g2: (4, 6) , (11, 20), (50, 60) - Это понятно как получается - из файлов f1 и f2 по очереди выбираются числа, сравниваются и упорядоченными парами записываются поочереди в g1 и g2.

Но вот что происходит дальше? Далее, как везде написано, всё делается аналогично - пары сливаются в четвёрки, четвёрки в восьмёрки и т.д. 
Т.е. взяв последние пары (2, 14) и (50, 60) я должен получить отсортированную четвёрку (2, 14, 50, 60), но как? Ведь я могу доставать числа из файлов g1 и g2 строго последовательно и никаких массивов у меня нет и сортировать я их не могу.
Может я не так понял алгоритм?

PM MAIL   Вверх
pathfinder
Дата 29.6.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.3.2010

Репутация: нет
Всего: 10



Внешняя сортировка используется когда объема ОЗУ не достаточно для размещения всех сортируемых данных, и как следствие "обычные" алгоритмы сортировки не подходят.

В этом случае делают так: 
1) читаем из файла(Ф0) столько данных сколько влезет в ОЗУ, сортируем их "обычным" алгоритмом сортировки.
2) результат сохраняем в промежуточный файл(Ф1).
3) читаем из файла(Ф0) столько данных сколько влезет в ОЗУ, сортируем их "обычным" алгоритмом сортировки.
4) имеем две порции отсортированных данных: одна в файле(Ф1), одна в ОЗУ
5) объединяем обе порции и сохраняем их в файл(Ф2)
6) удаляем файл Ф1
7) переименовываем файл Ф2 в Ф1
8) повторяем 3)-8)

PM MAIL   Вверх
Akina
Дата 29.6.2010, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Avaj @  29.6.2010,  15:06 Найти цитируемый пост)
Ведь я могу доставать числа из файлов g1 и g2 строго последовательно 

Вы упускаете один существенный момент. "Последовательно" вовсе не означает "через один".
Вот вы достали из каждой очереди по элементу. Сравниваем. Один из них, который меньше, кладём в выходной поток, и подчитываем ещё один элемент из очереди, элемент которой только что отправился на выход. Т.е. может быть случай, когла вся первая последовательность уже в выходном файле, а за втоую ещё и не принимались.
Именно в этом - суть слияния.

Это сообщение отредактировал(а) Akina - 29.6.2010, 14:50


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Polesinskij
Дата 1.11.2013, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 31.10.2013

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.