Выполнение каких функций не изменяет позицию указателя в файле? |
Алгоритмы обработки данных
Лабораторная работа 33. Алгоритмы обработки данных
Цель работы: изучить понятие и классификации алгоритмов обработки данных, трудоемкости алгоритмов и методов ее оценки, научиться выработке критериев и оценке трудоемкости алгоритмов с учетом критериев на примере реализаций и задач на языке C++.
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая используется для достижения основной цели работы – научиться классифицировать алгоритмы в соответствии с их функцией трудоемкости. При выполнении работы возможно использование программных кодов к ранее оформленным лабораторным работам. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является максимальный размер строковых данных и диапазоны числовых типов в языке С++.
Теоретические сведения.
Ознакомьтесь с материалом лекции 33.
Задания к лабораторной работе.
Выполните приведенные ниже задания.
- Выполните анализ временной сложности алгоритмов простых сортировок. Проведите сравнительный анализ полученных результатов. Определите классы этих алгоритмов в зависимости от функции трудоемкости.
- Выполните анализ временной трудоемкости алгоритма решения задачи о Ханойских башнях. Определите класс этого алгоритма в зависимости от функции трудоемкости.
- Выполните анализ трудоемкости конструкций вложенных циклов для n=100, n=106, n=109. Составьте функцию временной трудоемкости алгоритма и определите его класс сложности. Считать, что все указанные операции корректны. Возможное переполнение разрядов не учитывать.
k=0; for (a=0; a<n; a++) for (b=0; b<n; b++) for (c=0; c<n; c++) k++;
- Составьте функцию нахождения наибольшего общего делителя двух натуральных чисел по алгоритму Евклида. Выполните анализ временной трудоемкости алгоритма. Определите класс этого алгоритма в зависимости от функции трудоемкости.
- Составьте функцию нахождения наибольшего общего делителя n натуральных чисел, используя алгоритм Евклида для двух чисел. Выполните анализ временной трудоемкости алгоритма. Определите класс этого алгоритма в зависимости от функции трудоемкости.
Указания к выполнению работы.
Лабораторная работа носит одновременно теоретический и исследовательский характер, поэтому для ее выполнения сначала необходимо очень внимательно изучить материал лекции 33. Каждое задание необходимо решить в соответствии с изученными в предыдущих лабораторных работах алгоритмами обработки данных в языке С++. В отчете следует отразить тестовые материалы проведения анализа трудоемкости алгоритмов и сделать выводы о принадлежности каждого алгоритма к определенному классу сложности с обоснованием результата.
Следует реализовать каждое задание в соответствии с приведенными этапами:
- изучить словесную постановку задачи, выделив при этом все виды данных;
- сформулировать математическую постановку задачи;
- выбрать метод решения задачи, если это необходимо;
- разработать графическую схему алгоритма;
- записать разработанный алгоритм на языке С++;
- разработать контрольный тест к программе;
- отладить программу;
- представить отчет по работе.
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
- Титульный лист.
- Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
- Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
- Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
- Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
- Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
- Выводы по лабораторной работе.
- Ответы на контрольные вопросы.
Контрольные вопросы
- С какой целью проводится оценка ресурсной эффективности алгоритмов?
- Почему в теории анализа алгоритмов нет привязки к конкретной реализации?
- Могут ли оценки временной сложности для худшего и лучшего случаев совпадать? Подтвердите вывод примерами.
- Охарактеризуйте область применения алгоритмов классов сложности и .
- В чем особенность оценки трудоемкости рекурсивных алгоритмов?
- Оцените временную трудоемкость рекурсивного и итерационного способов вычисления факториала целого неотрицательного числа. Определите класс сложности алгоритмов в каждом случае. Объясните результат.