Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Сравнительный анализ






Для проведения экспериментального сравнительного анализа различных методов сортировки была разработана программа, которая в автоматическом режиме подсчитывала время, требуемое для каждого метода сортировки. Для чистоты эксперимента сортировка всеми методами проводилась на одинаковых наборах входных данных, затем формировался новый набор данных, и они опять подвергались сортировке различными методами. Таким образом было выполнено 60 циклов сортировки, подсчитано среднее время, которое потребовалось каждому методу, чтобы отсортировать входной массив. Для более полного анализа методов в каждом цикле сортировки сортировка проводилась для размерностей 500, 1000, 3000, 5000, 8000, 10000, 30000, 60000. Это дало возможность проследить динамику роста требуемого для сортировки времени. Также проверялось, как ведут себя методы на различных входных данных: упорядоченных в прямом порядке, упорядоченных в обратном порядке и случайных.

Ниже приведены таблицы, которые выдала составленная программа.

а) Для массива, заполненного случайными элементами:

                 
Подсчетом 0.08 0.31 2.76 7.67 19.67      
Включением 0.03 0.06 0.60 1.66 4.22 6.58 59.62  
Шелла 0.02 0.05 0.43 1.12 2.72 4.24 35.62  
Слиянием 0.03 0.02 0.06 0.09 0.11 0.13 0.38 0.77
Извлечением 0.01 0.10 0.92 2.54 6.51 10.17    
Древесная 0.02 0.02 0.11 0.20 0.33 0.42 1.39 3.02
Пузырьковая 0.07 0.27 2.43 6.75 17.28      
Быстрая 0.00 0.00 0.01 0.03 0.03 0.04 0.13 0.27
Двоичным распределением 0.00 0.00 0.02 0.03 0.05 0.06 0.20 0.38
Вырожденным распределением 0.00 0.00 0.00 0.00 0.01 0.01 0.01 0.02

б) Для исходно упорядоченного массива:

                 
Подсчетом 0.08 0.32 2.65 7.26 18.46      
Включением 0.00 0.00 0.00 0.00 0.01 0.01 0.01 0.03
Шелла 0.00 0.00 0.01 0.02 0.02 0.05 0.15 0.29
Слиянием 0.02 0.02 0.04 0.08 0.09 0.12 0.31 0.63
Извлечением 0.02 0.11 0.92 2.54 6.53 10.20    
Древесная 0.01 0.03 0.11 0.19 0.34 0.43 1.45 3.11
Пузырьковая 0.00 0.00 0.00 0.00 0.00 0.01 0.01 0.02
Быстрая 0.00 0.00 0.01 0.02 0.03 0.04 0.11 0.22
Двоичным распределением 0.00 0.01 0.02 0.03 0.04 0.05 0.18 0.36
Вырожденным распределением 0.00 0.00 0.00 0.00 0.00 0.01 0.01 0.02

в) Для массива исходно упорядоченного в обратном порядке:

                 
Подсчетом 0.09 0.32 2.64 7.26 18.47      
Включением 0.02 0.13 1.16 3.26 8.37 13.08    
Шелла 0.01 0.00 0.03 0.16 0.21 0.27 2.09 8.02
Слиянием 0.02 0.03 0.06 0.06 0.10 0.11 0.32 0.64
Извлечением 0.02 0.11 0.91 2.54 6.51 10.19    
Древесная 0.00 0.02 0.10 0.18 0.30 0.39 1.32 2.85
Пузырьковая 0.06 0.29 2.95 8.35 21.60      
Быстрая 0.00 0.00 0.01 0.01 0.03 0.04 0.11 0.24
Двоичным распределением 0.01 0.01 0.03 0.03 0.05 0.07 0.19 0.37
Вырожденным распределением 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.03

Примечание. Пусты ячейки, для которых испытание не проводилось. Время засекалось с точностью до одной пятидесятой секунды, поэтому нули в таблице означают, что было затрачено меньше времени, чем одна пятидесятая доля секунды. Испытание проводилось на AMD-K5-PR133/32Mb EDO/850Mb под управлением MS-DOS 7.0, входящую в состав WINDOWS 95. Массивы размещались в динамической памяти.

Теоретические сложности рассмотренных методов сортировки:

  Tmax Tmid Tmin Omax
Подсчетом n2 n
Включением n2 n  
Шелла n2 n1, 25 n  
Извлечением n2  
Древесная n*log(n)  
Пузырьковая n2 n  
Быстрая n2 n*log(n) log(n)
Слиянием n*log(n) n
Распределением n n

Эти таблицы позволяют сделать ряд выводов.

  1. На небольших наборах данных целесообразнее использовать сортировку включением, так как из всех методов, имеющих очень простую программную реализацию, этот на практике оказывается самым быстрым и при размерностях< ~3000 дает вполне приемлемую для большинства случаев скорость работы. Еще одно преимущество этого метода заключается в том, что он использует полную или частичную упорядоченность входных данных и на упорядоченных данных работает быстрее, а на практике данные, как правило, уже имеют хотя бы частичный порядок.
  2. Алгоритм пузырьковой сортировки, причем в той его модификации, которая не использует частичный порядок данных исходного массива, хотя и часто используется, но имеет плохие показатели даже среди простых методов с квадратичной сложностью.
  3. Сортировка Шелла оказывается лишь красивым теоретическим методом, потому что на практике использовать его нецелесообразно: он сложен в реализации, но не дает такой скорости, какую дают сравнимые с ним по сложности программной реализации методы.
  4. При сортировке больших массивов исходных данных лучше использовать быструю сортировку.
  5. Если же добавляется требование гарантировать приемлемое время работы метода (как вы помните, быстрая сортировка в худшем случае имеет сложность T(N2), хотя вероятность такого случая очень мала), то надо применять либо древесную сортировку, либо сортировку слиянием. Как видно из таблиц, сортировка слиянием работает быстрее, но следует помнить, что она требует дополнительную память размером порядка N.
  6. В тех же случаях, когда мы можем себе позволить использовать дополнительную память размером порядка n, имеет смысл воспользоваться сортировкой распределением.

Контрольные вопросы

  1. Что такое сортировка? Чем отличаются внешняя и внутренняя сортировка?
  2. Что такое практическая и теоретическая сложности? Можно ли из практической сложности вывести теоретическую? Можно ли из теоретической сложности вывести практическую?
  3. Что такое максимальная, средняя и минимальная сложности?
  4. Что означает T(1)?
  5. Общее в методах сортировки включением (сортировки включением и метода Шелла)?
  6. Доказать, что метод Шелла действительно сортирует массив.
  7. Общее в методах сортировки извлечением (сортировки извлечением и древесная)?
  8. Описать способ хранения двоичного дерева, используемый в древесной сортировке.
  9. Что такое регулярная вершина дерева? регулярное поддерево?
  10. Доказать, что древесная сортировка действительно сортирует массив.
  11. Почему нельзя сделать так, чтобы быстрая сортировка давала гарантированную сложность T(n*log(n))? (Подсказка: причина в алгоритме выбора среднего элемента)
  12. Как мы можем гарантировать пространственную сложность O(log(n)) при реализации метода быстрой сортировки?
  13. Доказать, что сортировка слиянием действительно сортирует массив.
  14. Доказать, что сортировка распределением действительно сортирует массив.





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.