Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2015, 14:21   #1
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию оценка алгоритмов сортировки

Пожалуйста, помогите понять как оценивать сортировки.
Приведён пример, уже подсчитанный, а как это сделать не совсем понятно.
Вот пример из литературы: "К сожалению как и в сортировке пузырьковым методом внешний цикл сортировки выбором выполняется n-1 раз, а внутренний цикл выполняется n/2 раз. Это значит, что число сравнений для сортировки выбором равно 1/2 (n2-n) и эта сортировка будет выполняться слишком медленно для большого числа элементов. Число операций обмена в наилучшем случае равно 3(n-1), а в худшем случае равно n2/4+3(n-1). В лучшем случае /когда исходный массив уже упорядочен/ потребуется поменять местами только n-1 элементов,а каждая операция обмена требует три операции пересылки."
Asya7 вне форума Ответить с цитированием
Старый 06.09.2015, 15:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Единственное что могу сказать: https://ru.wikipedia.org/wiki/%D0%92...81%D1%82%D1%8C
Ну то-есть логарифмы считать придется, как я понял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2015, 15:35   #3
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Цитата:
Сообщение от Asya7 Посмотреть сообщение
Пожалуйста, помогите понять как оценивать сортировки.
Приведён пример, уже подсчитанный, а как это сделать не совсем понятно.
Вот пример из литературы: "К сожалению как и в сортировке пузырьковым методом внешний цикл сортировки выбором выполняется n-1 раз, а внутренний цикл выполняется n/2 раз. Это значит, что число сравнений для сортировки выбором равно 1/2 (n2-n) и эта сортировка будет выполняться слишком медленно для большого числа элементов. Число операций обмена в наилучшем случае равно 3(n-1), а в худшем случае равно n2/4+3(n-1). В лучшем случае /когда исходный массив уже упорядочен/ потребуется поменять местами только n-1 элементов,а каждая операция обмена требует три операции пересылки."
я приведу пример чуть оторванный от темы.... скажем, есть массив А и нужно к каждому элементу его прибавить Х.... код:
Код:
for i := 0 to N - 1 do
  A[i] := A[i] + X;
какова сложность этого кода? Внутреннее тело цикла будет выполнено ровно N раз, не зависимо от содержимого массива и от Х, поэтому O(N).
теперь нам нужен поиск в массиве.... код в лоб:
Код:
for i := 0 to N - 1 do
  if A[i] = X than нашли
тут у нас уже есть худший и лучший вариант:
- если Х находится в первом элементе, то цикл выполнит 1 итерацию и 1 сравнение
- если Х нету в массиве, то мы выполним N итераций и N сравнений
таким образом, оценка тут O(1) и O(N)

если массив упорядочен, то мы можем применить бинарный поиск, который каждый раз сокращает проверяемую область в 2 раза, а проверяет 1 элемент всего (центральный) на равенство Х и на больше/меньше (2 проверки, если наивная реализация) т. е. для массива из N элементов имеем:
- N/2; 1 итерация; 2 сравнения;
- N/4; 1 итерация; 2 сравнения;
- N/8; 1 итерация; 2 сравнения;
- N/16; 1 итерация; 2 сравнения;
- N/32; 1 итерация; 2 сравнения;
................................... ...............
- N/ 2^n, где n такое, что 2^n < N < 2^(n + 1); 1 итерация; 2 сравнения;
если найти лимит этого безобразия, то получим, что в худшем случаем потребуется log2(N) итераций и 2*log2(N) сравнений

простые алгоритмы легко оценить на глаз, но зачастую требуется мат. анализ, оценка вероятностей худшего/лучшего варианта, оценка работы на "типичных" данных и в "краевых" условиях, когда данные максимально "плохие" (у бин. поиска есть вариант с интерполяцией и он часто работает быстрее обычного, но если мы имеем много одинаковых элементов, то он будет работать так же "плохо" как и обычный + потребуется время на интерполяцию т. е. его log2(N) хуже log2(N) бинарного поиска, но средняя оценка лучше)

---------------------------------------
если данные просты, то время сравнение мало и можно принять время работы поиска за T*log2(N) и спать спокойно
если же данные сложные (строки, например), то тут начинает вступать в силу оценка количества сравнений и может понадобиться алгоритм, который имеет большую сложность, но меньшее количество сравнений (это в теории, а так-то оптимизируют сравнение, вводя всякие хеш-поля, которые сравнить в разы дешевле, чем сами данные)

Последний раз редактировалось GreenWizard; 06.09.2015 в 15:50.
GreenWizard вне форума Ответить с цитированием
Старый 06.09.2015, 17:31   #4
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию

GreenWizard, спасибо! Стало понятнее.
Asya7 вне форума Ответить с цитированием
Старый 07.09.2015, 03:46   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Подробно анализ сортировки пузырьком и выбором описан в статье "Анализ сложности алгоритмов". Анализ рекурсивных вариантом быстрой сортировки и сортировки слиянием разобран в статье "Анализ рекурсивных алгоритмов".
rrrFer вне форума Ответить с цитированием
Старый 07.09.2015, 06:53   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
оценка алгоритмов сортировки
Таааак, похоже мне пора вешаться. И для кого я это пишу? Не понятно.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 07.09.2015, 10:18   #7
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
И для кого я это пишу? Не понятно.
Спасибо, но мне кажется, что там у вас просто приведён пример сравнения работ различных сортировок. А мне нужно объяснение по методу вычислению оценки работы. ( выше в сообщениях - мне уже примерно стало понятно, как делается)
Asya7 вне форума Ответить с цитированием
Старый 07.09.2015, 10:50   #8
promer
Пользователь
 
Регистрация: 16.05.2008
Сообщений: 46
По умолчанию

На эту тему есть классическая книга: Д. Кнут "Искусство программирования" том 3 "Сортировка и поиск". В книге много информации и богатый математический арсенал сравнения различных методов сортировок. Дерзайте!
promer вне форума Ответить с цитированием
Старый 07.09.2015, 12:28   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от promer Посмотреть сообщение
На эту тему есть классическая книга: Д. Кнут "Искусство программирования" том 3 "Сортировка и поиск". В книге много информации и богатый математический арсенал сравнения различных методов сортировок. Дерзайте!
Ненавижу Кнута. Запутал так, что я чуть не бросл заниматься С++. Благо, выкинул его в окно и начал заниматься самообразованием.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 07.09.2015, 12:38   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Благо, выкинул его в окно и начал заниматься самообразованием.
Да, он толстый, если в окно да по голове кому-то, то слабо не покажется Дома до сих пор три тома где-то валяется, каждый по кг с лишним
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как понимают эффективность алгоритмов сортировки? Proskurina Общие вопросы по программированию, компьютерный форум 0 16.11.2012 10:29
Сравнить эффективность алгоритмов шейкерной сортировки и сортировки слиянием (язык C) Ольга210993 Помощь студентам 2 20.09.2012 13:52
исследование Алгоритмов Сортировки Camaro Chevelle Помощь студентам 5 06.11.2011 21:59
Сравнение алгоритмов сортировки массива Семен_Владимирович Общие вопросы C/C++ 2 15.02.2011 19:02
Оценка сложности алгоритмов Kristen_McBrian Паскаль, Turbo Pascal, PascalABC.NET 1 22.12.2010 02:09