
- •Понятие алгоритма и свойства алгоритмов.
- •Формализация понятия алгоритма: машина Тьюринга. Представление машин Тьюринга с помощью диаграмм. Табличное представление программ машины Тьюринга. Композиция машин Тьюринга. Примеры.
- •Двумерная таблица
- •С помощью диаграммы
- •Формализация понятия алгоритма: нормальные алгорифмы Маркова, определение и выполнение. Примеры.
- •Вычислимые функции. Базовый набор функций и операции над функциями: суперпозиция, примитивная рекурсия, минимизация. Классы вычислимых функций. Примеры.
- •Проблема алгоритмической разрешимости. Примеры неразрешимых алгоритмических проблем.
- •Методы разработки алгоритмов. Суперпозиция, итерация, рекурсия и др.
- •Технология разработки программ. Технология и методы тестирования программ.
- •Составление алгоритма.
- •Создание документации, помощи.
- •Рекурсивные алгоритмы: определение и виды рекурсии. Реализация рекурсии и использование стека. Рекурсия и итерация. Примеры, сравнение.
- •Задача анализа сложности алгоритмов. Временная и емкостная сложности. Оценки сложности. Использование управляющего графа для оценки сложности линейных и ветвящихся алгоритмов.
- •Оценка сложности циклических алгоритмов. Примеры.
- •Количество повторений вложенного цикла не зависит от параметра внешнего цикла
- •Количество повторений вложенного цикла зависит от параметра внешнего цикла
- •Оценка сложности рекурсивных алгоритмов: рекурсия с одним и многими рекурсивными вызовами, случай косвенной рекурсии.
- •If … then процедура_1
- •Оптимизация алгоритмов. Примеры.
- •Понятие сложности задачи и классы сложности задач. Понятие сводимости, полиномиальная сводимость.
- •Методы сортировок: сортировка массивов простыми включениями, сортировка массивов простым выбором, сортировка обменами. Анализ сложности алгоритмов сортировки.
- •Сортировка методом простого выбора
- •Сортировка методом простых вставок (метод прямого (простого) включения)
- •2 Пересылки записей
- •1 Пересылка записи
- •Методы сортировок: алгоритм быстрой сортировки. Анализ сложности алгоритма быстрой сортировки.
- •Обзор методов сортировок: сортировка Шелла, пирамидальная сортировка, сортировка слияниями, Шейкер-сортировка, сортировка подсчетом, цифровая сортировка и др.
- •Методы поиска: линейный поиск, метод бинарного поиска, поиск с помощью бинарного дерева, метод случайного поиска и др.
- •Алгоритмы внешней сортировки: метод естественного слияния, метод сбалансированного слияния. Двухпутевая и многопутевая реализации. Фибоначчиева сортировка.
- •Метод квадратичного рехеширования.
- •Рекурсивные типы данных: определение, примеры.
- •Id:integer; {номер вершины}
- •Операции над линейными списками: создание списков, включение элементов в списки (рассмотреть различные способы). Виды связных списков.
- •Операции над линейными списками: удаление элементов списков. Поиск элементов списков, сравнение списков.
- •Операции над бинарными деревьями: включение вершины в дерево. Обход деревьев, подсчет числа вершин в дереве. Подсчет числа вершин, удовлетворяющих заданному условию.
- •Операции над бинарными деревьями: удаление вершины дерева.
- •Понятие сбалансированности бинарного дерева. Приведение дерева к авл-сбалансированному виду: виды и формулы поворотов.
- •Анализ сложности алгоритмов работы с бинарными деревьями.
- •Деревья со многими потомками. Специальные виды деревьев: деревья формул, б-деревья, 2-3 деревья, красно-черные деревья.
- •Понятие графа. Способы представления графов. Операции над графами: добавление вершины, добавление дуги, создание графа.
- •Операции над графами: поиск вершины, удаление вершины, удаление дуги, текстовый вывод графа.
- •Алгоритмы поиска на графах: поиск в глубину и в ширину.
- •Примеры алгоритмов на графах (поиск кратчайшего пути, поиск циклов, алгоритм построения остовного дерева, выделения связных компонентов…).
- •Формальные языки и грамматики. Определение языка, описание языка. Понятие грамматики.
- •Классификация формальных языков. Понятие вывода.
- •Описание синтаксиса языка с помощью синтаксических диаграмм и бнф. Примеры.
- •Основы теории информации. Понятие энтропии. Измерение информации: вероятностный и алфавитный подходы.
- •Основы теории кодирования информации. Метод Шеннона-Фано. Код Хаффмана.
- •1. Принцип программного управления.
- •2. Принцип однородности памяти.
- •3. Принцип адресности.
- •Конвейеризация вычислений.
- •Иерархия запоминающих устройств эвм
- •Устройство процессора. Понятие архитектуры cisc, risc, vliw.
- •Работа процессора
- •Cisc-процессоры
- •Risc-процессоры
- •Misc-процессоры
- •Vliw-процессоры
- •Типы данных, поддерживаемые процессорами Intel, форматы данных.
- •Система команд Intel, классификация команд, форматы команд.
- •Объектно-ориентированное программирование (ооп): основные понятия.
Формальные языки и грамматики. Определение языка, описание языка. Понятие грамматики.
Алфавит – множество символов, используемых в языке.
Из символов алфавита можно составлять цепочки символов различной длины. Самая маленькая цепочка – 0 символов, имеет длину 0. Пустая цепочка Λ. Ограничений на длину цепочки нет.
А* - множество всех возможных цепочек в алфавите А.
Язык L – любое подмножество А*.
Если цепочка принадлежит языку, то она называется правильной с точки зрения языка.
Описание любого языка программирования состоит из 4 компонент:
Описание лексики – задание алфавита языка
Описание синтаксиса – задание правил построения различных конструкций ЯП.
Описание семантики – описание различных конструкций с точки зрения правил их работы
Описание прагматики – «как писать программы на этом языке?»
Синтаксис. Грамматика – один из наиболее частых способов описания языка.
G={A,N,P,S}
S – начальный символ грамматики, A – алфавит, N – множество нетерминальных символов, P – множество правил грамматики
Нетерминальными называются символы, требующие дальнейшей расшифровки. Алфавит – множество терминальных символов. S – нетерминальный символ.
Множество правил формулируется в виде β::=γ (::= это есть)
β обычно содержит определяемое понятие – нетерминальный символ или цепочку расширенного алфавита А+N
γ – определение этого символа
β и γ принадлежат (A+N)*
Кроме того, в γ могут входить символы | (или), [] (может быть или не быть), {} (может быть 0 и более раз) и др.
Классификация формальных языков. Понятие вывода.
Формальные языка принято классифицировать по виду правил описывающей их грамматики (порождающей грамматики), т.е. по виду цепочки β и цепочек, составляющих правую часть продукций γ.
Хомский ввел следующие 4 класса грамматик:
Без ограничений на вид правил
Правила имеют вид vBw::=vαw, где B из N, v,w – произвольные цепочки, α – непустая цепочка
Цепочка β имеет вид В, где В из N – нетерминальный символ
Цепочка β имеет вид В, где В из N – нетерминальный символ; правая часть γ состоит из цепочек, имеющих вид a или aC, где а из А, С из N.
1 – класс контекстно-зависимых языков.
2 – контекстно-свободные языки (большинство)
3 – регулярные или автоматные языки (могут быть заданы с помощью регулярных выражений или конечным автоматом).
Примеры: А={0,1,a,b}, N={S,B,C,D} S – начальный символ.
Контекстно-зависимая грамматика
P1:
S::=DBC
aBb::=aCb
0B1::=0bD1|0Ca1
C::=b|1|aC
D::=a|0
Контекстно-свободная грамматика
P2:
S::=BC|DS
B::=aDC|1
C::=01D
D::=b|1C
Автоматная грамматика
S::=aB|bC
B::=0|1|aC
C::=1D
D::=a|0
Понятие вывода
Пусть σ – цепочка, включающая подцепочку β, т.е. σ=α1βα2, где α1 и α2 – подцепочки, а β – левая часть одного из правил грамматики β::=γ
Правая часть γ состоит из нескольких альтернатив, γ=π1|π2….|πk, где πi – цепочки.
Тогда из цепочки σ=α1βα2 можно получить с помощью подстановок новые цепочки символов: σ’=α1 π1α2, σ’’=α1 π2α2,… σ(k)=α1 πkα2
Говорят, что цепочки σ(i) выводятся из цепочки σ за один шаг вывода (непосредственно выводятся). Обычно на каждом шаге берется одна из альтернатив, обозначим ее σ1. Если она не состоит полностью из терминальных символов, к ней можно применить какое-нибудь правило грамматики и сделать еще один шаг вывода, получив цепочку σ2 и т.д.
σ1 => σ2 => … => σn
Записанная последовательность называется выводом в данной формальной грамматике, а любая из цепочек σi называется выводимой из цепочки σ, причем σi+1 называется непосредственно выводимой из σi. Отношение выводимости обозначают =>+, т.е. σ =>+ σn
Отношению выводимости можно придать свойство рефлексивности, т.е. считать, что никакое правило не применялось. Тогда σn = σ. Общее, рефлексивное отношение выводимости обозначают σ=>* σ
Цепочки G: S=>* σ называются сентенциальными формами грамматики.
Если она состоит только из терминальных символов, то она называется сентенцией.
Множество всех сентенций грамматики G образует язык, порождаемый грамматикой G и обозначается L(G). Грамматики, порождающие один и тот же язык, называются эквивалентными.