Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стабильная и нестабильная сортировка, алгоритмы сортировки 
:(
    Опции темы
Bison
Дата 25.8.2010, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Что такое стабильная и нестабильная сортировка?
"Устойчивая (стабильная) сортировка — сортировка, которая не меняет относительный порядок сортируемых элементов, имеющих одинаковые ключи. Большинство простых методов сортировки устойчивы, большинство сложных — нет." - из определения ничего не понятно о каких ключах идет речь.

Можете на примере (например, Quicksort-а или пузырька) объяснить что такое? И как превращать из стаб.->нестаб.?

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


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


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

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



Представь, что перед тобой стоИт пять человек:
Андрей (рост 175 см) - Борис(рост 182 см) - Виктор (рост 185 см) - Георгий (рост 192 см) - Дмитрий (рост 182 см)
Тебе дано задание - построить их по росту. Ты можешь построить их двумя вариантами:
1) Георгий - Виктор - Борис - Дмитрий - Андрей
1) Георгий - Виктор -Дмитрий -  Борис - Андрей
Видишь? в первом варианте одинаковые по росту Борис и Дмитрий стоят в том же порядке, что и сначала - Борис левее, Дмитрий правее. Во втором варианте - они поменялись местами друг относительно друга.
Так вот - стабильная сортировка гарантирует, что будет получена расстановка 1. А нестабильная может дать любую из двух расстановок.

В случае, например, пузырька:

Код

For i = 1 to N-1
  For j = i+1 to N
    If X(i) > X(j) Then ' Строгая сортировка - равные не обмениваются
      SWAP X(i), X(j)
    End If
  Next j
Next i


Код

For i = 1 to N-1
  For j = i+1 to N
    If X(i) >= X(j) Then ' Нестрогая сортировка - равные обмениваются
      SWAP X(i), X(j)
    End If
  Next j
Next i


Код

For i = 1 to N-1
  For j = i+1 to N
    If X(i) >= X(j) Then ' Нестрогая сортировка - равные обмениваются
      If RND() > 0.5 Then SWAP X(i), X(j) ' с вероятностью 50% (интересно, нахрена?)
    End If
  Next j
Next i



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

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


Новичок



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

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



Спасибо за объяснение. Значит, разница только в учете: менять одинаковые данные при сортировке или оставить прежним. Прописывается через условия, и на время выполнения соответственно тоже влияет? В чём практическая ценность?
В случае нестабильной сортировки обязательно меняются одинаковые данные?
PM MAIL   Вверх
Akina
Дата 25.8.2010, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Bison @  25.8.2010,  23:05 Найти цитируемый пост)
В чём практическая ценность?

Стабильная сортировка бывает нужна. Фактически она аналогична сортировке по двум признакам, второй из которых - предыдущий порядок. Скажем покупаем мы товар... Конечно выбираем подешевле (основная сортировка), но продавец тоже не дурак, и среди самых дешёвых будет продавать нам самые старые (предыдущий порядок). Стабильная сортировка позволяет продавцу минимизировать потери от истечения сроков годности. Однако алгоритмы стабильных сортировок обычно не столь эффективны...

Цитата(Bison @  25.8.2010,  23:05 Найти цитируемый пост)
В случае нестабильной сортировки обязательно меняются одинаковые данные? 

Вот ещё! третий пример кода я зачем писАл? Как фишка ляжет...


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

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


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



на всякий случай - уточню, что ключом в приведенной цитате называется параметр, определяющий порядок - то, "по чем сортируем".
Цитата(Bison @  25.8.2010,  21:05 Найти цитируемый пост)
В чём практическая ценность?

представь, что сортировка - не некий сферический конь в вакууме, а инструмент, скажем, логиста. И при помощи некоторых параметров автоматически пытается рассчитаться оптимальное размещение контейнеров на складе с целью минимизации пути погрузчика. Вот хорошо будет, если каждую неделю в процессе оптимизации контейнеры с одинаковой частотой доступа(это и есть "ключ сортировки") будут меняться местами? 
тут главное не столько скорость сортировки сама по себе(обменять две записи с одинаковыми ключами - я умоляю, разве это затратная операция?!), а стабильность результатов.
некорректный пример. даже если говорить о применении сортировки(а не вычисления параметров минимизируемой функции), все равно кроме смены местами друг с другом, контейнеры с одинаковым ключом сортировки вполне могут сместиться относительно прежнего места положения. так что придется придумать другой логичный пример "из жизни"
PM MAIL   Вверх
Bison
Дата 25.8.2010, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Akina @ 25.8.2010,  23:05)
Вот ещё! третий пример кода я зачем писАл? Как фишка ляжет...

Касательно 3-го примере, наверно, предполагается что, одинаковые числа могут поменяться или нет с вероятностью 0,5.

2 skyboy
В примере ключ - рост людей?

Можно также другой встречный вопрос: при изменении типа (стаб., нестаб.) сортировки это влияет на сложность алгоритма? Например, если обычный Quicksort не стабильный алгоритм, то сделав его стабильным, можно ухудшить оценку, скажем до О(n)? 

или я совсем не правильно понимаю?
PM MAIL   Вверх
skyboy
Дата 25.8.2010, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(Bison @  25.8.2010,  22:32 Найти цитируемый пост)
В примере ключ - рост людей?

да.
Цитата(Bison @  25.8.2010,  22:32 Найти цитируемый пост)
при изменении типа (стаб., нестаб.) сортировки

любая сортировка будет стабильной, если добавить в сравнение учет позиции в исходном списке. на сложность алгоритма дополнительное сравнение никак не повлияет. потому что O(n) означает не N операций сравнения, а линейную зависимость(3N+2, 7N-5). Следовательно, добавив ещё одно сравнение и увеличив вдвое количество сравнений, мы останемся с прежним порядком операций(что N+1, что 2N+1 суть линейная зависимость от количества элементов).

Добавлено через 46 секунд
Цитата(skyboy @  25.8.2010,  22:58 Найти цитируемый пост)

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

сорри, Akina уже говорил об этом:
Цитата(Akina @  25.8.2010,  22:05 Найти цитируемый пост)
Фактически она аналогична сортировке по двум признакам, второй из которых - предыдущий порядок. 


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


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


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

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



Цитата(Bison @  26.8.2010,  00:32 Найти цитируемый пост)
Касательно 3-го примере, наверно, предполагается что, одинаковые числа могут поменяться или нет с вероятностью 0,5.

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

Цитата(Bison @  26.8.2010,  00:32 Найти цитируемый пост)
при изменении типа (стаб., нестаб.) сортировки это влияет на сложность алгоритма?

Как сказано выше - на сложнось нет. А вот на скорость - ещё как да. А поскольку сортировка - не сферический конь, а вполне прикладушка, это важнее. Ибо от сложности никуда не деться, а оптимизация рулез.


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

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


Бывалый
*


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

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



Цитата(skyboy @ 25.8.2010,  23:58)
 потому что O(n) означает не N операций сравнения, а линейную зависимость(3N+2, 7N-5). 

Ничего подобного. 
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Polesinskij
Дата 1.11.2013, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




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

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

maxim1000

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


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

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


 




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


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

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