Внешняя сортировка с использованием однофазного естественного слияния |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Внешняя сортировка с использованием однофазного естественного слияния |
ARMAGEDON |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
Срочно нужна программа внешней сортировки с использованием однофазного естественного слияния на языке Pascal, желательно с комментариями, пояснениями, а то курсач на носу!!! People,помогите кто чем может)))
|
volvo |
Сообщение
#2
|
Гость |
Можешь считать, что твой Армагеддон уже начался:
Однофазная сортировка естественным слиянием |
ARMAGEDON |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
"Сортировка естественным слиянием
В случае прямого слияния мы не получаем никакого преимущества, если данные уже являются частично упорядоченными. Размер сливаемых при каждом проходе последовательностей не зависит от существования более длинных уже упорядоченных последовательностей, которые можно было бы просто объединить. Сортировка, при которой всегда сливаются две самые длинные из возможных последовательностей, назвается естественным слиянием. Эта сортировка является двухфазной сортировкой слиянием с тремя лентами(файлами). Максимальную упорядоченную последовательность будем называть серией. Пусть имеется начальный файл А. Каждый проход состоит из фазы распределения серий из фалйа А поровну в файлы В и С и фазы слияния, объединяющей серии из файлов В и С в файл А. Процесс сортировки заканчивается, как только в файле А останется только одна серия. Рассмотрим сортировку естественным слиянием на примере (серии подчеркнуты). Пусть задан файл А: А - 17 31 05 59 13 41 43 76 11 23 29 47 03 07 71 02 19 57 37 61 B - 17 31 13 41 43 76 03 07 71 37 61 C - 05 59 11 23 29 47 02 19 57 A - 05 17 31 59 11 13 23 29 41 43 47 76 02 03 07 19 57 71 37 61 B - 05 17 31 59 02 03 07 19 57 71 C - 11 13 23 29 41 43 47 76 37 61 A - 05 11 13 17 23 29 31 41 43 47 59 76 02 03 07 19 37 57 61 71 B - 05 11 13 17 23 29 31 41 43 47 59 76 C - 02 03 07 19 37 57 61 71 A - 02 03 05 07 11 13 17 19 23 29 31 37 41 43 47 57 59 61 71 76 Hа основе рассмотренного выше алгоритма легко получить алгоритм однофазной сортировки естественным слиянием с четырьмя файлами. " Добавлено через 6 мин. http://www.dore.ru/perl/nntp.pl?f=1&gid=17&mid=62765 |
volvo |
Сообщение
#4
|
Гость |
Цитата Hа основе рассмотренного выше алгоритма легко получить алгоритм однофазной Легко? Что ж никто не получил-то до сих пор? Ну, вот, давай, ты и будешь первым. Получи и покажи. А не копируй заявления о том, что это легко. Ты сделай сначала...сортировки естественным слиянием с четырьмя файлами. Н. Вирт по крайней мере, когда писал о сортировке естественным слиянием ("Алгоритмы и структуры данных", 2.4.2 Естественное слияние, стр 135), говорил: "Каждый проход состоит из фазы распределения серий из C поровну в А и B, и фазы слияния, объединяющей серии A и B вновь в C" (С) То есть, сортировка-то двухфазная. И ничего из того, что у тебя написано дальше, у Вирта в книге не было. Это отсебятина. Изобретай однофазную естественную сортировку дальше... |
ARMAGEDON |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
так я ж вообще не понимаю , так написано там что легко получить
|
ARMAGEDON |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
....
Сообщение отредактировано: ARMAGEDON - |
ARMAGEDON |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
вот тут кое что написано как из двухфазной сделать однофазную
Эскизы прикрепленных изображений |
Krjuger |
Сообщение
#8
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Тогда удочните,что подразумевается под однофазной?Потому что,как писал volvo
Цитата Каждый проход состоит из фазы распределения серий из C поровну в А и B, и фазы слияния Извините,я все равно в вашем рисунке про однофазную вижу 2 фазы,как минимум на первом этапе когда формировались 2 первых массива.Более того разве поочередное записывание серий из 2 файлов в 2 это будет не распределением?Здесь уже идет вопрос,как воспринимать понятия. Сообщение отредактировано: Krjuger - |
ARMAGEDON |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
вот нашел алгоритм в книге Н.Вирта "АЛГОРИТМЫ + СТРУКТУРЫ ДАННЫХ = ПРОГРАММЫ" подробнее об однофазном слиянии на 108-114 страницах этой книги. Кто может напишите по алгоритму программу а то я не волоку по этой теме про слияния
Добавлено через 5 мин. а вот тут книжка Вирта http://reslib.com/book/Algoritmi_strukturi_dannih_programmi |
ARMAGEDON |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
НАРОД, это однофазная сортировка????
Сортировка естественным слиянием Добавлено через 6 мин. или может быть вот эта сортировка однофазная????
|
ARMAGEDON |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
Однофазная сортировка простым слиянием Фаза разделения файла А на два файла В и С не относится к сортировке. Она непродуктивна, хотя и заниммает половину всех операций по переписи. Очевидным улучшением (по быстродействию, но не по занимаемой памяти) рассмотренного выше алгоритма является объединение фазы разделения с фазой слияния. Вместо слияния в один файл результаты слияния необходимо сразу распределять по двум файлам, которые станут исходными для последующего прохода. Такая сортировка называется однофазовой сортировкой простым слиянием. очевидно, что для такой сортировки требуется уже не три, а четыре дополнительных файла. Рассмотрим выполнение однофазной сортировки на примере. Пусть задан файл А: 55 12 87 76 98 24 84 27 Разбиваем его на два файла: С - 55 12 87 76 D - 55 98 84 87 С - 12 24 55 98 B - 98 24 84 27 E - 12 24 27 76 B - 27 76 84 87 A - 12 24 27 55 76 84 87 98 Сортировка естественным слиянием В случае прямого слияния мы не получаем никакого преимущества, если данные уже являются частично упорядоченными. Размер сливаемых при каждом проходе последовательностей не зависит от существования более длинных уже упорядоченных последовательностей, которые можно было бы просто объединить. Сортировка, при которой всегда сливаются две самые длинные из возможных последовательностей, назвается естественным слиянием. Эта сортировка является двухфазной сортировкой слиянием с тремя лентами(файлами). Максимальную упорядоченную последовательность будем называть серией. Пусть имеется начальный файл А. Каждый проход состоит из фазы распределения серий из фалйа А поровну в файлы В и С и фазы слияния, объединяющей серии из файлов В и С в файл А. Процесс сортировки заканчивается, как только в файле А останется только одна серия. Рассмотрим сортировку естественным слиянием на примере (серии подчеркнуты). Пусть задан файл А: А - 17 31 05 59 13 41 43 76 11 23 29 47 03 07 71 02 19 57 37 61 B - 17 31 13 41 43 76 03 07 71 37 61 C - 05 59 11 23 29 47 02 19 57 A - 05 17 31 59 11 13 23 29 41 43 47 76 02 03 07 19 57 71 37 61 B - 05 17 31 59 02 03 07 19 57 71 C - 11 13 23 29 41 43 47 76 37 61 A - 05 11 13 17 23 29 31 41 43 47 59 76 02 03 07 19 37 57 61 71 B - 05 11 13 17 23 29 31 41 43 47 59 76 C - 02 03 07 19 37 57 61 71 A - 02 03 05 07 11 13 17 19 23 29 31 37 41 43 47 57 59 61 71 76 Hа основе рассмотренного выше алгоритма легко получить алгоритм однофазной сортировки естественным слиянием с четырьмя файлами. исходя из [b]"Однофазная сортировка простым слиянием" может быть можно получить алгоритм однофазной сортировки естественным слиянием с четырьмя файлами???[/b] |
volvo |
Сообщение
#12
|
Гость |
Как же ты меня своим копи-пастом достал. Я тебе сказал: СДЕЛАЙ И ПОКАЖИ реализацию, а не приводи заявления о том, что это возможно. Чувствуешь разницу?
Цитата вот нашел алгоритм в книге Н.Вирта "АЛГОРИТМЫ + СТРУКТУРЫ ДАННЫХ = ПРОГРАММЫ" подробнее об однофазном слиянии на 108-114 А теперь внимательно посмотри в самый низ той страницы, которую ты выложил. "Программа 2.13 Сортировка простым слиянием". Ты простое от естественного отличаешь вообще? Я тебе в первом же ответе дал ссылку на тему, где рекомендуется для однофазного слияния использовать простое, ты начал выёживаться, а теперь сам мне приводишь этот пример? Этот номер с мной не проходит, если что... Думай дальше...Цитата НАРОД, это однофазная сортировка???? Нет, фаза распределения и фаза слияния разделены => двухфазная...Цитата или может быть вот эта сортировка однофазная???? Аналогично... |
ARMAGEDON |
Сообщение
#13
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
Как же ты меня своим копи-пастом достал. Я тебе сказал: СДЕЛАЙ И ПОКАЖИ реализацию, а не приводи заявления о том, что это возможно. Чувствуешь разницу? так если бы я сделал, я вообще не поднимал бы данный вопрос! Добавлено через 4 мин. Ну хорошо, а для 4-х путевого однофазного простого слияния есть у кого программа??? |
ARMAGEDON |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
про однофазную сортировку
Эскизы прикрепленных изображений |
ARMAGEDON |
Сообщение
#15
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
Кто то там пищал что такая сортировка невозможна, ну вот например я вот так реализовал ее, переделав двухфазную.
ВНЕШНЯЯ СОРТИРОВКА С ИСПОЛЬЗОВАНИЕМ ОДНОФАЗНОГО ЕСТЕСТВЕННОГО СЛИЯНИЯ program naturalmerge; uses CRT; type item = record key:integer; end; filetype = file of item; var a,b,c,d,e:filetype; z:integer; eor:boolean; procedure create; var i: byte; buf: item; begin rewrite©; randomize; for i:=1 to 20 do begin buf.key:=random(100); write(c,buf); end; close©; end; procedure view(var x:filetype); var buf: item; begin reset(x); if filesize(x)<>0 then begin repeat read(x,buf); write(buf.key,' '); until eof(x); writeln; readkey; end; end; procedure copy(var x,y:filetype); var buf,buf1:item; begin read(x,buf); write(y,buf); if eof(x) then eor:=true else begin read(x,buf1); seek(x,filepos(x)-1); eor:=buf1.key<buf.key end; end; procedure copyrun(var x,y:filetype); begin repeat copy(x,y); until eor; end; procedure distribute; begin reset©;rewrite(a);rewrite(b); repeat copyrun(c,a); if not eof© then copyrun(c,b); until eof©; write('A= '); view(a); write('B= '); view(b); close(a);close(b);close©; end; procedure mergerun (var w,y,x:filetype); var bufa,bufb:item; begin repeat read(w,bufa); seek(w,filepos(w)-1); read(y,bufb); seek(y,filepos(y)-1); if bufa.key<bufb.key then begin copy(w,x); if eor then copyrun(y,x); end else begin copy(y,x); if eor then copyrun(w,x); end; until eor end; procedure merge; label m1,m2; begin m1: z:=1; reset(a);reset(b); rewrite(d); rewrite(e) ; while (not eof(a)) and (not eof(b)) do begin if odd(z) then mergerun(a,b,d) else mergerun(a,b,e); z:=z+1; end; while not eof(a) do begin copyrun(a,d); z:=z+1; end; while not eof(b) do begin copyrun(b,e);z:=z+1; end; if filesize(d)<>0 then write('D= '); view(d); if filesize(e)<>0 then write('E= '); view(e) ; writeln; If (filesize(e)=0) or (filesize(d)=0) then begin writeln('OTSORTIROVAN'); exit; end; if (eof(a)) and (eof(b)) then goto m2; m2: Z:=1; reset(d); reset(e); rewrite(a); rewrite(b); while (not eof(d)) and (not eof(e)) do begin if odd(z) then mergerun(d,e,a) else mergerun(d,e,b); z:=z+1; end; while not eof(d) do begin copyrun(d,b); z:=z+1; end; while not eof(e) do begin copyrun(e,a); z:=z+1; end; if filesize(a)<>0 then write('A= '); view(a); if filesize(b)<>0 then write('B= '); view(b) ; If (filesize(a)=0) or (filesize(b)=0) then begin writeln('OTSORTIROVAN'); readkey;exit; end; if (eof(d)) and (eof(e)) then goto m1; close(a);close(b); close(d); close(e); end; begin {main} clrscr; assign(a,'a.txt'); assign(b,'b.txt'); assign(c,'c.txt'); assign(d,'d.txt'); assign(e,'e.txt'); create; writeln('Ishodniy massiv '); view©; distribute; z:=0; merge; writeln('++++++++++++++++++++++++++++++++++++++++++++++++++++') ; end. Сообщение отредактировано: ARMAGEDON - |
what are the most common side ef |
Сообщение
#16
|
Гость |
cialis 5mg online uk
|
Текстовая версия | 22.11.2024 20:47 |