Генерирование всех перестановок заданного множества в антилексикографическом порядке
Генератор перестановок как программа, которая генерирует все возможные перестановки элементов некоторого множества. Этапы и подходы к ее разработке с помощью языка программирования С++., предъявляемые требования и анализ функциональных возможностей.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 20.02.2019 |
Размер файла | 691,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Введение
В данной курсовой работе необходимо составить программу, которая будет генерировать все перестановки заданного множества в антилексикографическом порядке. Генератор перестановок - это программа, которая генерирует все возможные перестановки элементов некоторого множества.
В качестве среды разработки была выбрана среда MicrosoftVisualStudio 2010, язык программирования - С++. В ходе выполнения данной курсовой работы были приобретены навыки работы с формами и их элементами в среде MicrosoftVisualStudio 2010, навыки работы с проектами и многомодульными программами.
Постановка задачи
генератор перестановка программа
Задание для курсового проектирования заключается в создании программного продукта, позволяющего наглядно представить все возможные варианты перестановок элементов множества. Одна из главных особенностей этого программного продукта - представление результата перестановок в антилексикографическом порядке.
Для удовлетворения требований задачи был выбран язык C++. C++ - компилируемый, статически типизированный язык программирования общего назначения. Язык имеет богатую стандартную библиотеку, которая включает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регулярные выражения, поддержку многопоточности и другие возможности. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником - языком C, - наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. [
C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие.
Синтаксис C++ унаследован от языка C. Одним из принципов разработки было сохранение совместимости с C. Тем не менее, C++ не является в строгом смысле надмножеством C; множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико, но не включает все возможные программы на C.
1. Теоретическая часть задания
Генератор перестановок - это программа, которая генерирует все возможные перестановки элементов некоторого множества. Например, для множества из трёх элементов {1,2,3} это будут (если отсортировать «по алфавиту»):
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
Общее количество перестановок для множества мощностью n считается по формуле: n!.Алгоритм для генерации перестановок в антилексикографическом порядке может базироваться на двух утверждениях:
1) Если множество перестановок P упорядочено антилексикографически, то начальная и конечная перестановки - это соответственно (1, 2, …, n) и (n, n-1,…, 1).
2) Упорядоченная антилексикографически последовательность перестановок по значению последнего элемента в них может быть разбита на n блоков длины (n-1)!. При этом q-й блок на последнем месте имеет элемент, равный (n-q+1), а первые n-1 позиций этого блока определяют последовательность перестановок множества {1,2,…, n}\{q} в антилексикографическом порядке.
Пример перестановок в антилексикографическом порядке для множеств {1,2,3} и {1,2,3,4}:! Представлен на рисунке 1.
Рисунок 1. Перестановка в антилексикографическом порядке
Антилексикографический порядок: (x1, …, xn) < (y1, …, yn) ? существует k ? n, такое что xk > yk и xl = yl для каждого l > k.
2. Описание алгоритма поставленной задачи
В качестве алгоритма генераций перестановок, рассмотрим Антилексикографическое генерирование всех перестановок для n=4. Таких перестановок будет 4!=24. Эти перестановки можно разбить на четыре блока, каждый из которых содержит 3!=6 перестановок, по значению элемента в первой позиции. В первом блоке справа налево на первом месте стоит 1, во втором - 2, в третьем - 3, в четвертом - 4. выполним следующее: разобьём все перестановки на 4 блока. Далее в каждом блоке генерируем все перестановки элементов в антилексикографическом порядке. Генерация представлена на рисунке 2.
В результате получаем:
1 2 3 42 1 3 41 3 2 43 1 2 42 3 1 43 2 1 4 |
1 2 4 32 1 4 31 4 2 34 1 2 32 4 1 34 2 1 3 |
1 3 4 23 1 4 21 4 3 24 1 3 23 4 1 24 3 1 2 |
2 3 4 13 2 4 12 4 3 14 2 3 13 4 2 14 3 2 1 |
Рисунок 2. Генерация всех перестановок элементов в антилексикографическом порядке
3. Пример ручного расчёта задачи и вычислений
Для ручного расчёта решим задачу в виде лексикографического генерирования всех перестановок для множества модностью в n элементов. Для наглядности и относительной простоты, выберем относительно небольшую мощность, где n=3.
Далее задаем сами элементы множества. Возьмём первые четыре буквы алфавита: А, Б, В.
Теперь нужно посчитать сколько всего будет перестановок: 3!=6.
И предпоследним действием определим содержание первой строки, этой строкой как раз и будет упорядоченная последовательность элементов в алфавитном порядке, то есть - первая строка будет такой: А, Б, В.
После всего вышеизложенного идёт само комбинирование вариантов генерации по принципу от старшего к младшему (справа налево), представленное на рисунке 3.
Значение Комментарий
А Б ВБ А ВА В БВ А ББ В АВ Б А |
Исходная строкаБ и А меняются местамиБ переходит с 1 места на 3В и А меняются местамиА переходит со 2 места на 1В и Б меняются местами |
Рисунок 3. Генерация всех перестановок элементов «букв» в антилексикографическом порядке
4. Описание программы
Общее описание
Задание для курсового проектирования заключается в создании своего программного продукта, позволяющего, позволяющего наглядно представить все возможные варианты перестановок элементов множества в антилексикографическом порядке. Целью было не только создание быстродействующих алгоритмов генерации и сортировки, но и универсальность программы. Важным свойством продукта является его умение «справляться» с большинством ошибок, которые может допустить простой пользователь. Программа отрабатывает случаи с нестандартными наборами исходных данных.
Программный продукт имеет свой собственный дизайн и простой, интуитивно понятный обычному пользователю, интерфейс.
Функции программы
Для удобства и простоты пользования программой, а также для обеспечения наибольшего быстродействия разделим программу на 3 функции.
Функция «swap»
Функция swap обменивает значения своих аргументов.
Функция «reverse»
Функция reverse - сортировка. Функция возвращает строку, обратную строке «n»
Функция «antilex»
Основная работа по генерации перестановок выполняется именно рекурсивной процедурой Antilex.
5. Тесты
Для тестирования используем 2 различных по типам наборов данных:
1. Некорректное введение данных;
2. Допустимое введение данных.
Проверка реакции программы на неверно введенные данные (буквы). Результаты тестирования представлены на рисунках 4-6.
Рисунок 4. Окно ошибок при вводе в программу некорректной записи данных
В результате тестирования №1 было выявлено, что программа успешно проверяет введенные с клавиатуры данные на соответствие необходимым требованиям.
Проверка реакции программы на верно введенные данные:
Рисунок 5. Результат тестирования программы с тестируемым набором «1 2 3»
Рисунок 6. Результат тестирования программы при вводе факториального множества
В результате тестирования №2 было выявлено, что программа успешно выполняет представление всевозможных вариантов перестановок элементов множества в антилексикографическом порядке.
6. Результаты работы программы
На рисунках 7 - 13 представлена работа программы в 3 фазах: запуск, ввод данных и вывод результата.
Рисунок 7. Состояние программы при запуске
Рисунок 8. Состояние программы при вводе данных
Рисунок 9. Состояние программы при вводе данных
Рисунок 10. Состояние программы при вводе данных
Рисунок 11. Состояние программы при вводе данных
Рисунок 12. Состояние программы при выводе результата
Рисунок 13. Состояние программы при выводе результата
Заключение
В ходе работы было реализовано создание программного продукта, позволяющего наглядно представить все возможные варианты перестановок элементов множества. Одна из главных особенностей этого программного продукта - представление результата перестановок в антилексикографическом порядке. Поставленная задача была полностью реализована.
Список литературы
1. Новиков Ф.А. «Дискретная математика для программистов» 2-е изд. - СПб.: Питер, 2000.
2. Электронный ресурс: http://popoff.donetsk.ua/text/donntu/flp/antilex.html Дата обращения: 10.11.2017.
3. Герберт Шилдт «Полный справочник по C++» - Вильямс, 2006 5. Х.М. Дейтел, П.Дж. Дейтел «Как программировать на C++» - Бином-Пресс, 2008.
4. Электронный ресурс: https://prog-cpp.ru/permutation/ Дата обращения: 10.11.2017.
...Подобные документы
Постановка задачи. Математическое обоснование. Последовательность разбиений множества. Язык программирования. Реализация алгоритмов. Генерирование разбиений множества. Генерирование всех понятий.
курсовая работа [29,9 K], добавлен 20.06.2003Решение задач по информатике, перебор различных комбинаторных конфигураций объектов и выбор наилучшего, с точки зрения условия задачи. Генерация k-элементных подмножеств, всех подмножеств данного множества, всех перестановок n-элементного множества.
реферат [44,0 K], добавлен 03.01.2010Теория множества, основные операции над множествами, мощность множества. Теорема о сравнении множеств. Размер множества в Turbo Pascal, предельно допустимое количество элементов и их порядок. Выполнение действий объединения, исключения и пересечения.
курсовая работа [376,6 K], добавлен 31.01.2016Перестановки и инверсии. Алгоритм восстановления перестановки по таблице инверсий. Итерационный алгоритм генерации всех таблиц инверсий. Перебор перестановок - рекурсивный, через перебор таблиц инверсий; итерационный с лексикографическим упорядочением.
презентация [166,3 K], добавлен 19.10.2014Сортировка как процесс перегруппировки заданного множества объектов в некотором определенном порядке, основные этапы данного процесса. Способы формирования начальных отрезков. Описание структуры программы. Результаты испытаний, их исследование и анализ.
курсовая работа [111,6 K], добавлен 31.01.2014Основные этапы определения радиуса и центра окружности, проходящей через три различные точки заданного множества точек. Особенности построения алгоритма на языке программирования. Составление тестовых примеров для демонстрации возможностей программы.
контрольная работа [103,9 K], добавлен 21.08.2013Программный комплекс по обработке заданного множества данных в динамической памяти компьютера. Запросы к массиву записей множества данных – групп в детском саду. Функция сортировки массива по числовому полю. Использование главной программы MAINPRO.
курсовая работа [419,3 K], добавлен 23.07.2014Методы поиска подмножеств множества вершин V графа G, удовлетворяющих определенным условиям и свойствам. Понятие независимых множеств и порядок их генерации. Определение доминирующего множества. Основные этапы решения задачи о наименьшем разбиении.
контрольная работа [32,1 K], добавлен 11.03.2010Входная грамматика в структурированной форме. Функции переходов символьного преобразователя. Работа лексического анализатора. Структуры данных, символы действия. Описание семантики перевода. Построение и программная реализация атрибутного преобразователя.
курсовая работа [128,9 K], добавлен 03.07.2013Понятие нечеткого множества и функции принадлежности. Методы дефаззификации (преобразования нечеткого множества в четкое число) для многоэкстремальных функций принадлежности. Нечеткий логический вывод. Примеры выпуклого и невыпуклого нечеткого множества.
презентация [111,7 K], добавлен 16.10.2013Сущность понятия "комбинаторика". Программа формирования перестановок, сочетаний, размещений с выводом результатов на экран дисплея. Алгоритм программы, написанной на языке Паскаль. Список идентификаторов переменных программы. Список процедур программы.
лабораторная работа [19,8 K], добавлен 27.07.2010Методика решения задачи по выбору подмножества, состоящего из нескольких компонент. Характеристики, порядок записи и листинг программ по генерации множества всех подмножеств из N элементов и генерации последовательности чисел в лексикографическом порядке.
реферат [22,4 K], добавлен 07.03.2010Разработка структуры и содержания возможных элементов учебно-методического комплекса по курсу по теме "Строки" и "Множества". Анализ применения АСМ-технологий в учебном процессе. Изучение возможностей и разработка задач для программы "Testingarea".
курсовая работа [1,5 M], добавлен 01.01.2011Порядок проектирования программы, демонстрирующей принцип заполнения очереди и стека и принцип удаления элементов из очереди и стека. Определение класса и всех необходимых функций. Программа на языке С, описание возможностей, используемых для алгоритма.
курсовая работа [254,3 K], добавлен 20.05.2013Программы линейной структуры. Составление программы, которая по заданному номеру и значению соответствующего элемента вычисляет значение всех остальных элементов треугольника. Формулирование одномерного массива с помощью генератора случайных чисел.
отчет по практике [1,2 M], добавлен 01.12.2012Порядок описание процесса разработки модели для разрешения задачи программирования с помощью средств языка программирования. Структуры данных и основные принципы их построения. Этапы компьютерного моделирования. Этапы и значение написания программы.
курсовая работа [19,5 K], добавлен 19.05.2011Общая методика решения задачи определения связанного множества пикселей с помощью функции bwlabel, в языке моделирования Matlab. Возможности оптимизации программы по временным характеристикам для возможности использования функции в анализе видеопотока.
статья [894,5 K], добавлен 11.03.2009Описание возможностей языка программирования Turbo Pascal. Написание программы создания файлов с прямым доступом, которая также будет обрабатывать наборы данных с определенными полями и ограничениями. Контрольный пример работы поисковой программы.
курсовая работа [563,6 K], добавлен 22.01.2016Разработка metaCASE системы, которая по описанию языка автоматически генерирует визуальный редактор, генератор и другие средства инструментальной поддержки. Обмен данными между клиентской и серверной частью. Реализация репозитория для хранения диаграмм.
дипломная работа [2,4 M], добавлен 08.01.2014Общая характеристика возможностей языка программирования C++ Win32 Api. Выбор метода решения задачи по созданию простого графического редактора. Описание проектирования функциональных частей, разработки программы. Тестирование и анализ результатов.
курсовая работа [388,5 K], добавлен 24.01.2016