Алгоритмы. Brainware - третий «кит» информатики
Состав информатики. Информатику обычно представляют состоящей из трёх, неразрывно связанных частей (трех «китов»):
Hardware, Software, Brainware
ИНФОРМАТИКА
Алгоритмы нужны всем: военным, поварам, врачам, фармацевтам, математикам и, конечно, программистам. Мы живём в мире алгоритмов, современная цивилизация – это цивилизация алгоритмов.
Мясников Александр Леонидович
•Мясников Александр Леонидович: Невозможно противопоставить свой скудный опыт индустрии доказательной медицины. В мире уже выработан алгоритм лечения больных, который выверен на миллионах пациентов. Нам нужно только согласиться с правильностью предложенных методов. Введение системы стандартов позволит нам сэкономить. Если бы мы приняли систему стандартов, все бы узнали, что лучшее лекарство от гипертонии - это копеечные мочегонные препараты, от инфарктов эффективнее всего защищает аспирин, оптимальный антибиотик при пневмонии - тетрациклин стоимостью 15 рублей, а не импортные препараты по 80 долларов за пузырёк. Система стандартов спасёт пациентов и от болезненных операций.
Мухаммад ибн Муса Хорезми (783 — 850) — таджикско-персидский математик, астроном и географ
Аль-Хорезми
Алгоритм Евклида для отыскания наибольшего общего делителя двух целых положительных чисел a и b:• Рассмотри данные числа a и b, переходим к следующему пункту;• Сравни предложенные числа: a = b; a > b; a < b; переходим к
следующему пункту;• Если a = b, то прекратите вычисления, так как каждое из них даст
искомый результат. Если нет, переходите к следующему пункту;• Если первое число меньше второго, переставь их местами.
Переходите к следующему указанию.• Вычитай второе число из первого. Рассмотри два числа
вычитаемое и остаток. Переходите к пункту второму.
Потребность в алгоритмизации научных вычислений:
Системы мира по Птолемею( 15 вычислений) и Копернику (7вычислений)
Потребность в упрощении системы учета:Механические счетные машины
(«Паскалина», калькулятор Лейбница, арифмометр) – для их работы необходима инструкция!
Дональд Эрвин Кнут (родился в 1938) — американский учёный.
Алгоритм — это конечный набор правил, который определяет последовательность операций для решения конкретного множества задач и обладает пятью важными чертами: конечность, определённость, ввод, вывод, эффективность.
Андрей Андреевич Марков (1903 — 1979) — советский математик
Алгоритм — это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату.
Андрей Николаевич Колмогоров (1903 — 1987) — советский математик
Алгоритм — это всякая система вычислений, выполняемых по строго определённым правилам, которая после какого-либо числа шагов заведомо приводит к решению поставленной задачи.
Алгоритмы. Определение
• Алгоритм – это строго определенная последовательность действий для некоторого
исполнителя, приводящая к конкретному результату за конечное число шагов.
• Составление алгоритма - творческий процесс.• Выполнения программы - это не творческий процесс.
• Ранее часто писали «алгорифм».• Ранее вместо слова «порядок» использовали слово
«последовательность».
Исполнители: неформальные и формальные
Иллюстрация понятия алгоритма
Задача
Алгоритм
Входные данные Выходные данные
Вычислитель
Дави>д Ги>льберт (нем. David Hilbert; 23 января 1862 — 14 февраля 1943)
Проблема разрешимости алгоритма по Гилберту:Всегда можно составить алгоритм, который сможет дать однозначный ответ на
любой заданный вопрос ( неразрешимых задач не существует).
Алгоритмическая разрешимость — свойство формальной теории обладать алгоритмом, определяющим по данной формуле, выводима она из множества аксиом данной теории или нет. Теория называется разрешимой, если такой алгоритм существует, и неразрешимой, в противном случае.
• В 1900 году на Втором Международном математическом конгрессе Гильберт формулирует знаменитый список 23 нерешённых проблем математики
Процедурный текст
• …Отвори потихоньку калитку• И войди в тихий садик как
тень.• Не забудь потемнее накидку,• Кружева на головку надень…
Декларативный текст
• Фонтану Бахчисарайского дворца• …Фонтан любви, фонтан
живой!• Принес я в дар тебе две розы.• Люблю немолчный говор твой• И поэтические слезы…
Тьюринг: нельзя определить алгоритмически, завершит ли данная
машина Тьюринга свою работу или нет.
лан М тисон Ть ринг (англ. Alan Mathison Turing; 23 А> э́> ю>июня 1912 — 7 июня 1954) — английский математик, логик, криптограф, оказавший существенное влияние на развитие информатики (машина Тьюринга).
Алонзо Чёрч (англ. Alonzo Church; 14 июня 1903, Вашингтон, США — 11 августа 1995, Хадсон, Огайо, США) — выдающийся американский математик и логик, внесший значительный вклад в основы информатики (лямбда –исчисление).
Самый важный алгоритм информатики
• Некоторый алгоритм для нахождения значений функции, заданной в некотором алфавите, существует тогда и только тогда, когда функция исчисляется по Тьюрингу, то есть когда ее можно вычислить на машине Тьюринга.
Машина Тьюринга
Требования к алгоритму
• Дискретность (прерывность, раздельность) – алгоритм состоит из отдельных простых "шагов". Каждый шаг исполняется только после того, как закончилось исполнение предыдущего.• Детерминированность (определенность) – каждая команда
алгоритма должна быть однозначной. Алгоритм должен быть независимым от того, кто и сколько раз будет его повторять. (Всё-таки, кулинарные рецепты плохо отвечают этому требованию)• Результативность (конечность) – алгоритм должен приводить к
результату за конечное число шагов.• Массовость – алгоритм может использоваться многократно при
разных исходных данных.
Форма представления алгоритмов• Алгоритм может быть записан
словами и/или формализован - изображён схематически. • Обычно сначала алгоритм
описывается словами, затем всё более формализуется (записывается на языке, понятном исполнителю). Если алгоритм выполняется компьютером, то для записи используется машинный код.
В алгоритме присутствуют следующие структуры:• линейная часть – команды,
выполняемые последовательно друг за другом; • ветвление – участок алгоритма,
содержащий условие, в результате проверки которого происходит переход на одно или на другое продолжение алгоритма; • цикл – участок алгоритма,
предусматривающий повторение одних и тех же операций с новыми исходными данными.
Формы записи алгоритмов
•Словесная, на естественном языке;•Графическая, например, в виде блок-схем;•На алгоритмическом языке (псевдокоде);•На языках программирования.
Запись алгоритма на естественном языке
• Пример: Автомат получает на вход два трехзначных восьмеричных числа. По этим числам строится новое восьмеричное число по следующим правилам:• Вычисляются три восьмеричных числа – сумма старших
разрядов, сумма средних разрядов, сумма младших разрядов заданных чисел.• Полученные три восьмеричных числа записываются друг за
другом в порядке убывания (без разделителей).• Пример. Исходные числа: 271,626. Поразрядные суммы: 10,11,7.
Результат: 11107.• Определите, какое из предложенных чисел может быть
результатом работы автомата: 18123; 16711; 13115?
Запись алгоритма в виде блок-схем
начало и конец алгоритма
Блок выполнения операции, обработки данных, изменения значения
Логический блок (проверка истинности или ложности логического выражения (условия) и выбор следующего блок; ветвление алгоритма с одним входом и несколькими (двумя) выходами, из которых может быть выбран только один
Блок ввода/ вывода данных
• Для графического представления алгоритмов в виде блок-схемы используются стандартные обозначения элементов (ГОСТ 19.701 – 90).
Запись алгоритма на алгоритмическом языке (псевдокоде)
Программа - это алгоритм, записанный на языке программирования.
• Оператор присвоения -(:=).• Примеры: • 1. Х:=2+5 • 2. Х:= Х*2 • 3. Х:=2>5 Задача: Установите такой порядок выполнения операций, чтобы при начальных значениях А=2, В=5, С=-5 результирующим стало значение С=5.• 1) С=С/5; 2) В=А+В; 3) С=В+10; 4) А=А*В.
Оператор перехода
• Команды в программах выполняются последовательно. Имеется несколько операторов, которые изменяют последовательность выполнения команд программы. • Формат записи оператора: GO TO <метка строки>.
Оператор ветвления
• Форматы записи оператора:• IF(ЕСЛИ) <логическое условие>
THEN (ТО)<оператор 1> ELSE (ИНАЧЕ)<оператор 2>• Если логическое условие
истинно, то выполняется первый блок операторов, а если ложно, то второй.• Пример: • IF А>В THEN А=А*2 ELSE В=В*2
Блок-схема оператора ветвления:
Заданы числа a и b. Определить, эти числа одного или разных знаков?
•При начальных значениях А=-1, В=3.Чему будет равно С?• IF А>=В THEN С:=(А – В)*В ELSE С:= (В-А)*А• IF С<0 THEN С:=С*С
Дана болок-схема. Какое значение присваивается переменной Х после
исполнения алгоритма? (5)
ДА
нет ДА
нет
a:= 5 b:= 3 с:= 1
Х< = b
256
Х:= a
Х:= b
Х< = с
Х:= с
Операторы цикла.
• Операторы цикла организуют повторное выполнение одних и тех же команд несколько раз. • Существуют две
разновидности операторов цикла: оператор цикла с фиксированным числом повторений и операторы цикла с переменным числом повторений, зависящим от условий.
• Формат записи оператора цикла с фиксированным числом повторений:
FOR i=N1 TO N2 STEP N3;•<тело цикла> ;•NEXT i
Цикл с переменным числом повторений:Блок-схема цикла ПОКА (цикл с предусловием)
• Цикл с предусловиемДаны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A
Цикл с переменным числом повторений:Формат записи цикла ПОКА НЕ
Задача, в которой требуется вводить с клавиатуры числа и подсчитывать их сумму, до первого введенного отрицательного числа.
Как вы думаете, к какому виду алгоритмов относится следующий пример? Что он позволит вычислить?
Запись алгоритма на языке программирования
• #!/usr/bin/python3• # -*-coding: utf-8 -*-• import math• A = float(input( 'a: '))• B = float(input( 'b: '))• C = float(input( 'c: '))• D = B*B - 4.0*A*C• X1 = (-B + math.sqrt(D))/(2.0*A)• X2 = (-B - math.sqrt(D))/(2.0*A)• print (X1,X2)• print ('END')
Классификация алгоритмов• детерминированные (жесткие): задаются действия,
обеспечивающие однозначный результат (например, работа двигателя); • гибкие:
• вероятностные (стохастические): используют способы, приводящие к вероятному достижению результата (например, метод Монте-Карло)• эвристические: достижение результата однозначно не предопределено
Эвристический алгоритм (э́вристика)
Эвристика (от греч. εὕρηκα «нашёл!») - алгоритм решения задачи, не имеющий строгого обоснования, но, тем не менее, дающий приемлемое решение задачи в большинстве случаев.
Эвристика — это математически «не совсем корректный», но практически полезный алгоритм.
Эвристика. Особенности:
• она не гарантирует нахождение лучшего решения;• она не гарантирует нахождение решения, даже если оно заведомо
существует;• она может дать неверное решение.
Эвристики применяются для решения задач, когда полный перебор вариантов занимает существенное время. Например, при
распознавании образов, в антивирусных программах, компьютерных играх и т. д.
Пример э́вристического алгоритма. Задача коммивояжера.
Коммивояжёр должен посетить один раз все указанные города и вернуться обратно, в начальную точку маршрута. Необходимо выбрать минимальный по затратам маршрут.
•Коммивояжёр — разъездной торговый агент.
Детерминированный алгоритм
В общем случае, если есть n городов, то существует (n-1)! вариантов маршрута.
Время, требуемое для детерминированного алгоритма
Посчитать длину маршрута можно за 1 нс = 10-9 с.
Число городов Время расчета
10 меньше секунды
15 87 секунд
18 99 часов
19 74 дня
20 3 с половиной года
22 полторы тысячи лет
Оптимальный маршрут: 1-5-2-3-4-1.
1 2 3 4 5
1 10 25 25 10
2 1 10 15 2
3 8 9 20 10
4 14 10 24 15
5 10 8 25 27
«Посмотрел – и сразу понял!»
• ДРАКОН (Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность).
Тест Тьюринга — эмпирический тест, идея которого была предложена Аланом Тьюрингом в статье «Вычислительные машины и разум», опубликованной в 1950 году в философском журнале «Mind». Тьюринг задался целью определить,
может ли машина мыслить.
Тренируйте сами: О
нлайн чат бот с открыты
м
обучением.
Вы м
ожете исправлять ответы
бота и добавлять
новые варианты
. Результаты обучения будут
доступны другим
пользователям
сразу после сохранения базы знаний.
Бота обучают лю
ди!