Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Плохой массив для QuickSort 
:(
    Опции темы
lucyk
Дата 28.10.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 5.5.2007
Где: Украина, Днепропе тровск

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



Подскажите пожалуйста какой массив будет сортироваться быстрой сортировкой максимальное вермя? (В качестве опорного элемента выбирается средний элемент)

Это сообщение отредактировал(а) lucyk - 28.10.2008, 18:54
PM MAIL ICQ   Вверх
Akina
Дата 28.10.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(lucyk @  28.10.2008,  19:54 Найти цитируемый пост)
какой массив будет сортироваться быстрой сортировкой максимальное вермя? 

В котором на каждом шаге будет выполняться обмен.


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

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


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 5.5.2007
Где: Украина, Днепропе тровск

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



Покажите пожалуйста пример
PM MAIL ICQ   Вверх
ksili
Дата 29.10.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



Насколько я помню, худший случай для быстрой сортировки - это уже отсортированный массив.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Larrr
Дата 31.10.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



"Быстрота" быстрой сортировки заключается в разделении массива на примерно 2 равные подмасива. Если бы нам было гарантировано, что наш опорный элемент (взятый за константное время) всегда разобьет массив на 2 равные части, то алгоритм бы работал всегда O(n*logn) ( T(n) = T(n/2) + T(n/2) + n, если посчитать , что по идее должно получиться n*logn ).

Поэтому худший случай - когда опорным всегда выбирается такой элемент массива, который разобьет массив на 2 подмассива - 1 элемемент и остальные (n-1) и уже они идут на сортировку.


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

Добавлено через 47 секунд
Цитата(ksili @ 29.10.2008,  15:44)
Насколько я помню, худший случай для быстрой сортировки - это уже отсортированный массив.

Если всегда выбирать в качестве опорного не случайный по порядку, а первый элемент, то да.
PM MAIL WWW ICQ   Вверх
maxdiver
Дата 1.12.2008, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вроде когда-то давно мне попадалась именно такая олимпиадная задача.
Вот её условие:
Цитата
"Интеллект против QSort"

Для сортировки последовательности чисел широко используется быстрая сортировка - QSort. Ниже приведена программа, которая сортирует массив a, используя данный алгоритм. 

Хотя QSort является самой быстрой сортировкой в среднем, существуют тесты, на которых она работает очень долго. 

Будем оценивать время работы алгоритма количеством сравнений, сделанных с элементами массива (т.е. суммарным количеством сравнений в первой и втором while). Требуется написать программу, генерирующую тест, на котором быстрая сортировка сделает наибольшее число таких сравнений.

Код
procedure QSort(left, right : integer);
var m, i, j, t : integer;
begin
  m := a[(left+right) div 2];
  i := left; j := right;
  repeat
    while a[i] < m do inc(i); {первый while}
    while a[j] > m do dec(j); {второй while}
    if i <= j then
    begin
      t := a[i]; a[i] := a[j]; a[j] := t;
      inc(i); dec(j);
    end;
  until i > j;
  if j > left then QSort(left, j);
  if i < right then QSort(i, right);
end;



Не знаю как решали эту задачу другие, а я написал перебор, выдающий все такие "плохие" перестановки, и долго вкуривал их. Через пару часов выявил одну из закономерностей, и закодил её:
Код
int n;
cin >> n;
vector<int> a (n);
if (n == 1)
    a[0] = 1;
else if (n == 2)
    (a[0] = 1), (a[1] = 2);
else if (n == 3)
    (a[0] = 2), (a[1] = 1), (a[2] = 3);
else
{
    a[1] = 1; a[2] = 3;
    for (int step=4; step<=n; step++)
        if ((step & 1) == 0)
            a[step-1] = a[(step>>1)-1];
        else
        {
            a[step-1] = a[step>>1];
            a[step>>1] = step;
        }
    for (int i=0; i<(n>>1); i++)
        a[i] = i+i+2;
}
for (int i=0; i<n; i++)
    printf ("%d ", a[i]);

PM MAIL WWW ICQ   Вверх
jessica
Дата 3.9.2011, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



maxdiver, 
Программа почему-то не работает: например для N=5 выводит 4(должно быть 10). Может есть другие идеи??

Это сообщение отредактировал(а) jessica - 3.9.2011, 09:43
PM MAIL   Вверх
volatile
Дата 3.9.2011, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(lucyk @  28.10.2008,  18:54 Найти цитируемый пост)
Подскажите пожалуйста какой массив будет сортироваться быстрой сортировкой максимальное вермя?

Для этого нужен как минимум исходник QuickSort для конкретной целевой платформы/либы.
Потому как внутреннее устройство QuickSort зависит от реализации.

PM MAIL   Вверх
esperanto
Дата 5.9.2011, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



У вероятностной  реализации быстрой сортировки нет плохих массивов в принцепе, именно ее и используют
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
volatile
Дата 6.9.2011, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(esperanto @  5.9.2011,  21:26 Найти цитируемый пост)
У вероятностной  реализации быстрой сортировки нет плохих массивов в принцепе

Вы дадите гарантию что при любом порядке входного массива сортировка будет идти с абсолютно одинаковой скоростью, вплоть до процессорного такта?  smile 
PM MAIL   Вверх
maxdiver
Дата 7.9.2011, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



jessica, может быть, у Вас немного другой алгоритм быстрой сортировки? Там же всё очень зависит от деталей.

esperanto, ну если включить "зануда-mode" - то сама по себе применяемая псевдо-рандомность не поможет, поскольку, зная алгоритм псевдо-рандома и его начальные параметры, можно сделать anti-тест и против такой сортировки. Так что если автор программы не позаботился о хитром rand-seed, сгенерить тест против программы будет вполне реально.

Кстати, вот легко читаемая статья по этому поводу: "A Killer Adversary for Quicksort".
PM MAIL WWW ICQ   Вверх
esperanto
Дата 22.9.2011, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(volatile @ 6.9.2011,  00:51)
Цитата(esperanto @  5.9.2011,  21:26 Найти цитируемый пост)
У вероятностной  реализации быстрой сортировки нет плохих массивов в принцепе

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

Я такого не говорил. И гарантию не дам.))
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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