Главная страница
Навигация по странице:

  • Вариант 4.

  • Теоретические сведения Алгоритмизация задачи

  • Свойства алгоритма. - Дискретность

  • - Понятность

  • Линейный

  • Циклический алгоритм

  • Оценка корректности алгоритма

  • Вопросы по ОП.08 Теория алгоритмов

  • ЛИТЕРАТУРА: Основная

  • КОНТРОЛЬНОЕ ЗАДАНИЕ ПО ОП.08 Теория алгоритмов для студентов заочной формы обучения специальности 09.02.03 Программирование в ко. КОНТРОЛЬНОЕ ЗАДАНИЕ ПО ОП.08 Теория алгоритмов для студентов зао. Контрольное задание по оп. 08 Теория алгоритмов


    Скачать 217.5 Kb.
    НазваниеКонтрольное задание по оп. 08 Теория алгоритмов
    АнкорКОНТРОЛЬНОЕ ЗАДАНИЕ ПО ОП.08 Теория алгоритмов для студентов заочной формы обучения специальности 09.02.03 Программирование в ко
    Дата24.09.2018
    Размер217.5 Kb.
    Формат файлаdoc
    Имя файлаКОНТРОЛЬНОЕ ЗАДАНИЕ ПО ОП.08 Теория алгоритмов для студентов зао.doc
    ТипДокументы
    #32177
    КатегорияДоп. образование
    страница2 из 2
    1   2

    Задание 5. Выполнить задание согласно варианту.

    Вариант 1. Составить алгоритм нахождения значения функции у= 5/х-1.

    Вариант 2. Составить блок-схему нахождения корней квадратного уравнения.

    Вариант 3. Составить схему алгоритма для вычисления значений функции

    от значения x1 = 1 до значения xn = 5 с шагом Δx=0,5.

    Вариант 4. Составить алгоритм вычисления значений функции для всех x.

    Вариант 5. Составить алгоритм вычисления значений функции для всех x, принадлежащих отрезку [-3,3], с шагом 1. Записать его в виде блок-схемы.

    Вариант 6. Составить алгоритм вычисления значений функции для всех x, принадлежащих отрезку [-8,8], с шагом 1. Записать его в виде блок-схемы.
    Вариант 7. Составить алгоритм вычисления значений функции для всех x, принадлежащих отрезку [-7,10], с шагом 1. Записать его в виде блок-схемы.

    Вариант 8. Составить алгоритм вычисления значений функции для всех x, принадлежащих отрезку [-10,10], с шагом 2,5. Записать его в виде блок-схемы.

    Вариант 9. Составить алгоритм вычисления значений функции для всех x, принадлежащих отрезку [-4,4], с шагом 1. Записать его в виде блок-схемы.

    Вариант 10. Составить алгоритм вычисления значений функции для всех x, принадлежащих отрезку [-10,1], с шагом 0.5. Записать его в виде блок-схемы.
    Коды проверяемых профессиональных и общих компетенций при выполнении данного контрольного задания:

    ПК 1.1. Выполнять разработку спецификаций отдельных компонент.

    ПК 1.2. Осуществлять разработку кода программного продукта на основе готовых спецификаций на уровне модуля.

    ОК1. Понимать сущность и социальную значимость своей будущей профессии, проявлять к ней устойчивый интерес;

    ОК2. Организовывать собственную деятельность, выбирать типовые методы и способы выполнения профессиональных задач, оценивать их эффективность и качество;

    ОК3. Принимать решения в стандартных и нестандартных ситуациях и нести за них ответственность;

    ОК4. Осуществлять поиск и использование информации, необходимой для эффективного выполнения профессиональных задач, профессионального и личностного развития;

    ОК8. Самостоятельно определять задачи профессионального и личностного развития, заниматься самообразованием, осознанно планировать повышение квалификации.

    Теоретические сведения
    Алгоритмизация задачи — процесс разработки (проектирова­ния) алгоритма для решения задачи с помощью ЭВМ.

    На этапе постановки задачи описываются исходные данные и предпосылки, формируются правила начала и окончания ре­шения задачи (достижения цели), т. е. разрабатывается информа­ционная или эквивалентная ей математическая модель. Алгорит­мов построения моделей не существует. Методом проб и ошибок ведется поиск метода решения задачи. На ос­новании этого метода разрабатывается исходный алгоритм, реа­лизация которого принципиально возможна с помощью ЭВМ. При разработке исходного алгоритма и даже при выборе модели пользователь, решающий конкретную задачу, дол­жен иметь представление о математическом обеспечении ВС или ЭВМ.

    Алгоритм — понятное и точное предписание исполнителю со­вершить последовательность действий, направленных на достижение указанной цели или на решение поставленной задачи.

    Таким образом, изучающиеся в школе правила сло­жения, вычитания, деления, умножения чисел, правила преобра­зования алгебраических выражений, правила построения геомет­рических фигур, грамматические правила правописания слов и предложений — все это алгоритмы. Многие правила, инструкции, записанные в воинских уставах, функциональных, должностных обязанностях, представляют собой подробнейшие указания, годные во всевозможных ситуациях.

    Еще одна причина для изучения алгоритмов заключается в том, что этот про­цесс развивает у учащихся умение аналитически мыслить. В конце концов, алго­ритмы можно рассматривать как особый подход к решению задач, когда важны не столько сами ответы, сколько точные инструкции для их получения. Следователь­но, специальные методы проектирования алгоритмов можно считать стратегиче­ским планом решения задачи, который пригодится в любом случае, независимо от того, используется компьютер или нет. Само собой разумеется, что круг задач, которые могут быть решены с помощью какого-либо алгоритма, по существу зави­сит от точности алгоритмического мышления. Например, невозможно сформули­ровать алгоритм, который позволит прожить счастливую жизнь или стать богатым и знаменитым.

    Свойства алгоритма.

    - Дискретность – выполнение алгоритма разбивается на последовательность законченных шагов, каждое действие должно быть закончено прежде, чем наступит следующее действие.

    - Понятность – Алгоритм должен быть понятен исполнителю.

    -Определенность (точность) — будучи понятным, алгоритм не должен содержать предписаний, смысл которых может пониматься неоднозначно, т.е. алгоритм должен исключить произвольное толкование как каждого из предписаний, так и последовательности их выполнения.

    - Результативность — либо завершение решения задачи после выполнения алгоритма, либо вывод о невозможности продол­жения решения по какой-либо из причин, т. е. алгоритм должен oбeспечивать возможность получения результата после конечного числа шагов.

    - Массовость — единообразное применение алгоритма к любой конкретной формулировке, для решения которой он разра­ботан, т.е. алго­ритм должен обеспечивать возможность его применения для ре­шения класса однотипных задач.

    Команда алгоритма - предписание о выполнении отдельного законченного действия исполнителя.

    В процессе алгоритмизации задачи исходный алгоритм раз­бивают на отдельные частные алгоритмы (шаги).

    Виды алгоритмов:

    Частные алгоритмы могут быть линейными, разветвляющими­ся и циклическими. Практически любой сложный алгоритм можно представить в виде комбинации этих трех базовых алгоритмических структур.

    Линейный алгоритм (последовательность)—последовательность команд (указаний), выполняе­мых только один раз в порядке их следования.

    Разветвляющийся алгоритм (альтернатива)- алгоритм, содержащий хотя бы одно условие, в результате проверки которого обеспечи­вается переход на один из двух возможных шагов.

    Циклический алгоритм - алгоритм, предусматривающий многократное повторение одного и того же действия (одних и тех же операций) над новыми исходными данными.

    Оценка корректности алгоритма

    После представления алгоритма в какой-либо форме, необходимо оценить его корректность. Это означает, что вы должны доказать, что выбран­ный алгоритм за ограниченный промежуток времени выдает требуемый результат для любых корректных значений входных данных. Например, корректность алго­ритма Евклида для вычисления НОД двух чисел, тип, следует из правильности равенства gcd (т, n) = gcd (n, mmod n), которое, в свою очередь, должно быть доказано, а также из простого наблюдения, что второе чис­ло на каждой итерации будет все время уменьшаться, и по достижении им нуля, выполнение алгоритма прекращается.

    Доказать корректность одних алгоритмов очень легко, других — невероятно сложно. Универсальным методом доказательства корректности алгоритма считает­ся метод математической индукции. Дело в том, что алгоритмы по своей природе являются итеративными и описываются в виде последовательности пошаговых инструкций, которые как раз и используются при доказательстве методом индук­ции. Стоит отметить, что, хотя отслеживание быстродействия алгоритма с по­мощью нескольких наборов тщательно подобранных входных данных приводит к очень полезным результатам, подобную проверку нельзя считать убедительной при доказательстве корректности алгоритма. Однако доказательством некоррект­ной работы алгоритма может служить лишь один набор входных данных, при обработке которых получается неправильный результат. Если некорректная ра­бота алгоритма будет доказана, придется либо несколько видоизменить его, не выходя за рамки принятых структур данных, методов проектирования и т.п., ли­бо решать проблему более кардинально, пересмотрев принятые ранее принципы и подходы.

    Анализ алгоритма

    Обычно создатели алгоритмов стараются, чтобы они удовлетворяли несколь­ким требованиям. После проверки корректности алгоритма одной из самых важ­ных характеристик является оценка его эффективности. На практике существует два вида оценки эффективности алгоритма: временная и пространственная. Вре­менная эффективность (time efficiency) является индикатором скорости работы алгоритма. Что касается пространственной эффективности (space efficiency), то эта оценка показывает количество дополнительной оперативной памяти, необ­ходимой для работы алгоритма.

    Еще одной важной характеристикой алгоритма является его простота (sim­plicity). В отличие от эффективности, которую можно точно определить и оце­нить с помощью строгих математических выражений, простота алгоритма чем-то напоминает человеческую красоту, понятие которой настолько субъективно, что выработать объективные критерии ее оценки весьма непросто. Например, боль­шинство людей считают, что алгоритм Евклида поиска НОД двух чисел проще, чем тот, которому нас учили в школе, но это вовсе не означает, что он понятнее. В то же время алгоритм Евклида проще алгоритма последовательного перебора целых чисел. Тем не менее простота является важной характеристикой алгорит­ма, и к ней нужно стремиться. Вы спросите, почему? Дело в том, что простые алгоритмы легче понять и запрограммировать. Следовательно, в полученной про­грамме будет содержаться меньше ошибок. Кроме того, в простоте существует неоспоримая эстетическая привлекательность. Ну и наконец, простые алгоритмы зачастую более эффективны, чем их сложные аналоги. К сожалению, последнее утверждение не всегда выполняется. В подобных случаях необходимо руковод­ствоваться здравым смыслом и принимать компромиссные решения.

    Следующей важной характеристикой алгоритма является его общность, или универсальность (generality). По сути, здесь можно выделить два момента: общ­ность задачи, для решения которой разработан алгоритм, и диапазон допустимых значений его входных данных. По поводу первого замечания следует сказать, что иногда легче разработать алгоритм для решения общей задачи, чем заниматься поиском решения ее частного случая. В качестве примера рассмотрим такую за­дачу: определить, являются ли два целых числа взаимно простыми. Напомним, что два числа считаются взаимно простыми, если у них нет общих делителей, кроме 1. В данном случае легче разработать алгоритм для решения общей задачи вычисления НОД двух целых чисел. Затем, чтобы решить исходную задачу, достаточно подставить заданные числа в функцию gcd и проверить, равно ли ее значение 1. Однако бывают случаи, когда разработка более общего алгоритма нежелательна, затруднена или даже невозможна. Например, излишне выполнять сортировку всего списка, содержащего п чисел, чтобы определить их медиану, поскольку достаточно просто найти значение лг-го наименьшего элемента, где т = \п/2]. Еще один пример: известно, что стандартную формулу для поиска корней квадратного уравнения нельзя обобщить для поиска корней полиномов более высоких степеней.

    Что касается диапазона допустимых значений входных данных алгоритма, то здесь нужно отметить следующее. При разработке алгоритма нужно учитывать, что диапазон изменения значений входных параметров может колебаться в очень широких пределах и должен естественным образом соответствовать решаемой за­даче. Например, неестественно в алгоритме поиска НОД исключать из рассмотре­ния значения входных параметров, равные 1. С другой стороны, хотя стандартную формулу корней квадратного уравнения можно использовать и в случае комплекс­ных коэффициентов, при принятом уровне обобщения этот случай исключают из рассмотрения, поскольку он должен оговариваться отдельно.

    Если вас не устраивает эффективность, простота или общность алгоритма, придется снова взять в руки карандаш и перепроектировать алгоритм. И даже если анализ алгоритма привел к положительным результатам, имеет смысл по­искать другое алгоритмическое решение задачи. Достаточно вспомнить три алго­ритма определения НОД, рассмотренных в предыдущем разделе. Вообще говоря, не стоит надеяться, что вы с первой попытки найдете оптимальное решение за­дачи. Самое меньшее, что можно сделать, попытаться оптимизировать созданный алгоритм. Всегда помните высказывание Антуана де Сент-Экзюпери (Antoine de Saint-Exupery), известного французского писате­ля, летчика и авиаконструктора: "Конструктор достигает совершенства не тогда, когда ему больше нечего добавить к своему детищу, а тогда, когда больше ничего удалить".

    Важные типы задач

    Среди огромного количества задач, встречающихся в вычислительной тех­нике, можно выделить несколько типов, которым ученые всегда уделяли особое внимание. Подобный интерес вызван либо практическим значением задачи, либо какими-то ценными ее свойствами, представляющими особый интерес для ис­следования.

    В этом разделе кратко рассматриваются наиболее важные типы задач:

    • сортировка;

    • поиск;

    • обработка строк;

    • задачи из теории графов;

    • комбинаторные задачи;

    • геометрические задачи;

    • численные задачи.

    Сортировка

    Задача сортировки (sorting problem) заключается в упорядочении заданного списка каких-либо элементов в возрастающем порядке. Само собой разумеется, что для определенности задачи структура этих элементов списка должна поз­волять их упорядочить. На практике обычно требуется отсортировать по возрастанию список чисел, расположить символы и строки в алфавитном порядке или, что наиболее важ­но, упорядочить набор записей, содержащих различную информацию, наподобие той, что хранится в папках со сведениями об учащихся школы, в читательских формулярах библиотеки, в отделе кадров о сотрудниках организации. В случае набора записей необходимо выбрать фрагмент записи, содержащий данные, по которым будет осуществляться сортировка. Например, набор записей о студентах можно отсортировать по фамилии, идентификационному номеру или по среднему баллу. Специально отобранный фрагмент данных называется ключом (key). Спе­циалисты по информатике часто говорят о сортировке списка ключей, даже если элементы этого списка являются не записями, а, скажем, целыми числами.

    Поиск

    Задача поиска связана с нахождением заданного значения, называемого клю­чом поиска (search key), среди заданного множества. Существует огромное количество алгоритмов поиска, так что есть из чего выби­рать. Их сложность варьируется от самых простых алгоритмов поиска методом последовательного сравнения, до чрезвычайно эффективных, но ограниченных алгоритмов бинарного поиска, а также алгоритмов, основанных на представлении базового множества в иной, более подходящей для выполнения поиска форме. По­следние из упомянутых здесь алгоритмов имеют особое практическое значение, поскольку применяются в реально действующих приложениях, выполняющих вы­борку и хранение массивов информации в огромных базах данных.

    Для решения задачи поиска также не существует единого алгоритма, который бы наилучшим образом подходил для всех случаев. Некоторые из алгоритмов выполняются быстрее остальных, но для их работы требуется дополнительная оперативная память. Другие выполняются очень быстро, но их можно применять только для предварительно отсортированных массивов, и т.п. В отличие от ал­горитмов сортировки в алгоритмах поиска нет проблемы устойчивости, но при их использовании могут возникать другие сложности. В частности, в тех прило­жениях, где обрабатываемые данные могут часто изменяться, причем количество изменений сравнимо с количеством операций поиска, поиск следует рассматри­вать в неразрывной связи с двумя другими операциями — добавления элемента в набор данных и удаления из него. В подобных ситуациях необходимо видоизме­нить структуры данных и алгоритмы так, чтобы достигалось равновесие между требованиями, выдвигаемыми к каждой операции. Кроме того, организация очень больших наборов данных с целью выполнения в них эффективного поиска (а так­же добавления и удаления элементов) представляет собой чрезвычайно сложную задачу, решение которой особенно важно с точки зрения практического приме­нения.

    Обработка строк

    В связи с быстрым увеличением в последнее время количества приложений, связанных с обработкой нечисловых данных, интерес ученых и специалистов-практиков все больше привлекают алгоритмы обработки строк. Строкой (string) называется последовательность символов, взятых из заранее определенного алфа­вита. Практический интерес представляют, например, текстовые строки, состоя­щие из букв, цифр и специальных символов; битовые строки, состоящие из нулей и единиц; последовательности генов, которые могут быть смоделированы с по­мощью строк символов, взятых из четырехсимвольного алфавита {А, С, G, Т}. Тем не менее стоит отметить, что алгоритмы обработки строк стали важны для вычислительной техники очень давно — с тех пор, как появились первые языки программирования и соответствующие им программы — компиляторы.

    Существует одна специфическая задача, которая привлекла особое внимание специалистов по информатике. Речь идет о поиске заданного слова в строке текста. Ее назвали поиском подстрок (string matching). Для выполнения такого специ­фического поиска разработано несколько алгоритмов.

    Задачи из теории графов

    Одной из самых старых и, пожалуй, наиболее интересных областей алгоритмики является обработка графов. Нестрого граф можно определить как набор точек, называемых вершинами, часть из которых соединена отрезками, называемыми ребрами. (Более строгое определение графа будет дано в следующем разделе.)

    Графы являются довольно интересным объектом для изучения как с теоретиче­ской, так и с практической точек зрения. С помощью графов можно смоделировать довольно большое количество процессов, происходящих в реальной жизни, на­пример функционирование транспортных и коммуникационных сетей, календар­ное планирование проекта и т.д. Одна из последних интересных задач — оценка "диаметра" Web, заключающаяся в определении максимального количества ссы­лок, которые нужно пройти от одной Web-страницы до другой по оптимальному маршруту.

    К числу основных алгоритмов теории графов относят следующие:

    • алгоритмы обхода графа (этот класс алгоритмов позволяет ответить на
      такие вопросы, как каким образом можно объехать все узлы железно­
      дорожной сети);

    • алгоритмы определения кратчайшего пути (этот класс алгоритмов поз­-
      воляет ответить на вопросы наподобие следующего: каков кратчайший
      путь между двумя городами);

    • алгоритмы топологической сортировки для ориентированных графов
      ребрами (этот класс алгоритмов позволяет выяснить, не является ли
      множество читаемых студентам курсов внутренне противоречивым).



    Вопросы по ОП.08 Теория алгоритмов

    1. Алгоритмы. Общие сведения. Основные требования к алгоритмам. Свойства алгоритмов. Способы представления алгоритмов.

    2. Основные алгоритмические структуры.

    3. Машина Поста.

    4. Машина Тьюринга.

    5. Алгоритмически неразрешимые проблемы.

    6. Арифметика многоразрядных целых чисел.

    7. Комбинаторные алгоритмы. Классические задачи комбинаторики.

    8. Генерация комбинаторных объектов.

    9. Перебор и методы его сокращения.

    10. Сортировка. Метод грубой силы.

    11. Исчерпывающий перебор. Задача коммивояжора. Задача о рюкзаке.

    12. Метод декомпозиции. Сортировка слияние.

    13. Быстрая сортировка. Двоичный поиск.

    14. Алгоритмы на графах. Представление графа в памяти компьютера.

    15. Поиск в графе( в глубину, в ширину).

    16. Кратчайшие пути.

    17. Динамическое программирование.

    18. Алгоритмы вычислительной геометрии.

    19. Сравнительные оценки алгоритмов. Классификация алгоритмов по виду функции трудоёмкости.

    20. Теория сложности вычислений и сложностные классы задач.

    21. Рекурсивные алгоритмы и методы их анализа.


    ЛИТЕРАТУРА:
    Основная:

    1. Верещагин, Н.К. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции [Электронный ресурс]/ Верещагин Н.К., Шень А.— Электрон. текстовые данные.— М.: МЦНМО, 2012.— 160 c. ISBN:978-5-4439-0014-8

    2. Ершов Ю.Л. Математическая логика [Электронный ресурс]: учебное пособие/ Ершов Ю.Л., Палютин Е.А.— Электрон. текстовые данные.— М.: ФИЗМАТЛИТ, 2011.— 356 c ISBN:978-5-9221-1301-4


    Дополнительная:


    1. Алексеев В.Е. Графы и алгоритмы. Структуры данных. Модели вычислений [Электронный ресурс]: учебник/ Алексеев В.Е., Таланов В.А.— Электрон. текстовые данные.— М.: БИНОМ. Лаборатория знаний, Интернет-Университет Информационных Технологий (ИНТУИТ), 2012.— 320 c. ISBN:5-9556-0066-3

    2. Окулов, С. М. Программирование в алгоритмах / С. М. Окулов. — М.: БИНОМ. Лаборатория знаний, 2002. — 341 с: ил. ISBN 5-94774-010-9


    1   2


    написать администратору сайта