47

presentation Algoritm

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: presentation Algoritm
Page 2: presentation Algoritm

Откуда взялось слово «алгоритм»?

Слово «алгоритм» возникло в средние века, когда европейцы познакомились со способами выполнения

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

описанными математиком из Хорезма. Таким образом, слово «алгоритм» оказывается европеизированным

произношением слов «аль Хорезм» и первоначально под алгоритмом понимали способы выполнения

арифметических действий, описанные в этом руководстве математиком из Хорезма.

Н

е

м

н

о

г

о

и

з

и

с

т

о

р

и

и

НазадДалее

Page 3: presentation Algoritm

Что такое алгоритм?

Алгоритм является фундаментальным понятием информатики. Представление о нем необходимо для

эффективного применения вычислительной техники к решению практических задач. Дадим определение

алгоритма.

Далее Назад

Page 4: presentation Algoritm

Алгоритм – это точное и безотказное предписание действий, которые должны быть

выполнены.

Начнем с неформального определения Примечание

Далее Назад

Page 5: presentation Algoritm

Иногда говорят не «алгоритм», а «алгоритм решения некоторой задачи (или группы задач)». Понятия эти близкие, но разные, ибо алгоритм

может и не решать никаких задач (например, правила по русскому языку).

Алгоритм решения некоторой задачи – это алгоритм, приводящий к решению этой задачи за

конечное число действий.

Алгоритм решения группы задач – это алгоритм, приводящий к решению каждой задачи (из этой группы) за конечное число

действий.

Далее Назад

Page 6: presentation Algoritm

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

Буклет «Исполнители алгоритмов»

Далее Назад

Page 7: presentation Algoritm

При решении практических задач, предполагающих разработку алгоритмов для реализации на ЭВМ, и тем

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

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

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

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

рамках заданных языковых средств. Далее Назад

Page 8: presentation Algoritm

Алгоритм может быть хорошим или плохим (по чьей-то оценке), он может быть ясным или запутанным,

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

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

иные качества алгоритма, но основных свойств алгоритма по-прежнему два

(см. определение).Кроме того, мы можем уметь решать задачу и не знать алгоритм ее решения, т. е. не знать (достаточно точно),как мы ее решаем (примеры задач). Далее Назад

Page 9: presentation Algoritm

В информатике выделяют следующие свойства алгоритма:

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

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

(Данное свойство называют еще определенностью алгоритма или детерминированностью).

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

Далее Назад

Page 10: presentation Algoritm

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

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

Далее Назад

Page 11: presentation Algoritm

Алгоритм можно представить различными способами:

С помощью словесного описания (поиск слова в энциклопедическом словаре);

В виде таблицы (таблица Пифагора);

Последовательностью формул (вычисление площади неправильного треугольника со сторонами а, b, c);

С помощью графического описания (блок-схемы);

Записанным на алгоритмическом языке (псевдокод);

Записанным на языке программирования.

Далее Назад

Page 12: presentation Algoritm

Можно выделить основные структуры алгоритмов:

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

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

Циклические, в которых последовательность действий повторяется многократно (вычисление многочлена Nой степени по схеме Горнера).

Далее Назад

Page 13: presentation Algoritm

На основании вышесказанного дадим определение алгоритма.

В информатике под алгоритмом понимают понятное и точное предписание исполнителю совершить

последовательность действий, направленных на достижение указанной цели или на решение

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

Далее Назад

Page 14: presentation Algoritm

Другие подходы к определению алгоритма

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

неформальный характер, ссылается на некоторые точно не определенные, но интуитивно понятные вещи. Например, при

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

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

программ для компьютеров, станков с ЧПУ, промышленных роботов и т.д. Однако, как фундаментальное научное понятие

алгоритм требует более обстоятельного изучения. Оно невозможно без уточнения понятия «алгоритм», более строгого его описания или, как еще говорят, без его формализации.

Далее Назад

Page 15: presentation Algoritm

Известно несколько подходов к формализации понятия «алгоритм»:

теория конечных и бесконечных автоматов;

теория вычислимых (рекурсивных) функций;

λ-исчисление Черча.

Обсудим формализацию понятия алгоритма в теории автоматов на примере машин Поста, Тьюринга,

нормальных алгоритмов Маркова и основ теории рекурсивных функций.

Идеи λ-исчислений Черча реализованы в языке программирования LISP

Далее Назад

Page 16: presentation Algoritm

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

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

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

Далее Назад

Page 17: presentation Algoritm

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

Далее Назад

Page 18: presentation Algoritm

В настоящее время создание алгоритмов – написание программ для электронных вычислительных машин – стало

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

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

алгоритма.

Операциональный подход

Далее Назад

Page 19: presentation Algoritm

С появлением массовых ЭВМ 3-го поколения устаревшая технология программирования оказалась основным

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

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

программирования. Появившийся в начале 1970-х годов новый подход к разработке алгоритмов получил название

структурного.

Структурный подход

Далее Назад

Page 20: presentation Algoritm

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

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

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

аудиовизуальных программных комплексов стало объектное (иногда говорят объектно-ориентированное)

программирование, а противостоящим ему при решении определенных классов задач является декларативное

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

Далее Назад

Page 21: presentation Algoritm

Процедурно-ориентированное программирование развивается и в другом направлении – так называемого,

параллельного программирования. В привычных алгоритмах и программах действия совершаются

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

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

Реализация параллельных алгоритмов на ЭВМ стала возможной с появлением многопроцессорных

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

Далее Назад

Page 22: presentation Algoritm

Алгоритм сложения десятичных чисел.

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

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

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

задачу, а не все задачи, на которые объявлен.

Далее Назад

Page 23: presentation Algoritm

Задача о волке, козе, капусте

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

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

«промоделировали» решение и эту модель запрограммировать.

Далее Назад

Page 24: presentation Algoritm

Мы успешно программируем задачи, в которых у человека нет интуиции. Но когда переходим к решению задач, где

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

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

— не знаем алгоритмов природы.Завязать шнурки на ботинках бантиком нетрудно.

А вот написание алгоритма !..

Далее Назад

Page 25: presentation Algoritm

Разбор кучи.

В начале автоматизированной линии обработки поковок коленчатых валов стоит человек. Он вынимает заготовки из короба и вставляет в конвейер. Автоматизировать эту работу не удается. Надо узнавать деталь в разных

ракурсах, частично заложенную другими деталями. Решать, с какой начать и по какой траектории ее

вынимать.

Далее Назад

Page 26: presentation Algoritm

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

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

чтобы было ясно как довести этот алгоритм до программы. Что означает, что предписание должно быть безотказным? Это значит, что в любых условиях, на которые объявлен

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

возникнуть в дальнейшем в результате выполнения самого алгоритма.

ПримечаниеПримечание

Далее Назад

Page 27: presentation Algoritm

Абстрактные (т.е. существующие не реально, а лишь в воображении) машины Поста и Тьюринга, предназначенные

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

друга (и практически одновременно) в 1936г. американским математиком Эмилем Постом и английским математиком

Аланом Тьюрингом. Эти машины представляют собой универсальных исполнителей, являющихся полностью

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

Машина Поста менее популярна, хотя она значительно проще машины Тьюринга. С ее помощью можно вести

обучение первым навыкам составления программ для ЭВМ.

Машины Поста и Тьюринга

Далее Назад

Page 28: presentation Algoritm

Машина Поста

Абстрактная машина Поста представляет собой бесконечную ленту, разделенную на одинаковые клетки, каждая из

которых может быть либо пустой, либо заполненной меткой «V», и головки, которая может перемещаться вдоль ленты на

одну клетку вправо или влево, наносить в клетку ленты метку, если этой метки там ранее не было, стирать метку,

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

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

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

головки вместе с состоянием ленты характеризует состояние машины Поста.

Далее НазадМашина Поста

Page 29: presentation Algoritm

Машину Поста можно рассматривать как упрощенную модель ЭВМ. В самом деле,

как ЭВМ, так и машина Поста имеют:

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

в ЭВМ можно читать информацию по адресу; набор команд ЭВМ значительно шире и выразительнее, чем команды машины

Поста, и т.д.

Далее Назад

Page 30: presentation Algoritm

Машина Тьюринга

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

пишущей головки, лентопротяжного механизма и операционного исполнительного устройства, которое может находиться в одном из дискретных состояний q0, q1, …, qs,

принадлежащих некоторой конечной совокупности (алфавиту внутренних состояний). При этом q0 называется начальным

состоянием. Порядок работы машины Тьюринга (с рабочим алфавитом a0,

a1, …, at и состояниями q0, q1, …, qs) описывается таблицей машины Тьюринга. Эта таблица является матрицей с

четырьмя столбцами и (s+1)(t+1) строками. Каждая строка имеет вид qi aJ viJ qiJ,

0≤i ≤s, 0 ≤J ≤t, qiJ{q0, q1, …, qs}.Далее Назад

Page 31: presentation Algoritm

Машина Тьюринга работает по следующим правилам:

Если машина находится в состоянии qi, головка прочитывает символ aJ, в рабочей ячейке. Пусть строка qi aJ

viJ qiJ, начинающаяся с символов qi aJ, встречается только один раз в таблице. Если viJ – буква рабочего алфавита, то

головка стирает содержимое рабочей ячейки и заносит туда эту букву. Если viJ – команда R или L для лентопротяжного механизма, то лента сдвигается на одну ячейку вправо или

влево (если не происходит выход за левый край ленты) соответственно. Если viJ=s, то происходит машинный

останов.

НазадДалее

Page 32: presentation Algoritm

Нормальные алгоритмы Маркова

Для формализации понятия алгоритма российский математик А.А.Марков предложил использовать

ассоциативные исчисления.Рассмотрим некоторые понятия ассоциативного

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

букв алфавита (линейный их ряд) называется словом в этом алфавите. Совокупность всех слов в данном алфавите вместе с системой допустимых подстановок называют

ассоциативным исчислением.Если алгоритм N задан в некотором расширении алфавита А, то говорят, что N есть нормальный

алгоритм над алфавитом А.Далее Назад

Page 33: presentation Algoritm

Нормальный алгоритм Маркова можно рассматривать как универсальную форму задания любого алгоритма.

Универсальность нормальных алгоритмов декларируется принципом нормализации: для любого алгоритма в

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

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

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

Далее Назад

Page 34: presentation Algoritm

Ниже перечислены способы композиции нормальных алгоритмов.

Суперпозиция алгоритмов.

Объединение алгоритмов.

Разветвление алгоритмов.

Итерация алгоритмов.

Далее Назад

Page 35: presentation Algoritm

Нормальные алгоритмы Маркова являются не только средством теоретических построений, но и основой

специализированного языка программирования, применяемого как язык символьных преобразований при

разработке систем искусственного интеллекта. Это один из немногих языков, разработанных в России и получивших

известность во всем мире.Существует строгое доказательство того, что по

возможностям преобразования нормальные алгоритмы Маркова эквиваленты машинам Тьюринга.

Далее Назад

Page 36: presentation Algoritm

Рекурсивные функции

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

Исторически этот подход возник первым, поэтому в математических исследованиях, посвященных алгоритмам, он

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

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

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

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

Далее Назад

Page 37: presentation Algoritm

Тезис Черча:

Функция f полувычислима, если и только если она частично рекурсивна;

Функция f вычислима, если и только если рекурсивны f и характеристическая функция χD(f).

Характеристическая функция подмножества Х в Y (XY) есть такая функция, что

χ(х)=1, если хХ и χ(х)=0, если хY-Х.

Далее Назад

Page 38: presentation Algoritm

Тезис Черча может использоваться как определение алгоритмической неразрешимости.

Пусть имеется счетная последовательность «задач» Р1, Р2, …, которые имеют ответ «да» или «нет».

Такая последовательность носит название «массовой проблемы». Свяжем с ней функцию f из N в N:

D(f)={i|Pi имеет ответ «да»};

f(i)=1, если iD(f).Массовая проблема Р называется алгоритмически

разрешимой, если функции f и χD(f) частично рекурсивны.

В противном случае Р называется алгоритмически неразрешимой.

Далее Назад

Page 39: presentation Algoritm

Операциональный подход

Программы составлялись из команд, непосредственно или почти непосредственно исполнявшихся компьютером (точнее говоря, процессором):

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

Далее Назад

Page 40: presentation Algoritm

Основные недостатки алгоритмов, к которым приводил операциональный подход:

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

команд компьютера, на его скромные возможности приводила к огромной трудоемкости, к сложности

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

техники оказалось именно программирование.

Далее Назад

Page 41: presentation Algoritm

Структурный подход

С появлением структурного программирования описанные выше трудности были во многом преодолены. В основе

технологических принципов структурного программирования лежит утверждение о том, что

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

и цикла (это содержание теоремы Бема-Якопини).Еще одним важным компонентом структурного подхода к

разработке алгоритмов является модульность.Модуль – это последовательность логически связанных

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

Далее Назад

Page 42: presentation Algoritm

Использование модулей имеет следующие преимущества:

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

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

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

Далее Назад

Page 43: presentation Algoritm

Схема иерархии позволяет программисту сначала сконцентрировать внимание на определении того, что надо

сделать в программе, а лишь затем решать, как это надо делать. При нисходящем проектировании исходная,

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

Такое разбиение называется детализацией или декомпозицией.

Данный метод проектирования программ позволяет преодолевать проблему сложности разработки программы

(и ее последующей отладки и сопровождения).

Далее Назад

Page 44: presentation Algoritm

Объектно-ориентированное программирование

В объектно-ориентированном подходе исходная задача представляется как совокупность взаимодействующих

объектов. Наиболее популярные реализации объектного программирования созданы на основе языков Паскаль и

Бейсик.

Далее Назад

Page 45: presentation Algoritm

Декларативное программирование

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

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

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

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

поддерживает декларативно-ориентированный язык программирования. При логическом варианте такого подхода

(прежде всего это относится к языку Пролог) задача описывается совокупностью фактов и правил в некотором формальном логическом языке, при функциональном варианте – в виде

функциональных соотношений между фактами (язык Лисп).Далее Назад

Page 46: presentation Algoritm
Page 47: presentation Algoritm

ВыводВывод

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

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

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

удовлетворяет всем требованиям при решении практических задач.

В информатике под алгоритмом понимают понятное и точное предписание исполнителю совершить

последовательность действий, направленных на достижение указанной цели или на решение

поставленной задачи. Назад