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

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

ВНИМАНИЕ

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

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

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

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

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

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

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

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

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

При задании алгоритма необходимо позаботиться о том, чтобы алгоритм воспринимался всеми возможными исполнителями однозначно и точно, чтобы его можно было исполнить при любых допустимых исходных условиях и чтобы необходимый результат был получен за приемлемое время. Способы задания (записи) алгоритмов также весьма разнообразны. В частности, можно отметить словесный способ задания алгоритма — на уровне естественного языка; запись музыкальной мелодии в виде нот, графические способы задания алгоритма: чертеж, используемый для изготовления какой-либо детали, маршрут геологической партии, нанесенный на карту, нарисованная по специальным правилам схема выполнения какой-либо последовательности действий (заметим, что такую схему принято называть блок-схемой алгоритма) и т. д.

Как будет выяснено далее, процессор компьютера «понимает» только алгоритмы, которые заданы в виде двоичных машинных кодов. Однако этот «естественный» для компьютеров, обладающий всеми необходимыми свойствами способ задания алгоритмов очень сложен для использования человеком. Поэтому в информатике применяется ряд специальных способов, языков задания, записи алгоритмов, которые, во-первых, призваны обеспечить соответствие алгоритма всем необходимым требованиям, а во-вторых, приспособлены для их использования как человеком, так и — после специальной обработки — процессором компьютера. Искусственные языки, использующиеся для записи алгоритмов и обеспечивающие им наличие всех необходимых свойств, называются алгоритмическими языками. Существует очень большое число различных по своим возможностям и классам решаемых задач алгоритмических языков. В частности, можно упомянуть такие популярные языки, как Паскаль, Модула, Си.

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

В качестве иллюстрации процесса разработки алгоритмов рассмотрим, например, построение алгоритма решения часто встречающейся на практике задачи поиска вхождения какой-либо последовательности символов в другую последовательность. С этой задачей приходится сталкиваться при поиске в различного рода словарях объяснения неизвестного слова или при переводе с одного языка на другой. Мы ищем неизвестное слово, которое можно рассматривать как одну последовательность символов, в словаре, который можно рассматривать как другую последовательность символов. Значительно упрощая ситуацию, будем считать, что словарь — это текст, состоящий из какого-либо числа символов N, например, из одной тысячи символов (N=1000), а искомое слово пусть состоит всего из трех символов. То есть последовательность символов, в которой осуществляется поиск, будем называть текстом, а последовательность символов, вхождение которой ищется, будем называть словом. Естественно считать, что текст содержит больше символов, чем слово (в крайнем случае — столько же). Заметим, что конкретные длины рассматриваемых последовательностей символов при решении данной задачи не имеют принципиального значения.

При решении задачи поиска нас будет интересовать только факт наличия или отсутствия искомого слова в тексте. Дополнительные действия, возникающие, ;кажем, при переводе слова с одного языка на другой, мы обсуждать не будем. Вначале предположим, что мы уже умеем сравнивать одну группу из трех символов с другой группой, также состоящей из трех символов, и делать вывод о том, совпадают они или нет. Введем в рассмотрение величину i, которую мы будем трактовать как номер первого из трех очередных символов текста. Закрепим за этой величиной значение единица и сравним заданное слово с начальными тремя буквами текста. Если они совпадают, то наша задача уже решена, и делается вывод о вхождении заданного слова в рассматриваемый текст. Если имеется несовпадение, то нужно сдвинуться по тексту на одну букву. Другими словами, нужно увеличить номер i на единицу (теперь его текущее значение равно двум) и сравнить с искомым словом вторую, третью и четвертую буквы текста. Если есть совпадение, то задача решена. Если нет, то вновь увеличим номер i на единицу (теперь его текущее значение равно трем) и сравним с искомым словом третью, четвертую и пятую буквы текста. И опять при совпадении заканчиваем решение, а при несовпадении продолжим сдвиг по тексту. Очевидно, этот процесс будет продолжаться до тех пор, пока мы не доберемся до конца текста (при условии, что где-нибудь ранее не найдем совпадения). Завершит в этом случае решение задачи последнее сравнение 998, 999 и 1000 символов текста с заданным словом. Другими словами, сравнение каждой очередной тройки символов текста продолжается до значения номера i, равного N-2 (в нашем случае это 998). При этом значении номера i сравнение осуществляется последний раз. Если и этот последний отрезок не совпадает, то делается вывод об отсутствии искомого слова в тексте.

а б

Рис. 2.1. Поиск вхождения слова в текст: слово в текст не входит (а); слово входит в текст (б)

Посмотрим, как выполняются описанные действия на конкретном примере. Для наглядности еще больше упростим задачу и возьмем текст, состоящий всего из N=5 символов. Еще раз отметим, что работа с текстом из N=1000 символов в принципе выполняется точно так же, как и с текстом из N=100 000 000 или из N=5 символов — разница только в количестве повторений одних и тех же действий. Чтобы проиллюстрировать возможные ситуации, возьмем два текста — «кокос» и «осока» — и будем искать вхождение в эти тексты слова «сок». Выполняющиеся в этих случаях последовательности действий показаны на рис. 2.1. Величина i, играющая роль номера первого символа сравниваемого со словом участка текста, в данном примере должна пробегать значения от 1 до N-2, то есть до 3. В случае а ни один из участков текста не совпал со словом «сок». В самом деле, при i-1 участок образуют 1, 2 и 3 буквы текста — «кок», при i=2 участок состоит из 2, 3 и 4 букв текста — «око», и наконец, последнее сравнение при i=3 — 3, 4, и 5 буквы текста образуют «кос». Дальнейшее смещение невозможно, так как при выделении последнего участка достигнута правая граница текста. Итак, в случае а делается вывод о том, что данное слово «сок» в данный текст «кокос» не входит. В случае 6 совпадение участка текста с заданным словом отмечается при i-2, и дальнейшие сравнения уже не выполняются. Для завершения обсуждения задачи необходимо еще определить, каким образом следует сравнивать между собой две группы символов. Поскольку в нашем случае эти группы состоят всего из трех букв, можно предложить следующий план действий - взять первую букву слова и первую букву текущей тройки символов текста. Если они не совпадают, следует закончить сравнение с выводом о несовпадении всей группы. При совпадении первых символов перейдем ко вторым символам слова и текущей тройки. И точно так же при их несовпадении нужно закончить сравнение с выводом о несовпадении всей группы, а при совпадении перейти к рассмотрению последних символов. Сравнением третьего символа слова и третьего символа текущей тройки заканчивается процедура сравнения групп.

Примечания: 1) T[i:i+2] - -> участок текста от i-гo до i+2 символов;

2)с--> слово

а

………

i:=l; flag: = false;

while [i < = N - 2] and not flag do

if t [i: i + 2] = c then flag: = true

else i: = i + l;

if flag then

writeln ('слово входит в текст')

else

writeln ('слово в текст не входит')

…….

б

Рис. 2.2. Блок-схема алгоритма и фрагмент программы решения задачи поиска: упрощенная блок-схема основного узла алгоритма (а); фрагмент соответствующей программы на языке Паскаль (б)

Итак, для решения сформулированной задачи поиска мы построили алгоритм, последовательность действий, проработанную до элементарных операций, которые могут быть выполнены процессором компьютера — сравнение двух символов, сравнение двух чисел, закрепление за величиной ее текущего значения, увеличение текущего значения на единицу и т. д. Правда, этот алгоритм записан в словесной форме. На рисунке 2.2 изображены упрощенная блок-схема основного участка алгоритма и фрагмент программы решения задачи поиска, записанный на языке Паскаль. Читателям рекомендуется обратить внимание на то, сколько места занимают и насколько понятны записи алгоритма на уровне естественного языка, в виде блок-схемы, а также в виде программы. Если же задать действия алгоритма или программы в соответствующих им машинных кодах, то будет получена программа на машинном языке, которую «понимает» и может выполнять процессор.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: