Реализация алгоритмов сортировки данных средствами функционального программирования
Анализ особенностей обоснования выбора языка программирования. Характеристика аспектов практической реализации алгоритма сортировки данных. Исследование основ метода сортировки Хоара. Рассмотрение его реализации на процедурном языке программирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 19.05.2014 |
Размер файла | 21,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
АКАДЕМИЯ МАРКЕТИНГА И СОЦИАЛЬНО-ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ - ИМСИТ (г. Краснодар)
Факультет информатики и ВТ
Кафедра математики и вычислительной техники
КУРСОВАЯ РАБОТА
по дисциплине "Функциональное и логическое программирование"
на тему: "Реализация алгоритмов сортировки данных средствами функционального программирования"
Краснодар 2014
Реферат
Курсовая работа 12 страниц, 2 листингов, , 6 источников.
Данные, сортировка, алгоритм, функциональное программирование, f#, реализация
Объектом исследования является мультипарадигмальный язык программирования F#.
Цель работы состоит в приобретении навыков по работе с языком программирования F#, осознании его синтаксиса и особенностей, а так же применение языка F# в решении задач сортировки массивов данных различными способами .
программирование хоар алгоритм
Содержание
Введение
1. Обоснование выбора языка программирования
2. Изучение предметной области
3. Практическая реализация алгоритма сортировки данных
3.1 Быстрая сортировка (сортировка Хоара)
3.2 Реализация на процедурном языке программирования
3.3 Реализация на функциональном языке программирования
Заключение
Список использованных источников и литературы
Введение
Функциональное и логическое программирование - это две различные парадигмы программирования, которые, однако, имеют много общего: они представляют декларативное программирование. В декларативных языках, в отличие от императивных (процедурных или объектно-ориентированных), описывается не алгоритм решения задачи, а знания об объектах и процессах соответствующей предметной области. Алгоритм же вырабатывается и реализуется в ходе логического вывода с помощью специального механизма.
Языки Лисп и Пролог - родились как языки искусственного интеллекта, основанные на математической и логической моделях представления знаний, и были ориентированы именно на процессы принятия решений на основе знаний. В настоящее время эти и другие языки, поддерживающие и развивающие названные парадигмы, становятся все более универсальными и имеют значительные сообщества своих приверженцев.
Наибольшую популярность сейчас имеет язык F#, - современный аналог языков Лисп и Пролог, ставший доступным в большей степени после релиза MS Visual Studio 2010.
1. Обоснование выбора языка программирования
Не так давно было объявлено, что в составе стандартной поставки Visual Studio 2010 появится, помимо Visual Basic и C#, ещё один язык программирования: F#.
F# -это также и объектно-ориентированный язык, прекрасно интегрирующийся с платформой .NET, и в некоторой степени императивный. Можно рассматривать F# как полноценное пришествие функционального программирования на платформу .NET (в смысле его индустриальной доступности), а можно и как еще один .NET-язык с множеством “причуд” и с непривычным, но очень компактным синтаксисом.
Если же начать рассматривать F# с другой стороны, не вдаваясь в его функциональную сущность, то можно заметить, что это компактный язык, в котором есть в т.ч. автоматический вывод типов (нам почти никогда не приходится описывать типы данных для объектов) при статической типизации, в результате чего получается код, как на динамическом языке, но с проверкой типов и более эффективным порождаемым байт-кодом.
Майкрософт в реализации Visual Studio позиционирует F# как язык, удобный для решения различных задач обработки данных. В то же время не предполагается (хотя это и возможно), что F# будет широко использоваться для построения пользовательских интерфейсов, поэтому поддержки F# со стороны визуальных дизайнеров не обещается.
Всё вышесказанное вызывает значительный интерес к языку F# со стороны студентов, преподавателей и академического сообщества в целом.
2. Изучение предметной области
Прежде всего давайте разберемся с определением.
Алгоритм сортировки -- это алгоритм для упорядочения элементов в списке. В случае, когда элемент списка имеет несколько полей, поле, служащее критерием порядка, называется ключом сортировки. На практике в качестве ключа часто выступает число, а в остальных полях хранятся какие-либо данные, никак не влияющие на работу алгоритма.
Итак, каждый алгоритм сортировки состоит из трех основных частей:
Функция сравнения пары элементов сортируемого массива
Процедура перестановки, меняющая местами пару элементов
Сортирующий алгоритм, который осуществляет сравнение и перестановку элементов до тех пор, пока все элементы множества не будут упорядочены.
В данной работе будет рассмотрена реализация метода сортировки Хоара.
3. Практическая реализация алгоритма сортировки данных
3.1 Быстрая сортировка (сортировка Хоара)
Шаги алгоритма быстрой сортировки таковы:
1. Выбираем в массиве некоторый элемент, который будем называть опорным элементом. С точки зрения корректности алгоритма выбор опорного элемента безразличен. С точки зрения повышения эффективности алгоритма выбираться должна медиана, но без дополнительных сведений о сортируемых данных её обычно невозможно получить. Известные стратегии: выбирать постоянно один и тот же элемент, например, средний или последний по положению; выбирать элемент со случайно выбранным индексом.
2. Операция разделения массива: реорганизуем массив таким образом, чтобы все элементы со значением меньшим или равным опорному элементу, оказались слева от него, а все элементы, превышающие по значению опорный -- справа от него. Обычный алгоритм операции:
- Два индекса -- l и r, приравниваются к минимальному и максимальному индексу разделяемого массива, соответственно.
- Вычисляется индекс опорного элемента m.
- Индекс l последовательно увеличивается до тех пор, пока l-й элемент не окажется больше либо равен опорному.
- Индекс r последовательно уменьшается до тех пор, пока r-й элемент не окажется меньше либо равен опорному.
- Если r = l -- найдена середина массива -- операция разделения закончена, оба индекса указывают на опорный элемент.
- Если l < r -- найденную пару элементов нужно обменять местами и продолжить операцию разделения с тех значений l и r, которые были достигнуты. Следует учесть, что если какая-либо граница (l или r) дошла до опорного элемента, то при обмене значение m изменяется на r-й или l-й элемент соответственно, изменяется именно индекс опорного элемента и алгоритм продолжает свое выполнение.
3. Рекурсивно упорядочиваем подмассивы, лежащие слева и справа от опорного элемента.
4. Базой рекурсии являются наборы, состоящие из одного или двух элементов. Первый возвращается в исходном виде, во втором, при необходимости, сортировка сводится к перестановке двух элементов. Все такие отрезки уже упорядочены в процессе разделения.
Поскольку в каждой итерации длина обрабатываемого отрезка массива уменьшается, по меньшей мере, на единицу, терминальная ветвь рекурсии будет достигнута обязательно и обработка гарантированно завершится.
3.2 Реализация на процедурном языке программирования
В качестве примера реализации указанного алгоритма был выбран язык Паскаль, так как он наиболее прост в понимании и более показателен в исполнении.
procedure qSort(var ar: array of real);
procedure sort(var ar: array of real; low, high: integer);
var i, j: integer;
m, wsp: real;
begin
i:=low; j:=high; m:=ar[(i+j) div 2]; // Взятие среднего опорного элемента
repeat
while ar[i]<m do Inc(i); // изменить порядок сортировки можно
while ar[j]>m do Dec(j); // поменяв >< в этих двух строках
if i<=j then begin
wsp:=ar[i]; ar[i]:=ar[j]; ar[j]:=wsp;
Inc(i); Dec(j);
end;
until i>j;
if low<j then sort(ar, low, j);
if i<high then sort(ar, i, high);
end;
begin
sort(ar, 0, High(ar));
end;
Листинг 1 Реализация сортировки методом Хоара на Паскале
3.3 Реализация на функциональном языке программирования
На функциональном языке программирования F# сортировка будет выглядеть значительно более компактно:
let rec quicksort = function
[ ] -> [ ]
| h::t -> quicksort ([ for x in t when x<=h -> x])
@ [h] @ quicksort ([ for x in t when x>h -> x]);;
Листинг 2 Реализация сортировки методом Хоара на языке F#
Итак, мы видим, что F# довольно приятен, плюс ко всему, разница в реализации между Листингом 1 и Листингом 2 наглядно показывает нам, что функциональное программирование - это принципиально иная область, разительно отличающаяся от привычных нам традиционных языков, типа C#.
Так же мы ясно видим, что преимущество функциональных языков программирования перед языками объектно-ориентированными - это чистота функций. Далее, в целом можно сказать, что функциональное программирование позволяет нам писать в несколько раз меньше кода, но при этом заставляет больше времени уделять проектированию и осмыслению кода.
Заключение
В процессе написания данной курсовой работы по предмету «Функциональное и логическое программирование» мной был более подробно изучен язык программирования F#.
Помимо того, был подробно рассмотрен алгоритм сортировки методом Хоара и его реализация на двух различных языках программирования.
Список использованных источников и литературы
1. Сергиевский Г. М. Функциональное и логическое программирование : [учеб. пособие] / Г. М. Сергиевский, Н. Г. Волченков. ЁC М. : Академия, 2010.
2. Томпсон С. Программирование в Erlang / C. Томпсон, Ф. Чезарини. М.: ДМК Пресс, 2012.
3. Сошников Д. Функциональное программирование на F# / Д. Сошников. М.: ДМК Пресс, 2012.
4. Lisper.ru [Электронный ресурс]. ЁC Электрон. дан. ЁC lisper.ru, cop. 2009-2010. ЁC Режим доступа : http://lisper.ru
5. Цуканова Н.И. Логическое программирование на языке Visual Prolog: [учеб. пособие] / Н. И. Цуканова, Т. А. Дмитриева. М.: Горячая Линия - Телеком, 2008
6. Ездаков А. М. Функциональное и логическое программирование : [учебно-методическое пособие] / К. С. Дмитренко, А. М. Ездаков. М.: Бином. Лаборатория знаний, 2011.
7. Лесовская И. Н. Функциональное и логическое программирование : [учеб. пособие] / И. Н. Лесовская, М. В. Курак. М.: Издательский дом ВВИА им. проф. Н.Е.Жуковского, 2009
8. Смит К. Программирование на F#: [учеб. пособие] / К. Смит, А. С. Киселев. М. : Символ-Плюс, 2014.
9. Кубенский А.А. Функциональное программирование : [учеб. пособие] / Г. М. Нефедов, А. А. Кубенский. СПб. : СПбГУ ИТМО.
10. Шалимов П.Ю. Функциональное программирование : [учеб. пособие] / Г. М.: Издательский дом ВВИА им. проф. Н.Е.Жуковского, 2011
Размещено на Allbest.ru
...Подобные документы
Понятие алгоритма и сортировки. Способы и алгоритмы сортировки массивов. Быстрая сортировка Хоара. Описание алгоритма "быстрой сортировки". Реализация на языке программирования. Анализ наихудшего разбиения. Вероятностные алгоритмы быстрой сортировки.
курсовая работа [291,5 K], добавлен 22.03.2012Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.
курсовая работа [1,7 M], добавлен 16.04.2012Анализ основных алгоритмов внутренней сортировки массивов данных, сравнение сложности их реализации и производительности. Сортировка пузырьком, методами вставок, выбора, методом Шелла, быстрая сортировка. Операция разделения массива внутренней сортировки.
курсовая работа [161,7 K], добавлен 17.12.2015Краткое описание языка программирования С++. Алгоритм линейного выбора элемента, методов минимального (максимального) элемента и челночной сортировки. Анализ и разработка приложения, организующего сортировку массива данных пятью методами сортировки.
реферат [614,8 K], добавлен 12.04.2014Исследование основных особенностей алгоритмов быстрой и поразрядной сортировки данных. Построение графиков зависимости времени сортировки от количества элементов в файле и от степени перемешенности элементов. Описания сортировки чисел и строковых данных.
лабораторная работа [1,2 M], добавлен 23.07.2012Изучение алгоритмов внутренней сортировки массивов данных, сравнение сложности их реализации и производительности. Отличительные черты сортировки включением, выбором, разделением, сортировки Шелла, обменной сортировки. Сравнение методов: плюсы и минусы.
курсовая работа [203,8 K], добавлен 03.12.2010Разработка программы для осуществления сортировки данных методами "Выбора" с использованием языка C# и Visual Studio 2012. Плавный метод сортировки. Основные фазы сортировки во внутреннем представлении пирамиды. Программа сортировки методами выбора.
курсовая работа [637,6 K], добавлен 29.11.2014Реализация различных методов сортировки. Алгоритмические языки программирования. Обработка большого числа единообразно организованных данных. Алгоритмы сортировки массивов. Анализ проблем реализации и использования различных видов сортировок массивов.
курсовая работа [640,3 K], добавлен 07.07.2011Определение понятия, видов и задач сортировки. Рассмотрение основ построения простых и улучшенных алгоритмов сортировки, анализ числа операций. Линейная и пирамидальная организация данных. Основные правила нижней оценки числа операций в алгоритмах.
презентация [274,5 K], добавлен 19.10.2014Сущность и порядок реализации простых методов сортировки при составлении программного алгоритма, их классификация и разновидности, отличительные признаки, характерные свойства. Особенности алгоритмов для сортировки файлов записей, содержащих ключи.
реферат [20,7 K], добавлен 20.05.2010Характеристика структурированного языка программирования С, его основных структурных компонентов, области памяти, библиотеки. Методы поиска в массивах данных. Описание программы, функции сортировки и меню выбора, последовательного и бинарного поиска.
курсовая работа [1,7 M], добавлен 19.05.2014Изучение символьных и строковых типов данных, алгоритма задачи на языке программирования Паскаль. Описания получения и установки отдельного символа строки, изменения регистра символов. Анализ создания и просмотра файла, поиска и сортировки информации.
курсовая работа [440,7 K], добавлен 13.06.2011Обработка массивов элементов любого типа как главное назначение алгоритмов сортировки. Анализ наиболее используемых алгоритмов сортировки: пузырьком, выбором, вставками, методом Шелла и быстрой сортировкой. Основные требования к алгоритмам сортировки.
реферат [189,8 K], добавлен 06.12.2014Исследование принципов объектно-ориентированного программирования на базе языка программирования С++. Разработка программного комплекса для ведения учёта памятников города. Описание процессов сортировки, поиска, формирования статистики по памятникам.
курсовая работа [782,4 K], добавлен 26.05.2014Понятие и основной принцип действия алгоритмов сортировки информации. Сравнительное исследование и анализ эффективности методов сортировки Шелла и Флойда в виде графиков зависимостей количества сравнений и числа перестановок элементов от объёма данных.
контрольная работа [573,6 K], добавлен 09.11.2010Оценка временной сложности алгоритма. Механизм сортировки пузырьком и вставками. Основные положения технологии параллельного программирования Ореn MР. Оценка временной сложности некоторых классов алгоритма с помощью параллельного программирования.
дипломная работа [1,7 M], добавлен 27.10.2017Разработка программы, сортирующей массивы данных различного типа методом подсчета. Основные шаги алгоритма сортировки, ее свойства и модификация подсчетом. Целесообразность применения сортировки подсчетом. Условия эффективности алгоритма сортировки.
лабораторная работа [438,5 K], добавлен 16.07.2015Модификация и сравнения двух текстовых файлов. Программа, написанная на языке программирования Cи и работоспособна на IBM совместимых компьютерах. Псевдографический и графический интерфейсы. Анализ программы методом сортировки одномерного массива.
курсовая работа [116,2 K], добавлен 21.02.2008Анализ структуры топологической сортировки в программной среде. Метод топологической сортировки с помощью обхода в глубину. Программа, реализующая топологическую сортировку методом Демукрона. Создание карты сайта и древовидная система разделов.
курсовая работа [1,3 M], добавлен 22.06.2011Создание работоспособного модуля по работе с мобильными картами АЗС. Разработка базы данных в среде программирования Турбо Паскаль для работы с текстами и файловыми структурами. Описание методов алгоритмизации процессов сортировки и редактирования.
курсовая работа [1,9 M], добавлен 05.12.2011