Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.05;
Скачать: CL | DM;

Вниз

Что это за алгоритм? Help! Завтра экзамен.   Найти похожие ветки 

 
Maximsms   (2006-01-15 19:44) [0]

Препод давал моим коллегам некий алгоритм быстрой сортировки,
помогите распознать!

см тут: http://qdb.ru/unknown_quick_sort.gif


 
TUser ©   (2006-01-15 19:48) [1]

Книжка акая-нибудь по алгоритмам рядом валяется? А то, что там на этой мукулатуре написано, можно разобрать только зная алгоритм :))


 
Maximsms   (2006-01-15 19:49) [2]

TUser ©   (15.01.06 19:48) [1]

в том то и беда. что не нахожу я в книжке такого алгоритма.
классичекий алгоритм быстрой сортировки - другой.


 
isasa ©   (2006-01-15 19:51) [3]

Мда, это на заборе нарисовано?
Растет интелект населения.
Из быстрых в голову приходит - пузырьковая.


 
Desdechado ©   (2006-01-15 19:55) [4]

пузырек - самый медленный

а вообще алгоритмов сортировки - десятки


 
Maximsms   (2006-01-15 19:59) [5]

isasa ©   (15.01.06 19:51) [3]

пузырёк тут не в тему.

это какой-то быстрый алгоритм.


 
Maximsms   (2006-01-15 20:00) [6]

это не на заборе нарисовано это я просканировал сделанное задание,
за которое поставлен плюс.


 
TUser ©   (2006-01-15 20:01) [7]

сотни

А на бумажке этой они похоже использовали что-то типа

while A[i] < Middle do inc (i);
Swap;
while A[j] > Middle doe dec (j);
Swap;

Видишь там одна из переставляемых цифр - такая же, как в прошлый раз. Конечно, это менее оптимально.


 
ferr ©   (2006-01-15 20:01) [8]


> это не на заборе нарисовано это я просканировал
>сделанное задание,
> за которое поставлен плюс.

:-)


 
TUser ©   (2006-01-15 20:02) [9]

Есть мнение, что плюс поставили зря.


 
YurikGL ©   (2006-01-15 20:07) [10]

Берем перовое число, сравниваем с последним. Если больше, то меняем местами, если меньше то сравниваем с предпоследним...
Если произошла замена, то начинаем заново (вроде)


 
YurikGL ©   (2006-01-15 20:09) [11]

нее...в > YurikGL ©   (15.01.06 20:07) [10] фигню написал...
с конца там идет перебор....


 
Yegorchic ©   (2006-01-15 20:20) [12]

Это в C++ ещё есть целая функция QuickSort. Сейчас посмотрю - у меня вроде где-то было описание, алгоритм и всё такое...


 
Maximsms   (2006-01-15 20:24) [13]

это не quicksort!!!!!!!
c quicksort я знаком, это нечто другое.

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


 
Yegorchic ©   (2006-01-15 20:24) [14]

Использование “стандартных” алгоритмов сортировки одномерных массивов.
Во всех примерах, относящихся к одномерным массивам, будем использовать следующий тип данных: type list=array[1..N] of <скалярный тип>;
Конкретный тип элемента в большинстве описываемых алгоритмов может быть как любым числовым, так и символьным или даже строковым. Последний тип скалярным не является, но к элементам этого типа применимы все операции сравнения, с помощью которых обычно (но не всегда !!!) и производится сортировка.
Пусть в задаче данные необходимо отсортировать один раз. Тогда выбирать следует тот из известных вам алгоритмов сортировки, на реализацию которого лично у вас уйдет меньше всего времени и отлаживать который тоже не придется. В таком случае ребята обычно реализуют так называемый “пузырьковую” сортировку или сортировку прямым выбором. Конечно, размерность массива при этом должна быть не намного более 1000 элементов, в противном случае время работы программы может оказаться неоправданно большим, так как количество только операций сравнения у обоих упомянутых алгоритмов равно N(N — 1)/2.
Если же размерность массива велика или сортировку требуется проводить на каждом шаге некоторого цикла, то проще всего использовать алгоритм так называемой “быстрой” сортировки [1-4]. Этот алгоритм на практике выполняется за не более Nlog2N операций сравнения и зачастую еще меньшее число операций присваивания, хотя теоретическая оценка для худшего случая является квадратичной по N. В языке программирования C он реализован в виде функции qsort, входящей в библиотеку stdlib. В полной поставке среды программирования Турбо Паскаль данный алгоритм можно найти в файле EXAMPLES\DOS\qsort.pas. Нередко приведенный в указанном файле текст процедуры сортировки не требуется изменять вообще, но иногда незначительные переделки необходимы, поэтому полезно разобраться в особенностях данной реализации алгоритма сортировки. Рассмотрим возможную модификацию этой процедуры, выполненную для задачи Кировской открытой командной олимпиады по программированию 2001 г. “Предусмотрительное жюри”.
{задача}
В командных соревнованиях по программированию временем решения задачи считается время в минутах от начала тура до момента посылки правильного решения этой задачи на проверку. Жюри старается расположить задачи в таком порядке, чтобы для команды, решившей по порядку все задачи общее время решения было максимальным, если ориентировочное время, которое требуется потратить на решение каждой из задач известно. В самом деле, если на тур предлагается две задачи, и на решение первой команда тратит 10 минут, а на решение второй — 20, то время решения будет равно 40 минутам (первую задачу команда сдает на 10-й минуте тура, вторую — на 30-й, 10+30=40). Если же задачи расположить в обратном порядке, то время будет равно 50 (задачи будут сданы на 20-й и 30-й минутах). Помогите членам жюри расположить задачи в желаемом порядке.
{\задача}
Очевидно, что задачи следует предлагать в порядке невозрастания ожидаемых временных затрат на каждую из них. То есть требуется произвести сортировку временных характеристик имеющихся задач и переставить согласно полученному порядку исходные номера задач. Проще всего делать это одновременно, незначительно модифицируя стандартную процедуру (изменения, внесенные в реализацию алгоритма сортировки, выделены жирным шрифтом):

const nn=…{максимальное количество задач};
type rr=record t,k:integer; end;      list=array[1..nn] of rr; var time:list;     i,n:integer;
procedure QuickSort(var a: List; Lo, Hi: Integer);
procedure Sort(l, r: Integer);
var
 i, j, x: integer;
 y: rr;
begin
 i := l; j := r; x := a[(l+r) DIV 2].t;
 repeat
   while a[i].t > x do i := i + 1;
   while x > a[j].t do j := j - 1;
   if i <= j then
   begin
     y := a[i]; a[i] := a[j]; a[j] := y;
     i := i + 1; j := j - 1
   end
 until i > j;
 if l < j then Sort(l, j);
 if i < r then Sort(i, r)
end;
begin {QuickSort};
 Sort(Lo,Hi)
end;
begin {решение задачи с помощью модифицированной процедуры QuickSort}   read(n);   for i:=1 to n do
 begin
   read(time[i].t);
   time[i].k:=i
 end;
 QuickSort(time,1,n);
{сортировали по временам, а печатаем индексы}   for i:=1 to n do     write(time[i].k:8)
end.

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


 
Yegorchic ©   (2006-01-15 20:25) [15]

Maximsms, не увидел сообщения. Извиняюсь.



Страницы: 1 вся ветка

Текущий архив: 2006.02.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.038 c
1-1136042260
deamon_t
2005-12-31 18:17
2006.02.05
где TBitmap хранит массив с картинкой


4-1132608360
NightLord
2005-11-22 00:26
2006.02.05
Прозрачность окна


2-1137323960
Дева
2006-01-15 14:19
2006.02.05
алгоритм поиска - метод "перемешивание"


15-1136804756
Grom PE
2006-01-09 14:05
2006.02.05
Программы для укатывания юзера по полу от смеха


15-1136657120
Суслик
2006-01-07 21:05
2006.02.05
Breakpoints в runtime пакетах