- •1.Основные понятия эис
- •19. Классификация алгоритмов
- •Классификация Алгоритмов
- •20. Абстрактные типы данных (массивы, связанные списки, выделение памяти)
- •Абстрактные типы данных
- •Элементарные Структуры Данных
- •Массивы
- •Связанные списки
- •Выделение Памяти
- •21. Стеки, очереди, деревья
- •Очереди
- •Деревья
- •Терминология
- •22. Математические характеристики деревьев
- •Свойства
- •23. Обход деревьев
- •Обход Деревьев
- •Алгоритм быстрой сортировки
- •1 2 3 4 5 6 7
- •25. Критерии эффективности алгоритмов (формирование, поиск последовательного масиива)
- •26. Критерии эффективности алгоритма ступенчетого поиска
- •27. Сортировка методом Шелла Сортировка Шелла
- •28. Сортировка простым включением
- •29. Приоритетные очереди
- •30. Радикс сортировка Радикс Сортировка
- •Сортировка Радикс Обменом
- •Прямая Радикс Сортировка
- •Свойства Радикс Сортировок
- •31. Рекурсия Рекурсивные определения
- •Рекурсивные процедуры
- •Итерация и рекурсия
- •32. Рекурсивный обход деревьев, удаление рекурсии Рекурсивный Обход Дерева
- •Удаление Рекурсии
- •33. Элементарные методы сортировки и их характеристики Элементарные Методы Сортировки
- •Правила Игры
- •Сортировка Выбором
- •Сортировка Вставкой
- •34. Простейшие алгоритмы сортировки (методом пузырька, сортировка выбором, шейкер сортировка, ростировка Шелла), сравнение простых методов сортировки. Пузырьковая Сортировка
- •Характеристики Простейших Сортировок
- •Сортировка Файлов с Большими Записями
- •Сортировка Шелла
- •Подсчет Распределения
- •35. Алгоритмы быстрой сортировки, разрядная сортировка Алгоритм быстрой сортировки
- •1 2 3 4 5 6 7
- •36. Пирамидальная сортировка Пирамидальная сортировка
- •37. Сортировка слиянием (простое слияние, двухпутевое слияние, рекурсивный алгоритм слияния) Сортировка слиянием
- •Простое слияние
- •Y 1 2 3 4 5 6 7 8
- •Естественное двухпутевое слияние
- •Рекурсивный алгоритм слияния
28. Сортировка простым включением
29. Приоритетные очереди
30. Радикс сортировка Радикс Сортировка
Большинство методов сортировки предполагают, что ключ сортировки может быть произвольной сложности. Другими словами, не делается никаких предположений о том, насколько ключ сложен. Такие методы основываются на двух базисных операциях – сравнение ключей и обмен двух записей. Однако, во многих случаях известно, что ключ является числом в некотором диапазоне. Этим можно воспользоваться для получения более эффективного алгоритма. Методы сортировки, которые используют числовые свойства ключей, называются методамирадикс сортировки.Такие методы не просто сравнивают ключи: они обрабатывают и сравнивают ключи по частям.
Радикс сортирующие алгоритмы работают с ключами как с числами некоторого основания М, используя их отдельные цифры. К примеру, представьте себе клерка, который должен отсортировать карточки согласно номеру, находящемуся в диапазоне от 000 до 999. Один из способов это сделать – разложить их в 10 кучек: в одну кучку все карточки с номерами меньшими 100, в другую с номерами от 100 до 199 и т. д. После этого каждую кучку разделить еще на 10 кучек, с номерами 0-9, 10-19 и т.д. Подобная процедура повторяется до тех пор, пока кучки не окажутся достаточно маленькими для сортировки2. Этот простой пример демонстрирует радикс сортировку для М=10. Для компьютера более удобным представляется использовать радикс М=2 (или степени 2) вместо 10.
Все что хранится в памяти компьютера можно представить в виде бинарного числа, поэтому, вообще говоря, радикс сортировку можно применить к любому ключу. Если ключ представляет собой запись, поля этой записи можно также рассматривать как «цифры».
Биты
Пусть ключ представлен как бинарное число; нам необходима операция извлечения из этого ключа последовательности битов с какой-либо позиции. Пусть нам нужно обработать целые ключи лежащие между 0 и 1000. Мы можем считать, что эти ключи предоставлены как 10-ти битовые целые. В ассемблере биты извлекаются посредством побитовой операции "and"и сдвигов. Например, старшие два бита десяти-битового числа извлекаются посредством сдвига числа на 8 позиций вправо и его побитового"and"с 0000000011. В Паскале мы можем симулировать эти операции посредством использования операторов"div"и"mod". Можно также использовать операторы"shr"и"and". Например, вышеупомянутая операция может быть описана либо как (x div 256) mod 4 или как (x shr 8 and 3). Далее мы будем считать, что у нас есть некая функция bits(x,k,j:integer) для извлечения из числа х с позиции k b бит.
Вооруженные этим мы рассмотрим два метода сортировки, отличающихся друг от друга порядком просмотра ключей. Мы будем считать, что ключи достаточно длины, и стόят того, чтобы дробить их на более мелкие. Для коротких ключей можно использовать сортировку методом подсчета распределения. Как мы помним, этот метод использует линейное время для сортировки Nключей в диапазоне от 0 доN-1 и использует дополнительный массив размераN. Таким образом, если мы можем себе позволить таблицу размера, то мы можем отсортировать файл за линейное время. Радикс же сортировка становится необходимой тогда, когда ключи достаточно длины (скажем b=32).
Первый метод, который мы исследуем, обрабатывает биты слева направо. Он основывается на том факте, что цифры всегда идут по порядку: 0 всегда предшествует 1, и т.д. Такой метод называется сортировка радикс обменом.
Второй метод исследует биты в ключах справа налево. Он основан на интересном принципе, который сводит сортировку b-битного ключа к b сортировкам однобитного ключа. Этот метод называется прямаярадикссортировка.