УДК 33 ББК 65
КОНЦЕПТ АЛГОРИТМА ДЛЯ НАЧИНАЮЩИХ
ВИКТОР НИКОЛАЕВИЧ КИНЯКИН,
доцент кафедры информатики и математики Московского университета МВД России E-mail: [email protected]; ЕКАТЕРИНА АЛЕКСАНДРОВНА СЛЕСАРЕВА, кандидат психологических наук старший преподаватель кафедры информатики и математики Московского университета МВД России E-mail: [email protected]
Citation-индекс в электронной библиотеке НИИОН
Аннотация. Рассмотрены уровни описания и классификация алгоритмов по способу реализации и парадигме программирования. Отмечено, что задачи с высокой вычислительной сложностью могут быть более эффективно решены в классе недетерминированных алгоритмов. Материал содержит список используемой и рекомендуемой литературы. Для студентов и специалистов, использующих в своей научно-практической деятельности алгоритмические методы решения задач.
Ключевые слова: классификация по применению и парадигме программирования, детерминированные и недетерминированные алгоритмы.
Annotation. This article describes the levels of description and classification of algorithms by methods of their implementation and design paradigm. It is noted that a problem with the high computational complexity could be more efficiently solved in the class of non-deterministic algorithms. The material includes the list of literature, used and recommended. For students and professionals who are using algorithmic methods in their practical work.
Keywords: classification of algorithms by methods of their implementation and design paradigm, deterministic and non-deterministic algorithms.
Введение. Стремление к всестороннему изучению законов развития материи обуславливает необходимость привлечения методов диалектической триады: онтологии, гносеологии и логики, — в своем единстве составляющей универсальный инструмент познания действительности. К одной из форм отражения относят моделирование — познаваемые пространственно-временные отношения реального мира заменяют абстракцией, формализуя движение материи, структуры исследуемого объекта, в универсальной или специально созданной для этого искусственной среде. Среди множества описаний синтетических систем, различных по форме и содержанию, доминирует ИТ1-абстрагирование. Целью статьи является изложение концепта алгоритма — математического содержания ИТ, — доступное учащимся, обладающим базовыми знаниями в области дискретной математики, изучающим алгоритмические методы решения задач.
В статье использованы термины и определения, заимствованные из ИСО/МЭК 2382-1, ГОСТ 19781, ГОСТ Р 52653.
Понятие алгоритма. Известно множество интерпретаций термина алгоритм: от конечного упорядо-
ченного множества точно определенных правил для решения конкретной задачи (ИСО/МЭК 2382-1) до отображения эффективного метода, в котором конечный список хорошо определенных инструкций, предназначенных для решения задачи с заданным начальным состоянием, порождает (быть может, вероятностный) переход от начального состояния до конечного через последовательность промежуточных состояний. Способ перехода формально задают функцией2 в виде зависимости «машины» у = Дх) или отношения f : X ^ Y. Например, в пространстве действительных чисел R >0 функция возведения в квадрат может быть задана как Д(х) = х2 (равенство у = х2 не является функцией!), так и бинарным отношением Д = {Х ^|х е Х,х2 еY}, Д : R ^ ^ R^ , (на R <0 функция неопределима). Из примера следует, что для заданных условий способ изменения состояния может быть не найден — в формальной теории известна проблема существования алгоритма определения формулы на основе конкретных аксиом (проблема алгоритмической неразрешимости, невычислимые по Тьюрингу функции, теоремы Геделя о полноте). Например, хотя общее уравнение степени п>5 неразрешимо для радикалов (теорема Абеля-Руффини), оно может быть
получено приближенно численными методами (например методом Ньютона) и разрешимо в поле комплексных чисел согласно основной теореме алгебры.
Уровни алгоритмизации. Требуемую степень формализации и вычислительную сложность объекта управления отражают градации логической шкалы представления алгоритма: высший уровень (управление знаниями), промежуточный уровень (управление объектами) и низший (управление данными). Каждый уровень ориентирован на конкретного исполнителя: человека или машину, — управляющего вычислительным процессом, и алгоритм его работы. Очевидно, что исполнителем высшего и промежуточного уровней может быть носитель знаний, владеющий естественным и близким ему языком описания алгоритма. На высшем уровне машинной реализацией
обычно пренебрегают. На промежуточном уровне решаемую задачу частично формализуют, описывая на языке, понятном человеку в терминах гипотетической машины (например, псевдокод, иначе — автокод, графический3 язык и пр.). Третий, самый детализированный уровень, формально низший, состоит в том, что исполнитель — машина; глубокая формализация достигается с помощью алгоритмического языка4 программирования. Отметим, что и сложная программа, состоящая из классов, модулей, объявлений, процедур, операторов и прочих объектов, и программа, состоящая из одного оператора выражения5 — одночлена, — формально соответствуют низшему уровню представления. В таблице 1 приведен пример трех форм спецификации алгоритма поиска наибольшего целого в неупорядоченном списке чисел.
Таблица 1
Алгоритм поиска наибольшего целого в неупорядоченном списке чисел
Высший уровень Естественный язык Исполнитель — человек
Промежуточный уровень Псевдокод
Исполнитель — человек
Низший уровень Программа, VBA1 Исполнитель — машина
1
2
3
1. Assume the first item is largest.
2. Look at each of the remaining items in the list and if it is larger than the largest item so far, make a note of it.
3. The last noted item is the largest in the list when the process is complete.
Algorithm LargestNumber Input: A non-empty list of numbers L. Output: The largest number in the list L. largest ^ L0
for each item in the list L>1, do if the item > largest, then largest ^ the item return largest
Function Largest(l)
'Largest Number in array L
Largest = l(0)
For Each item In l
If item > Largest Then _
Largest = item
Next
End Function
Текст в графах 1 и 2 заимствован из URL: http://sch00ls-wikipedia.0rg/wp/a/Alg0rithm.htm, 15 февраля 2016 г.
Классификация алгоритмов. В [кн. Кормен] и [кн. Кнут] введено понятие термина алгоритм, рассмотрены особенности построения и анализа на множестве примеров различных классов, различающиеся по способу реализации, парадигме программирования, области применения, сложности и др. К категории «по способу реализации» отнесены алгоритмы рекурсивные и итеративные, последовательные и параллельные, детерминированные и недетерминированные, точные и приближенные и логические.
Структурные примитивы последовательность, выбор и повторение составляют базис многих методов программирования. Признаком итеративного класса является повторное (циклическое) применение вычислительной схемы типа f (х)= f[f 1(х)] , где i — порядок итерации функции f(x) . Пусть умножение методом многократного сложения 3*5 осуществляется по схеме: {3+0; (3+0)+3; ((3+0)+3)+3; (((3+0)+3)+3)+3; ((((3+0)+3)+3)+3)+3}, тогда 2-я итерация равна шести (3+3), третья — девяти (3+3+3) и т. д. Для a=3, b=5 итеративная форма представления в псевдокоде: AlgorithmMult(a,b): mult ^ 0; for i е 1 ^ b do mult ^ + a; return mult.
Любой итеративной форме может быть противо-
поставлена рекурсивная альтернатива и наоборот. Под рекурсией понимают структуру f(0)=a, f(x+1)=g(x,f(x)), содержащую обращение — прямое или косвенное — к «самой себе» и суперпозицию f в g, иначе g ° f. Примеры: а) примитивно-рекурсивно n-факториал определен как 0!=1; n!=(n-1)!*n, б) числовой ряд задан рекуррентной формулой Xj = a, xi+1 = f(x.) и с) итеративному алгоритму из колонки (3) таблицы 1 эквивалентна рекурсия Largest (на языке VBA):
1. Function Largest (l, k)
2. 'Largest Number in array L; k — index
3. If k = 0 Then
4. Largest = l(0)
5. Else
6. Largest = Largest (l, k — 1)
7. If Largest < l(k) Then Largest = l(k)
8. End If
9. End Function
Где в шестой строке спецификации процедуры Largest прямо рекурсивно вызывается сама процедура Largest.
Последовательный и параллельный алгоритмы.
Параллельный метод состоит в организации одновременного решения частей одной и той же задачи последовательными методами и последующем объединении результата. Задача синхронизации сегментов решения известна как «проблема обедающих философов». На параллельном решении основано сетевое планирование и управление, описываемое математически графом или сетью.
Детерминированные и недетерминированные алгоритмы. Входные данные (детерминанта) в детерминированных (неслучайных) процедурах предопределяют результат, тогда как в недетерминированных — нет: применяется эвристическое правило принятия решения среди альтернативных и/или однозначно неопределенных.
Точные и приближенные алгоритмы. Выбор типа зависит от сложности проблемы. Например, в задаче о коммивояжере (travelling salesman problem), состоящей в поиске гамильтонова цикла минимальной стоимости, точное решение достигается перебором всех путей за время n!, в то время как приближенное решение — за 2n. Приближение (аппроксимацию) проводят как детерминированно, так и вероятностно: в первом случае, например, методом наименьших квадратов, а во втором — методами численного интегрирования Монте-Карло и др.
Логические алгоритмы. Алгоритмы данного класса — основа логической парадигмы вывода, процедура которой состоит из двух компонент: условия и управления. Исход контролируемого события (причина) влечет вызов управляющей процедуры (следствие), что отражено в BNF-нотации6:
<условный оператор>::= if <булево выражение> then <оператор>.
В группе парадигм программирования выделяют следующие классы: вычислительные, поисковые, линейные, динамические, вероятностные и эвристические. В эмпирике индуктивного синтеза результат моделирования из-за высокой размерности задачи (стоимости) иногда не может быть детерминированным, тогда применяют вероятностные и эвристические методы, на описании которых мы и закончим свой обзор.
Вероятностные и эвристические алгоритмы. Ранее, в категории «по способу реализации», затронута тема недетерминированного решения задач с высокой вычислительной сложностью реализации. Алгоритмы, построенные на основе случайных событий и распределений, относят к классу вероятностных, решающих те же задачи, что и детерминированные, но с элементом случайности и за приемлемое время. Эвристические применяют в случае еще более высоких ограничений на время работы, не имея строгого математического обоснования; суть метода — правило случайного принятия решения среди альтернативных и/или однозначно неопределенных.
Заключение. Приведенный обзор далеко не по-
лон — развернутое описание и более точные дефиниции классов алгоритмов можно найти в цитируемой и другой специальной литературе; [List of algorithms] содержит список известных алгоритмов. Надеемся, что содержательная сторона термина алгоритм раскрыта в той степени, которая достаточна для стимулирования интереса у читателя к теории алгоритмов.
Литература
1. ИСО/МЭК 2382-1-1993. Информационные технологии. Словарь. Часть 1. Основные термины.
2. ГОСТ Р 52292-2004. Информационная технология. Электронный обмен информацией. Термины и определения .
3. ГОСТ Р 52653-2006. Информационно-коммуникационные технологии в образовании. Термины и определения
4. Кнут, Дональд, Эрвин. Искусство программирования, том 1. Основные алгоритмы, 3-е изд.: пер. с англ.: Уч. Пос. — М.: Издательский дом «Вильямс», 2000.
5. Кормен, Ч. Лейзерсон, Р. Ривест. Алгоритмы: построение и анализ. Пер. с англ. Под ред. А. Шеня. — 2 изд., — М.: МЦНМО: БИНОМ. Лаборатория знаний, 2004.
6. Кинякин В.Н., Задохина Н.В. Информационная модель и ее компоненты, Вестник Московского университета МВД России, №7, 2015
7. Лапин В. В., Слесарева Е. А., Старостенко И. Н. Информационные системы в деятельности органов внутренних дел. Учебное пособие. — М.: Московский университет МВД России, 2014.
8. Путилов А.О., Дубинина Н.М., Слесарева Е.А. Элементы математического анализа (множества, функции, пределы, производные): Учебное пособие. — Москва: 2013
9. List of algorithms — https://en.wikipedia.org/wiki/ List_of_algorithms.
10. Wikipedia for Schools — Algorithm (URL: http:// schools-wikipedia.org/wp/a/Algorithm.htm, 15 февраля 2016 г.)
1 ИТ - информационные технологии, ГОСТ Р 52653-2006.
2 В ИТ-терминах функцию представляют оператором или процедурой.
3 Графические средства представления алгоритма: блок-схема, отношения xRy, R-S модель «сущность-связь»), таблицы состояний (в простейшем случае - таблицы истинности).
4 Алгоритмический язык - это искусственный язык, предназначенный для выражения алгоритмов (ГОСТ 19781-90). Например, Алгол 68 - алгоритмический, процедурный, императивный, высокоуровневый язык программирования.
5 В программировании используются операторы (функции): арифметические, логические и строковые (например, оператор конкатенации литерных цепочек).
6 VBA — англ. Visual Basic for Applications (диалект языка Visual Basic для приложений).
7 BNF - англ. Backes-Naur-Form (Бэкуса-Наура форма).