Участник:Rzakhar2/Черновик

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Формальные языки и формальные грамматики.

[править | править код]

Множества и операции над ними.

[править | править код]

Множество - это совокупность, набор элементов, объединенных общими свойствами.

Бинарные операции

[править | править код]

Основные бинарные операции, определяемые над множествами:

  • пересечение:
    .
  • объединение:
    .
Если множества и не пересекаются, то . Их объединение обозначают также: .
  • разность:
    .
  • симметрическая разность:
    .
  • декартово или прямое произведение:
    .

Унарные операции

[править | править код]
Диаграмма Венна для

Дополнение определяется следующим образом:

.

Операция дополнения подразумевает некоторый зафиксированный универсум (универсальное множество , которое содержит ), и сводится к разности множеств с этим универсумом:

.

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

Булеан — множество всех подмножеств:

.

Обозначение происходит из свойства мощности множества всех подмножеств конечного множества:

.

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

Приоритет операций

[править | править код]

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

Комбинаторика

[править | править код]

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

В комбинаторике размеще́нием (из n по k) называется упорядоченный набор из k различных элементов из некоторого множества различных n элементов.

Пример 1:  — это 4-элементное размещение из 6-элементного множества .

Количество размещений из n по k, обозначаемое , равно убывающему факториалу:

В комбинаторике перестано́вка — это упорядоченный набор чисел обычно трактуемый как биекция на множестве , которая числу i ставит в соответствие i-й элемент из набора. Число n при этом называется порядком перестановки. Как синоним слову «перестановка» в этом смысле некоторые авторы используют слово расстановка.
В комбинаторике сочетанием из по называется набор элементов, выбранных из данного множества, содержащего различных элементов. Наборы, отличающиеся только порядком следования элементов (но не составом), считаются одинаковыми, этим сочетания отличаются от размещений.

Число сочетаний из по равно биномиальному коэффициенту

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

Операции A* и A+ над множеством A

[править | править код]

Степень множества

[править | править код]

Нулевая степень любого множества неизменна:

.

Остальные степени определяются рекурсивно:

, где .
Если  — множество символов
то  — множество строк длиной символов, взятых из .

Звезда Клини

[править | править код]

Замыкание Клини множества есть

.

То есть это множество всех строк конечной длины́, порождённое элементами множества .

Плюс Клини

[править | править код]

Есть операция, аналогичная звезде Клини, — плюс Клини:

.

Как видим, отличается тем, что пропущено , содержащее пустую строку.

  • Связь операций:
  • Идемпотентность:
.
  • Замыкание Клини включает в себя порождающее множество:
.
  • Замыкание Клини всегда содержит пустую строку:
.
.
Для множества строк
{"Go", "Russia"}* = {ε, "Go", "Russia", "GoGo", "GoRussia", "RussiaGo", "RussiaRussia", "GoGoGo", "GoGoRussia", "GoRussiaGo", …}.
Для множества символов
{'a', 'b', 'c'}* = {ε, "a", "b", "c", "aa", "ab", "ac", "ba", "bb", "bc", "ca", "cb", "cc", "aaa", …}.

Понятие символа, цепочки символов и конечного алфавита.

[править | править код]

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

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

Слово формального языка (также — цепочка, строка) — произвольная последовательность символов из данного алфавита. Число символов в слове называют его длиной и обозначают . Может допускаться существование единственного слова длины 0, (пустое слово), не содержащее ни одного символа (обозначается , или ).

Формальный язык над конечным алфавитом

[править | править код]

Формальный язык в математической логике и информатике — множество конечных слов (строк, цепочек) над конечным алфавитом. Понятие языка чаще всего используется в теории автоматовтеории вычислимости и теории алгоритмов. Научная теория, которая имеет дело с этим объектом, называется теорией формальных языков.

Формальный язык может быть определён по-разному, например:

Формальные грамматики. Алфавиты терминальных и нетерминальных символов.

[править | править код]

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

  • Терминал (терминальный символ) — объект, непосредственно присутствующий в словах языка, соответствующего грамматике, и имеющий конкретное, неизменяемое значение (обобщение понятия «буквы»). В формальных языках, используемых на компьютере, в качестве терминалов обычно берут все или часть стандартных символов ASCII — латинские буквы, цифры и спец. символы.
  • Нетерминал (нетерминальный символ) — объект, обозначающий какую-либо сущность языка (например: формула, арифметическое выражение, команда) и не имеющий конкретного символьного значения.

Словами языка, заданного грамматикой, являются все последовательности терминалов, выводимые (порождаемые) из начального нетерминала по правилам вывода.

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

Итак, грамматика определяется следующими характеристиками:

  •  — набор (алфавит) терминальных символов
  • N — набор (алфавит) нетерминальных символов
  • P — набор правил вида: «левая часть» «правая часть», где:
    • «левая часть» — непустая последовательность терминалов и нетерминалов, содержащая хотя бы один нетерминал
    • «правая часть» — любая последовательность терминалов и нетерминалов
  • S — стартовый (или начальный) символ грамматики из набора нетерминалов.

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

Существование вывода для некоторого слова является критерием его принадлежности к языку, определяемому данной грамматикой.

Типы грамматик

[править | править код]

По иерархии Хомского, грамматики делятся на 4 типа, каждый последующий является более ограниченным подмножеством предыдущего (но и легче поддающимся анализу):

Кроме того, выделяют:

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

Пример — арифметические выражения

[править | править код]

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

Терминальный алфавит:

 = {'0','1','2','3','4','5','6','7','8','9','+','-','*','/','(',')'}

Нетерминальный алфавит:

  { ФОРМУЛА, ЗНАК, ЧИСЛО, ЦИФРА }

Правила:

1. ФОРМУЛА  ФОРМУЛА ЗНАК ФОРМУЛА                (формула есть две формулы, соединенные знаком)
2. ФОРМУЛА  ЧИСЛО                               (формула есть число)
3. ФОРМУЛА  ( ФОРМУЛА )                         (формула есть формула в скобках)
4. ЗНАК  + | - | * | /                          (знак есть плюс или минус, или умножить, или разделить)
5. ЧИСЛО  ЦИФРА                                 (число есть цифра)
6. ЧИСЛО  ЧИСЛО ЦИФРА                           (число есть число и цифра)
7. ЦИФРА  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (цифра есть 0 или 1, или ... 9 )

Начальный нетерминал:

ФОРМУЛА

Вывод:

Выведем формулу (12+5) с помощью перечисленных правил вывода. Для наглядности, стороны каждой замены показаны попарно, в каждой паре заменяемая часть подчеркнута.

ФОРМУЛА (ФОРМУЛА)
(ФОРМУЛА) (ФОРМУЛА ЗНАК ФОРМУЛА)
(ФОРМУЛА ЗНАК ФОРМУЛА) (ФОРМУЛА + ФОРМУЛА)
(ФОРМУЛА + ФОРМУЛА) (ФОРМУЛА + ЧИСЛО)
(ФОРМУЛА + ЧИСЛО) (ФОРМУЛА + ЦИФРА)
(ФОРМУЛА + ЦИФРА) (ФОРМУЛА + 5)
(ФОРМУЛА + 5) (ЧИСЛО + 5)
(ЧИСЛО + 5) (ЧИСЛО ЦИФРА + 5)
(ЧИСЛО ЦИФРА + 5) (ЦИФРА ЦИФРА + 5)
(ЦИФРА ЦИФРА + 5) (1 ЦИФРА + 5)
(1 ЦИФРА + 5) (1 2 + 5)

Пораждающие и распознающие грамматики.

[править | править код]

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

Архитектура ЭВМ

[править | править код]

Арифметические основы ЭВМ.

[править | править код]

Системы счисления.

[править | править код]

Формы и форматы представления чисел.

[править | править код]

Машинные коды чисел.

[править | править код]

Арифметические действия над машинными кодами.

[править | править код]

Логические основы ЭВМ.

[править | править код]

Формы представления логических функций.

[править | править код]

Теоремы о ДНФ и КНФ.

[править | править код]

Построение логических схем в базисах.

[править | править код]

Базис Шеффера и базис Пирса.

[править | править код]

Программная модель микропроцессора.

[править | править код]

Форматы команд.

[править | править код]

Системы и способы адресации.

[править | править код]

Логические функциональные узлы ЭВМ.

[править | править код]

Классификация, функциональное назначение.

[править | править код]

Шифраторы, дешифраторы, компараторы.

[править | править код]

Цифровые узлы ЭВМ.

[править | править код]

Понятие о конечных автоматах.

[править | править код]

Автоматы Мили и Мура.

[править | править код]

Синхронные и асинхронные триггеры.

[править | править код]

Регистры и счетчики.

[править | править код]

Жизненный цикл программного обеспечения

[править | править код]

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

[править | править код]

Виды моделей жизненного цикла программных продуктов.

[править | править код]

Каскадные и итеративные модели жизненного цикла.

[править | править код]

Стандарты жизненного цикла программных продуктов.

[править | править код]

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

[править | править код]

Инструментальное обеспечение этапов жизненного цикла программного обеспечения.

[править | править код]

Статический анализ формальных спецификаций и текстов программ.

[править | править код]

Виды трансляторов.

[править | править код]

Динамический анализ программ.

[править | править код]

Виды отладчиков.

[править | править код]

Операционные системы.

[править | править код]

Основные принципы построения и особенности архитектур современных ОС.

[править | править код]

Многозадачность и мультипрограммирование.

[править | править код]

Реализация механизма прерываний в ОС Linux.

[править | править код]

Типы прерываний.

[править | править код]

Программные прерывания.

[править | править код]

Диспетчеризация прерываний.

[править | править код]

Системные вызовы.

[править | править код]

Модель процесса в ОС Linux.

[править | править код]

Состояния процессов.

[править | править код]

Организация межпроцессного взаимодействия.

[править | править код]

Понятие критической секции.

[править | править код]

Блокировки и тупики.

[править | править код]

Примитивы межпроцессного взаимодействия.

[править | править код]

Проблема взаимодействия производителя и потребителя.

[править | править код]

Особенности ОС Linux.

[править | править код]

Интерфейсы ОС Linux, файловая система, дескриптор файла, файлы устройств, именованные каналы.

[править | править код]

Командный интерпретатор.

[править | править код]

Работа с командной строкой.

[править | править код]

Синтаксическая структура команды.

[править | править код]

Опции и параметры.

[править | править код]

Передача данных команде.

[править | править код]

Процессы и потоки в ОС Linux.

[править | править код]

Дескриптор процесса, контекст процесса.

[править | править код]

Порождение процесса.

[править | править код]

Фоновые процессы.

[править | править код]

Синхронизация процессов.

[править | править код]

Сети ЭВМ и телекоммуникации

[править | править код]

Классификация сетей.

[править | править код]

Топология сетей.

[править | править код]

Локальные сети.

[править | править код]

Стандарты каналов связи.

[править | править код]

Модель взаимодействия открытых систем.

[править | править код]

Программные средства локальных сетей.

[править | править код]

Сетевые операционные системы.

[править | править код]

Структура, протоколы, основные характеристики.

[править | править код]

Принципы построения.

[править | править код]

Протокол ТСР/IР как основы построения Internet.

[править | править код]

Служба DNS, WINS, DNSP.

[править | править код]

Технология Internet.

[править | править код]

Протоколы ТСР/IP, маршрутизация, локальные и глобальные IР-адреса .

[править | править код]

Методы поиска информации в Internet.

[править | править код]

Сети Windows NТ/2000.

[править | править код]

Понятие сервера и рабочей станции.

[править | править код]

Модель рабочей группы.

[править | править код]

Доменная модель.

[править | править код]

Методы и средства защиты компьютерной информации

[править | править код]

Этапы процесса организации системы защиты информации.

[править | править код]

Защита информации в линиях связи.

[править | править код]

Структура современных телефонных кабельных сетей.

[править | править код]

Понятие криптографии.

[править | править код]

Защита информации криптографическими методами.

[править | править код]

Шифрование и дешифрование.

[править | править код]

Алгоритмы шифрования.

[править | править код]

Понятие аутентификации пользователей.

[править | править код]

Парольная аутентификация.

[править | править код]

Одноразовые пароли.

[править | править код]

Схема Лампорта.

[править | править код]

Методы аутентификации пользователей в компьютерной сети.

[править | править код]

Атаки изнутри системы.

[править | править код]

Виды и способы защиты.

[править | править код]

Атаки снаружи.

[править | править код]

Разновидности вирусных программ.

[править | править код]

Сканеры вирусов.

[править | править код]

Способы обнаружения вирусной активности.

[править | править код]

Базы данных

[править | править код]

Этапы проектирования баз данных.

[править | править код]

Архитектурные уровни СУБД.

[править | править код]

Инфологическое моделирование.

[править | править код]

Компоненты инфологической модели.

[править | править код]

Модель «сущность-связь».

[править | править код]

Операторы определения и выборки данных, манипулирования данными.

[править | править код]

Вложенные запросы.

[править | править код]

Создание представлений.

[править | править код]

Тестирование программного обеспечения

[править | править код]

Понятие тестирования программного продукта.

[править | править код]

Взаимосвязь тестирования и отладки как процессов жизненного цикла программного продукта.

[править | править код]

Понятие теста.

[править | править код]

Требования к тестам.

[править | править код]

Виды программ по поведению.

[править | править код]

Основные особенности трансформационных и реагирующих программ.

[править | править код]

Виды программных ошибок и способы их обнаружения.

[править | править код]

Классификация ошибок по степени проявления и по этапам жизненного цикла программного продукта.

[править | править код]

Ключевой вопрос тестирования.

[править | править код]

Виды тестирования.

[править | править код]

Функциональное тестирование (тестирование «черного ящика») и структурное тестирование (тестирование «белого ящика»).

[править | править код]

Критерии функционального тестирования.

[править | править код]

Критерии структурного тестирования.

[править | править код]

Классы входных и выходных данных.

[править | править код]

Аксиомы тестирования по Г. Майерсу.

[править | править код]

Документирование и отслеживание ошибок.

[править | править код]

Средства автоматизации тестирования. 

[править | править код]
  1. Виленкин Н.Я. Глава III. Комбинаторика кортежей и множеств. Размещения с повторениями // Популярная комбинаторика. — М.: Наука, 1975. — С. 80. — 208 с.
  2. Теория конфигураций и теория перечислений
  3. Глава 3. Элементы комбинаторики. // Лекции по теории вероятностей.
  4. Дональд Э. Кнут — Искусство программирования. Том 1. Основные алгоритмы. 1.2.5. Перестановки и факториалы