Научная статья на тему 'Концепт алгоритма для начинающих'

Концепт алгоритма для начинающих Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
174
23
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КЛАССИФИКАЦИЯ ПО ПРИМЕНЕНИЮ И ПАРАДИГМЕ ПРОГРАММИРОВАНИЯ / ДЕТЕРМИНИРОВАННЫЕ И НЕДЕТЕРМИНИРОВАННЫЕ АЛГОРИТМЫ / CLASSIFICATION OF ALGORITHMS BY METHODS OF THEIR IMPLEMENTATION AND DESIGN PARADIGM / DETERMINISTIC AND NON-DETERMINISTIC ALGORITHMS

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Кинякин Виктор Николаевич, Слесарева Екатерина Александровна

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

The concept of an algorithm for beginners

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.

Текст научной работы на тему «Концепт алгоритма для начинающих»

УДК 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 (Бэкуса-Наура форма).

i Надоели баннеры? Вы всегда можете отключить рекламу.