Решение задач на использование алгоритмов обработки данных
Лабораторная работа 46. Решение задач на использование алгоритмов обработки данных
Цель работы: изучить основные приемы разработки алгоритмов обработки данных, научиться применять их при решении задач и учитывать трудоемкость и эффективность используемых алгоритмов.
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая используется для достижения основной цели работы – научиться применять изученные алгоритмы обработки данных при решении задач и проводить анализ алгоритмов в соответствии с их функцией трудоемкости. При выполнении работы возможно использование программных кодов к ранее оформленным лабораторным работам. Ввод данных осуществляется из файлов с учетом требований к входным данным, содержащихся в постановке каждой задачи. Ограничениями на входные данные является максимальный размер строковых данных и диапазоны числовых типов в языке С++.
Теоретические сведения.
Ознакомьтесь с материалом лекции 46.
Задания к лабораторной работе.
Выполните приведенные ниже задания.
- Реализуйте коды программ, приведенные в лекции 46. Откомпилируйте и протестируйте полученные коды.
- Латинским квадратом порядка n называют квадратную матрицу размером nxn, элементы которой принадлежат множеству M={1,2,...,n}, причем каждое число из M встречается ровно один раз в каждой строке и в каждом столбце. Напишите рекурсивную функцию, которая при заданном натуральном n методом перебора с возвратом подсчитывает количество латинских квадратов
- Имеется N кубиков разной массы, у которых грани раскрашены в разные цвета. Необходимо построить максимально высокую башню из таких кубиков, чтобы выполнялись требования:
- нельзя класть тяжелый кубик на более легкий;
- цвета соприкасающихся граней кубиков должны быть одного цвета.
Выходные данные: высота башни, перечень куликов с их порядковым номерами из входных данных с указанием вида верхней грани в башне.
Пример входного файла:
10 1 5 10 3 6 5 2 6 7 3 6 9 5 7 3 2 1 9 1 3 3 5 8 10 6 6 2 2 4 4 1 2 3 4 5 6 10 9 8 7 6 5 6 1 2 3 4 7 1 2 3 3 2 1 3 2 1 1 2 3
Пример выходного файла:
8 1 bottom 2 back 3 right 4 left 6 top 8 front 9 front 10' top
Указания к выполнению работы.
Лабораторная работа носит одновременно практический и исследовательский характер, поэтому для ее выполнения сначала необходимо изучить материал "Алгоритмы обработки данных" , обратив внимание на приведенные примеры и их описание. Каждое задание необходимо решить в соответствии с изученными в предыдущих лабораторных работах алгоритмами обработки данных в языке С++. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, используя функции. Этапы решения сопроводить комментариями в коде. В отчете следует отразить разработку и обоснование математической модели решения задачи. Результаты тестирования программ необходимо провести в соответствии приведенными примерами входных и выходных файлов к задачам (как дополнение допустимы и собственные примеры тестовых данных). В выводе к отчету необходимо сформулировать результаты проведения анализа трудоемкости алгоритмов, сделать выводы о принадлежности каждого алгоритма к определенному классу сложности с обоснованием результата.
Следует реализовать каждое задание в соответствии с приведенными этапами:
- изучить словесную постановку задачи, выделив при этом все виды данных;
- сформулировать математическую постановку задачи;
- выбрать метод решения задачи, если это необходимо;
- разработать графическую схему алгоритма;
- записать разработанный алгоритм на языке С++;
- разработать контрольный тест к программе;
- отладить программу;
- представить отчет по работе.
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
- Титульный лист.
- Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
- Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
- Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
- Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
- Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
- Выводы по лабораторной работе.
- Ответы на контрольные вопросы.
Контрольные вопросы
- На каком этапе общей схемы решения задач по программированию следует определиться с моделью представления данных?
- В чем заключается преимущества поразрядной сортировки по отношению к быстрым сортировкам?
- Приведите пример данных, при сортировке которых поразрядная сортировка трудоемка по времени. Ответ обоснуйте.
- Приведите другую модель представления данных в задаче о перекатывании тетраэдра.
- На чем основана однозначность представления данных при шифровании в энтропийном кодировании?