Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Аверянов Основы современной информатики 2007

.pdf
Скачиваний:
72
Добавлен:
16.08.2013
Размер:
7.31 Mб
Скачать

ВВЕДЕНИЕ

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

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

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

Термин «информатика», как название определенной выше области науки, был введен на рубеже 60-х – 70-х годов практически одновременно во французской (Informatique) и немецкой (Informatik) научной литературе. Еще раньше в США стало использоваться в аналогичном смысле название Computer Science. В отечественной практике употребление термина «информатика» длительное время сдерживалось тем, что он использовался как название области знаний, связанной с архивным делом и документалистикой. Окончательное его утверждение произошло лишь после перевода в 1976 г. книги Ф. Бауэра и Г. Гооза «Информатика» [1] и образования в 1983 г. отделения информатики, вычислительной техники и автоматизации АН СССР.

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

11

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

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

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

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

Из областей знаний, являющихся разделами информатики или тесно связанными с ней, отметим следующие.

1.Теоретическая информатика – чисто математическая дисци-

плина, имеющая в своем составе следующие разделы: математическую логику (математическая логика – одна из вет-

вей общей логики, науки о формах мышления, которая развивается применительно к потребностям математики и вычислительной техники);

вычислительную математику и вычислительную геометрию (вычислительная геометрия рассматривает алгоритмы для решения геометрических задач, основное прикладное значение – машинная графика);

системный анализ; исследование операций.

2.Кибернетика – наука об управлении. Возникла в конце 40-х годов прошлого столетия, когда Н. Винер впервые выдвинул идею о том, что системы управления в живых, неживых и искусственных системах обладают многими общими чертами. Наиболее активно развивается раздел технической кибернетики, в состав которой входит теория автоматического управления.

3.Программирование – научное направление, которое своим появлением полностью обязано вычислительным машинам (термин «программирование» не всегда понимается однозначно, так как имеется ряд таких разделов математики, как линейное программирование, нелинейное программирование, дискретное программирование и т.п., не имеющих ничего общего с программированием для

12

компьютеров; в связи с этим вместо термина «программирование» иногда употребляют термин «кодирование»).

4.Искусственный интеллект – самое молодое направление в информатике. Время его появления как научной дисциплины – начало 70-х годов прошлого столетия. Основная цель работы в области искусственного интеллекта – стремление проникнуть в тайны творческой деятельности людей, их способности к овладению навыками, знаниями и умениями. Это не чисто теоретическая наука, она занимается и прикладными вопросами. Примерами прикладных разделов этой науки являются робототехника или экспертные системы.

5.Информационные системы – направление, истоки которого лежат в области документалистики и анализа научно-технической информации. Информационные системы включают следующие разделы:

анализ и прогнозирование потоков разнообразной информации, перемещающихся в обществе;

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

создание информационно-поисковых систем и т.п.

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

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

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

13

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

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

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

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

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

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

Можно выделить основные дисциплины, входящие в состав компьютерных наук и обеспечивающих их эффективное применение:

технические средства; лингвистическое обеспечение; программное обеспечение.

Именно они и рассматриваются в данном учебном пособии.

14

ГЛАВА 1. АЛГОРИТМЫ И ОСНОВЫ АЛГОРИТМИЗАЦИИ

1.1. Элементы алгебры логики

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

Исчисление (алгебра) высказываний, или алгебра логики, – раздел математической логики, изучающий высказывания со стороны их логических значений и логические операции над ними. При этом под высказываниями понимаются такие предложения, относительно которых имеет смысл утверждать, истинны они или ложны. Например, высказывание «a – буква» – истинно, а высказывание «1 – буква» – ложно. Отдельные высказывания в алгебре логики рассматриваются целиком, без учета их внутренней структуры. Для краткости в формулах, таблицах, схемах, описывающих различные логические конструкции, логические значения «истина» (TRUE) и «ложь» (FALSE) обычно указываются, соответственно, как «и» (T) и «л» (F) или, чаще всего, 1 и 0.

Логические операции называются также логическими связками.

С помощью n-местной или n-арной (n 0) логической операции можно построить n-местную логическую функцию f (x1, x2 , ..., xn ) , преобразующую тот или иной набор из n выска-

зываний (аргументов) x1, x2 , ..., xn в более сложное высказывание.

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

15

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

гические операции: отрицание («не»), конъюнкция («и» – логическое умножение) и дизъюнкция («или» – логическое сложение). Эти три функции часто называют булевыми, а алгебру логики, в которой используются лишь эти функции, а также константы 0 и 1, – булевой, поскольку они впервые появились в середине XIX в. в трудах английского математика Дж. Буля как аппарат символической логики. Однако иногда и другие логические функции, представленные в табл. 1.1, также называют булевыми. Используемые в высказываниях основные логические связки типа «и», «или», «не», «если…, то», «тогда и только тогда» и другие можно рассматривать, соответственно, как «элементарные» булевы функции x y ,

x y , x , x y , x y и т.д.

Поскольку, как видно, имеется много логических функций, приобретает важность проблема их функциональной полноты. Некоторая система S логических функций называется функционально полной, если любую логическую функцию можно записать в виде формулы с помощью функций из S. Например, система булевых функций, состоящая из отрицания, конъюнкции и дизъюнкции, обладает функциональной полнотой. Однако функционально полными могут быть и системы, состоящие всего из двух логических функций. Так, полными системами являются отрицание и конъюнкция, отрицание и дизъюнкция, отрицание и импликация и др. Более того функциональной полнотой могут обладать даже отдельные логические функции, например штрих Шеффера или стрелка Пирса. Следовательно, с точки зрения функциональной полноты система булевых функций избыточна, однако избыточность позволяет короче и нагляднее записывать сложные высказывания. В алгоритмических языках программирования для нескольких наиболее распространенных логических связок («не», «и», «или», а иногда и др.) предусмотрены соответствующие символы или служебные (зарезервированные) слова.

16

Обозна- чение связок

x

xy

x y

x y

x y

x + y

xy

xy

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 1.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Другие

 

 

Таблица

 

 

 

 

 

 

обозна-

 

истинности

 

 

 

 

 

 

чения

 

 

и

x

 

0

0

1

 

1

Название связки

Как читать

пред-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ставле-

y

 

0

1

0

 

1

 

 

 

 

 

ния

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x ,

x

 

1

 

0

 

 

Отрицание, инверсия

Не x; отрица-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ние x

 

 

 

x & y

 

0

0

0

 

1

Конъюнкция,

логиче-

x и y

 

 

 

x

y

 

 

 

 

 

 

 

ское умножение, логи-

 

 

 

 

 

 

 

 

 

 

 

ческое

«и», функция

 

 

 

 

xy

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

совпадения, and (энд)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x или y

 

 

 

 

 

 

 

0

1

1

 

1

Дизъюнкция,

логиче-

 

 

 

 

 

 

 

 

 

 

 

 

 

ское сложение, логиче-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ское «или», функция

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

разделения, or (ор)

 

 

 

x y

 

 

 

 

 

 

 

 

Если x, то y; x

 

 

1

1

0

 

1

Импликация,

матери-

 

 

 

 

 

 

 

 

 

 

 

 

 

альная импликация

влечет y, x им-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

плицирует y

 

x y

 

 

 

 

 

 

 

x эквивалентно

 

 

1

0

0

 

1

Эквивалентность,

 

 

x ~ y

 

 

 

 

 

 

 

функция равнозначно-

y; x тогда и

 

 

 

 

 

 

 

 

 

 

 

 

 

сти

 

 

только тогда,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

когда y

 

 

x &

y

 

0

1

1

 

0

Сумма

по модулю 2,

Либо x, либо y;

(x y)

 

 

 

 

 

 

 

разделительная

дизъ-

х

неэквива-

 

 

 

 

 

 

 

юнкция, отрицание эк-

лентно y

(x y)

 

 

 

 

 

 

 

вивалентности,

функ-

 

 

 

 

 

 

 

 

 

ция неравнозначности,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

исключающее «или»

 

 

(x y)

 

1

1

1

 

0

Штрих Шеффера, от-

x и y несовме-

 

 

 

 

 

 

 

 

 

 

 

 

 

рицание

конъюнкции,

стны;

неверно,

 

 

x & y

 

 

 

 

 

 

 

антиконъюнкция, nand

что x и y

 

 

 

 

 

 

 

 

 

(нэнд)

 

 

 

 

 

 

x y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ни х, ни у

(x y)

 

1

0

0

 

0

Стрелка Пирса, отри-

 

 

 

 

 

 

 

 

 

 

 

 

 

цание дизъюнкции, ан-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тидизъюнкция,

функ-

 

 

(x y)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ция Вебба, nor (нор)

 

 

 

 

x y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

17

Продолжение табл. 1.1

Обо-

Другие

 

 

 

Таблица

 

 

 

 

 

 

 

зна-

обозначе-

 

истинности

 

 

 

 

 

 

 

че-

ния

и

x

 

0

0

1

 

1

Название связки

Как читать

 

ние

представ-

 

 

 

 

 

 

 

 

 

 

 

 

 

свя-

ления

 

y

 

0

1

0

 

1

 

 

 

 

 

 

зок

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x / y

x →/

y

 

0

0

1

 

0

Отрицание

импли-

x, но не y; не-

 

(x y)

 

 

 

 

 

 

 

кации,

антиимпли-

верно,

что

х

 

 

 

 

 

 

 

 

кация,

материаль-

влечет y

 

 

 

(x y)

 

 

 

 

 

 

 

ная

антиимплика-

 

 

 

 

 

 

 

 

 

 

 

ция

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x y

x y

 

1

0

1

 

1

Обратная

имплика-

x, если y; если y,

 

y x

 

 

 

 

 

 

 

ция

 

 

то х; y влечет х;

 

y x

 

 

 

 

 

 

 

 

 

 

y имплицирует х

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x / y

x ←/

y

 

0

1

0

 

0

Отрицание

обрат-

Не х, но y; не-

 

( y x)

 

 

 

 

 

 

 

ной

импликации,

верно,

что

y

 

 

 

 

 

 

 

 

обратная

антиим-

влечет х

 

 

 

( y x)

 

 

 

 

 

 

 

пликация

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x y

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

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

В силу принципа двойственности любую логическую функцию (формулу) f можно заменить на двойственную ей f* по правилу

f (x1, x2 , ..., xn ) = f * ( x1, x2 , ..., xn ) .

(1.1)

Так, конъюнкция двойственна дизъюнкции, штрих Шеффера – стрелке Пирса, отрицание – самому себе и т.д. Пусть, например, A

18

и B – произвольные логические формулы. Тогда в силу принципа двойственности

(A B) =A B , (A B) =A B

(1.2)

(формулы (1.2) иногда называют законами де Моргана).

Для преобразования логических формул можно также использовать:

закон противоречия -

 

A A =0 ,

(1.3)

закон исключенного третьего -

 

 

 

A A =1,

(1.4)

законы идемпотентности -

 

 

A A = A,

A A = A,

(1.5)

законы поглощения -

 

 

 

A (A B) = A ,

A (A B) = A ,

(1.6)

а также формулы

 

 

 

( A) = A , A 1 = A ,

A 0 =0 , A 1 =1 , A 0 = A ,

(1.7)

A B =A B ,

A B =(A B) ( A B) .

 

(В выражениях (1.3) – (1.7) A и B – по-прежнему произвольные логические формулы.)

1.2. Элементы исчисления предикатов

Развитием исчисления высказываний является исчисление предикатов. Пусть xi (i = 1, 2, …, m) – заданные на некотором конеч-

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

19

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

Тогда n-местным (n-арным) предикатом называется функция P(t1, t2, ..., tn), которая представляет собой некоторое высказывание

о термах t1, t2 , ..., tn (n 0) и может принимать лишь значения «истина» или «ложь» в зависимости от индивидуальных предметов x1, x2 , ... из М, входящих в эти термы. При n = 1 предикат называ-

ют свойством, а при n > 1 – отношением или, конкретнее, n-арным отношением. Изучаемые в исчислении высказываний отдельные высказывания могут формально рассматриваться как нульместные предикаты.

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

числа аргументов. Пусть, например, x1, x2 , x3 – буквы русского алфавита, а z1, z2 , z3 , z4 – действительные числа. Образуем термы t1 = x1x2x1x3 (слово из четырех букв с одинаковыми первой и третьей буквами): t2 = z1 + z2 , t3 = z3z4 . Тогда высказывание « t1 – имя собственное» – одноместный предикат (свойство) с тремя аргументами ( x1, x2 , x3 ), а высказывание « t2 >t3 » – двуместный предикат (отношение), зависящий от четырех аргументов ( z1, z2 , z3 , z4 ). Для простейших математических отношений «мень-

ше», «меньше или равно», «равно», «не равно», «больше или равно», «больше» в алгоритмических языках программирования имеются соответствующие символы или зарезервированные слова.

Отдельные предикаты – элементарные формулы исчисления предикатов. Связывая предикаты логическими связками, можно получать сложные формулы исчисления предикатов, например

20