Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по Семеновой.doc
Скачиваний:
4
Добавлен:
19.04.2019
Размер:
612.86 Кб
Скачать

Вопрос 1. Математические проблемы информатики

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

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

Преимуществом уровня модельного эксперимента является возможность проводить исследования какого-либо объекта без непосредственного обращения к нему. Но сложность заключается в полном и достоверном математическом описании модели.

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

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

  • распознавание образов; доказательство теорем; машинный перевод; понимание и синтез речи и текстов на естественных языках (ЕЯ); обучение; принятие решений и др.

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

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

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

Понятие исчисления (дедуктивной системы) ввел в 1943 г. американский математик Э.Пост (E.Post). Подход к автоматическому доказательству теорем описал Эрбран (J.Herbrand) в 1930 г., но реализация процедуры доказательства стала возможной после появления ЭВМ, особенно после разработки метода резолюций Д.Робинсоном (J.Robinson) в 1965 г.

Метод резолюций нашел свое эффективное применение в логическом программировании и языке Пролог, созданном в Марселе Ковальским и Колмероэ в 1973 г. Их первоначальная программа, написанная на Фортране, предназначалась для построения систем обработки текстов на естественных языках. Эффективность Пролога была продемонстрирована после разработки компилятора Пролога в конце 70-х.

Но первым языком искусственного интеллекта, не потерявшим своей популярности до наших дней, был созданный в 1958 г. Джоном Мак-Карти (J.McCarthy) из Массачусетсткого технологического института язык обработки списков ЛИСП (LISP — LISt Processing), ставший языком функционального программирования.

В реальных задачах детерминированность является лишь модельным приближением, не всегда адекватным исследуемой ситуации. Это относится и к математической логике. Для отражения неопределенности, присутствующей в практических задачах вследствие неполноты исходных данных, Л.Заде (Lotfi Zadeh) к 1965 г. разработал теорию нечетких множеств, нашедшую широкое применение в системах ИИ, в частности, в экспертных системах.

Экспертные системы, основанные на выявлении и представлении в компьютере человеческих знаний, привлекли к себе заметное внимание в середине 70-х годов. Одними из первых были разработаны ставшие уже классическими экспертные системы MYCIN и DENDRAL для медицины и химии.

MICIN — экспертная система для медицинской диагностики. Разработана группой по инфекционным заболеваниям Стэнфордского университета. Ставит соответствующий диагноз, исходя из представленных ей симптомов, и рекомендует курс медикаментозного лечения любой из диагностированных инфекций. База данных состоит из 450 правил.

DENDRAL — экспертная система для распознавания химических структур. Первые версии данной системы появились еще в 1965 году также в Стэнфордском университете. Пользователь дает системе DENDRAL некоторую информацию о веществе и данные спектрометрии, а система выдает диагноз в виде соответствующей химической структуры.

К числу первых из разработанных экспертных систем относится также PROSPECTOR — экспертная система, созданная для содействия поиску коммерчески оправданных месторождений полезных ископаемых.

Эволюционные методы (ЭМ) являются приближенными (эвристическими) методами решения задач оптимизации и структурного синтеза. Большинство ЭМ основано на статистическом подходе к исследованию ситуаций и итерационном приближении к искомому решению.

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

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

Вопрос 2. Теория сложности алгоритмов

В настоящее время теория алгоритмов развивается, главным образом, по трем направлениям.

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

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

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

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

, где – веса ресурсов; (N) – данный конкретный вход; – память для хранения промежуточных результатов; – память для организации вычислительного процесса (память, необходимая для реализации рекурсивных вызовов и возвратов)

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

Дано: ( ) ­ трудоёмкость алгоритма требуется определить время работы программной реализации алгоритма – ( ).

Существуют разнообразные методики перехода к временным оценкам:

1) Пооперационный анализ=>Идея пооперационного анализа состоит в получении пооперационной функции трудоемкости для каждой из используемых алгоритмом элементарных операций с учетом типов данных. Следующим шагом является экспериментальное определение среднего времени выполнения данной элементарной операции на конкретной вычислительной машине. Ожидаемое время выполнения рассчитывается как сумма произведений пооперационной трудоемкости на средние времена операций.

2) Метод Гиббсона=>Метод предполагает проведение совокупного анализа по трудоемкости и переход к временным оценкам на основе принадлежности решаемой задачи к одному из следующих типов:

задачи научно-технического характера с преобладанием операций с операндами действительного типа;

задачи дискретной математики с преобладанием операций с операндами целого типа

задачи баз данных с преобладанием операций с операндами строкового типа

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

На основе полученной информации оценивается общее время работы алгоритма в виде: (N) = (N) *

3) Метод прямого определения среднего времени=>В этом методе так же проводится совокупный анализ по трудоемкости – определяется (N), после чего на основе прямого эксперимента для различных значений определяется среднее время работы данной программы и на основе известной функции трудоемкости рассчитывается среднее время на обобщенную элементарную операцию, порождаемое данным алгоритмом, компилятором и компьютером – . Эти данные могут быть (в предположении об устойчивости среднего времени по N) интерполированы или экстраполированы на другие значения размерности задачи следующим образом:

Классы сложности:

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

Вопрос о возможной эквивалентности классов P и NP (то есть о возможности нахождения P-решения для любой NP-задачи) считается многими одним из основных вопросов современной теории сложности алгоритмов. Ответ на этот вопрос не найден до сих пор. Сама постановка вопроса об эквивалентности классов P и NP возможна благодаря введению понятия NP-полных задач. NP-полные задачи составляют подмножество NP-задач и отличаются тем свойством, что все NP-задачи могут быть тем или иным способом сведены к ним. Из этого следует, что если для NP-полной задачи будет найдено P-решение, то P-решение будет найдено для всех задач класса NP. Примером NP-полной задачи является задача о конъюнктивной форме

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

Вопрос 3. Развитие языков, методик и технологий программирования

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

Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко.

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

Классификация языков программирования (с учетом порядка появления)

  1. Машинно – ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.);

  2. Машинный язык;

  3. Языки символьного кодирования (ЯСК);

  4. Автокоды;

  5. Макрос (средство замены) - язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую;

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

  7. Проблемно – ориентированные языки (примеры: Фортран, Алгол – языки, созданные для решения математических задач; Simula, Слэнг - для моделирования; Лисп, Снобол – для работы со списочными структурами);

  8. Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д.

  9. Диалоговые языки - обеспечивают оперативное взаимодействие человека с ЭВМ;

  10. Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами.

Технологии программирования

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

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

  • указание последовательности выполнения технологических операций;

  • перечисление условий, при которых выполняется та или иная операция;

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

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

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

Развитие методологий программирования:

  1. Стихийное программирование (от появления первых вычислительных машин до середины 60-х годов XX в). Первые программы имели простейшую структуру. Они состояли из собственно программы на машинном языке и обрабатываемых ею данных Сложность программ в машинных кодах ограничивалась способностью программиста одновременно мысленно отслеживать последовательность выполняемых операций и местонахождение данных при программировании.

  2. Структурная методология (60-70-е годы XX в.). В основе структурного подхода лежит декомпозиция (разбиение на части) сложных систем с целью последующей реализации в виде отдельных небольших (до 40-50 операторов) подпрограмм. При таком подходе задача представляется в виде иерархии подзадач простейшей структуры. Проектирование осуществляется «сверху вниз» и подразумевает реализацию общей идеи, обеспечивая проработку интерфейсов подпрограмм (нисходящее проектирование).

  3. Модульное программирование предполагает выделение групп подпрограмм, использующих одни и те же глобальные данные, в отдельно компилируемые модули (библиотеки подпрограмм), например, модуль графических ресурсов, модуль подпрограмм вывода на принтер и т.п.

  4. ООП (с середины 80-х до конца 90-х годов ХХ века). Объектно-ориентированное программирование определяется как технология создания сложного программного обеспечения, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного типа (класса), а классы образуют иерархию с наследованием свойств.

  5. Компонентный подход (с середины 90-х годов XX до нашего времени). Компонентный подход предполагает построение программного обеспечения из отдельных компонентов физически отдельно существующих частей программного обеспечения, которые взаимодействуют между собой через стандартизованные двоичные интерфейсы. В отличие от обычных объектов объекты-компоненты можно собрать в динамически вызываемые библиотеки или исполняемые файлы, распространять в двоичном виде (без исходных текстов) и использовать в любом языке программирования, поддерживающем соответствующую технологию.

Вопрос 4. Современные архитектуры вс

Vliw архитектура

Предложенные в IA-64 архитектурные идеи близки к концепции VLIW (Very Large Instruction Word - сверхбольшое командное слово).

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

Хотя идеи VLIW сформулированы уже давно, до настоящего времени они были известны в основном специалистам в области компьютерных архитектур. Имеющиеся реализации, например, VLIW Multiflow, не получили широкого распространения. Пожалуй, единственными популярными процессорами, архитектура которых близка к VLIW, была линия AP-120B/FPS-164/FPS-264 компании Floating Point Systems. Эти процессоры в 1980-е годы активно применялись при проведении научно-технических расчетов.

Команда в этих системах содержала ряд полей, каждое из которых управляло работой отдельного блока процессора, так что все командное слово определяло поведение всех блоков процессора. Однако длина команды в FPS-х64 была равна всего 64 разрядам, что по современным меркам никак нельзя отнести к сверхбольшим.

Выделение в архитектуре VLIW компонентов командного слова, управляющих отдельными блоками МП, вводит явный параллелизм на уровне команд. Задача обеспечения эффективного распараллеливания работы отдельных блоков возлагается при этом на компилятор, который должен сгенерировать машинные команды, содержащие явные указания на одновременное исполнение операций в разных блоках. Таким образом, достижение параллелизма, обеспечиваемое в современных суперскалярных RISC-процессоров их аппаратурой, в VLIW возлагается на компилятор. Очевидно, что это вызывает сложные проблемы разработки соответствующих компиляторов. При этом распараллеливание работы между ФУ в EPIC происходит статически при компиляции, в то время как современные суперскалярные RISC-процессоры осуществляют это динамически.

VLIW (англ. very long instruction word — «очень длинная машинная команда») — архитектура процессоров с несколькими вычислительными устройствами. Характеризуется тем, что одна инструкция процессора содержит несколько операций, которые должны выполняться параллельно. Фактически это «видимое программисту» микропрограммное управление, когда машинный код представляет собой лишь немного свёрнутый микрокод для непосредственного управления аппаратурой.

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

VLIW можно считать логическим продолжением идеологии RISC, расширяющей её на архитектуры с несколькими вычислительными модулями. Так же, как в RISC, в инструкции явно указывается, что именно должен делать каждый модуль процессора. Из-за этого длина инструкции может достигать 128 или даже 256 бит.

Пример

Рассмотрим работу модельного VLIW-процессора с двумя арифметическо-логическими устройствами (АЛУ). Пусть нам надо сложить четыре числа, находящиеся в регистрах R1, R2, R3 и R4. Тогда псевдокод может выглядеть так:

R5=R1+R2, R6=R3+R4 ; каждое АЛУ складывает свою пару чисел

R0=R5+R6, NOP ; первое АЛУ находит сумму, второе простаивает

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]