Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции3_4_флешка Что такое теоретическая информ...doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
915.46 Кб
Скачать

1.1.2 Функциональная вычислительная модель

В этой модели программа рассматривается как множество определений функций. Отличительной чертой этих моделей является то, что в основу их положена математическая модель, называемая “лямбда-исчислением” Черча. Для представления обычной функции используется выражение f(x).При этом неясно: то ли оно означает функцию f,то ли ее значение при заданном параметре x. Для четкого описания функции было введено выражение xf(x).То есть, когда хотят рассматривать выражение P как функцию от x, следует использовать запись xP (лямбда-абстракция). Таким образом, выражение x(x+y) является функцией от x, а не от у. При этом x называют связанной переменной, а y- свободной переменной.

Таким образом, главным в парадигме функционального программирования является понятие функции (отсюда и название – функциональное программирование). Математики придумали множество теоретических и практических аппаратов для оперирования функциями (дифференцирование, интегрирование, функциональный анализ, теория нечетких множеств и т.д.) Теперь появился раздел, который напрямую связал математическую теорию функций и технологию создания программного обеспечения (ПО) для компьютеров. Математические функции выражают связь между параметрами (входом) и результатом (выходом) некоторого процесса. То есть, функцию можно рассматривать как некоторый черный ящик, входные значения которого порождают значения на выходе (выражают связь между входом и выходом некоторого процесса). Так как вычисление – это тоже процесс, имеющий вход и выход, то функция является вполне адекватным средством описания вычислений. Именно этот простой принцип и положен в основу функциональной парадигмы и функционального программирования. Функции определяются через другие функции или рекурсивно – через самих себя. В процессе выполнения программы функции получают параметры, вычисляют и возвращают результат, в случае необходимости вычисляя значения других функций. Все, что необходимо сделать программе для получения желаемого результата при решении задачи, должно быть представлено в виде системы взаимосвязанных функций.

1.1.3. Логическая вычислительная модель

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

1.1.4. Объектно-ориентированная вычислительная модель (ООП)

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

Внутренняя структура данных и реализация методов объекта скрыта от остальной программы (инкапсуляция). Программе доступен только интерфейс объекта.

Основной механизм повторного использования программного обеспечения – это класс (по сути шаблон, описывающий все объекты, для которых характерны одинаковые операции и элементы данных).Разработка шаблонов позволяет создавать проекты сложных систем прямо “на лету”. Платить за это, правда, приходится выразительностью.

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

Такова краткая характеристика различных парадигм программирования.

Следовать какой-либо парадигме можно практически на любом языке программирования, но каждый язык программирования предназначен в первую очередь для работы внутри своей парадигмы.( Можно например, следовать функциональной парадигме программирования на языках С или С++, когда в теле каждой функции будет только одна инструкция – return.)

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

Метод оценки (способ получения результатов)

Для каждой вычислительной модели существует свой метод оценки. Эти методы разделяются на 3 основных типа:

  • Управление потоками команд (процедурный)

  • Управление потоками данных ( логический)

  • Редукционный (функциональный)

Лекция 12 (11 неделя)

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

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

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

Классификация задач по классам сложности

Соотношение классов P, NP и NPC

P NP, т.е. NP\P 0 (множество задач NP/P не пусто)

Р- класс - задачи с полиномиальной сложностью.

Задача относится к классу Р, если существует константа k и алгоритм, решающий эту задачу за время О(nk) , где n есть длина входа алгоритма в битах. Класс задач Р предполагает существование полиномиального по времени алгоритма ее решения .При этом он рассчитан на худший случай для всех различных входов длины n.

Задачи класса Р решаются за реальное время !

Для большинства реальных задач из класса Р константа k<6.

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

Класс NP – это полиномиально проверяемые задачи.

Если говорить о машине, то каждое следующее состояние не всегда определяется предыдущим. Такую машину можно представить как имеющую разветвления при неоднозначности процесса: задача может быть решена, если хотя бы одна ветвь процесса пришла к ответу.

К классу NP относятся задачи, решение которых , полученное некоторым алгоритмом, можно проверить за полиномиальное время.

Есть еще класс NP- полных задач. (NPC) , который является подмножеством NP-задач и отличается тем свойством, что все NP-задачи могут быть некоторым способом сведены к ним. Из этого следует, что если для NP-полной задачи будет найдено P-решение, то P-решение будет найдено для всех задач класса NP.

На самом деле вопрос о том, является ли класс Р собственным подмножеством класса NP -самая известная нерешенная проблема теоретической информатики. Класс NP включает множество нужных для практики задач, про которые неизвестно, находятся ли они в классе Р.

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

  • Можно получить достоверные оценки невозможности решения некоторой задачи за определенное время. Это важно, например, для криптографии.

  • Мы можем осуществлять разработку эффективных алгоритмов решения практических задач в области обработки информации