Конспект
Составление линейных алгоритмов
На предыдущих уроках мы узнали, что такое алгоритм, какие бывают виды алгоритмов, и кто их исполняет.
Сегодня мы попрактикуемся в составлении алгоритмов. Это очень важные навыки. Мы уже неоднократно отмечали, что составить алгоритм, то есть объяснить другому, как выполнять те или иные задачи так, чтобы это было понятно каждому, — очень тяжело. Наша задача – научиться составлять алгоритмы для различных примеров, чтобы впоследствии, когда вы столкнётесь с необходимостью составлять алгоритмы для написания различных программ, это не составляло для вас особого труда.
Начнём мы с самых простых алгоритмов – линейных. Их составление, обычно, не вызывает особого труда. Однако, навыки составления таких алгоритмов чрезвычайно важны.
Пример 1. Составить алгоритм запуска программы Paint в ОС Windows 7.
Решение:
Вспомним из курса информатики 5 класса порядок действий для запуска программы Paint.
- Войти в меню «Пуск».
- Войти в пункт «Все программы».
- Войти в пункт «Стандартные».
- Выбрать программу «Paint».
Данный алгоритм в виде блок-схемы имеет следующий вид:
Рис. 1. Блок-схема к примеру 1.
Составление алгоритмов с ветвлениями
Рассмотрим пример на составление алгоритмов с ветвлениями.
Пример 2. Составьте алгоритм для перехода дороги на светофоре.
Рис. 2. Светофор (Источник).
Решение:
Возможны следующие ситуации: в тот момент, когда мы подошли к дороге горел красный или зелёный свет. Если горел зелёный свет, то можно переходить дорогу. Если же горел красный свет, то необходимо дождаться зелёного – и уже тогда переходить дорогу.
Таким образом, алгоритм имеет следующий вид:
- Подойти к светофору.
- Посмотреть на его свет.
- Если горит зелёный, то перейти дорогу.
- Если горит красный, то подождать, пока загорится зелёный, и уже тогда перейти дорогу.
Блок-схема данного алгоритма имеет вид:
Рис. 3. Блок-схема к примеру 2.
Составление циклических алгоритмов
Рассмотрим пример на составление циклического алгоритма. Мы уже несколько раз обсуждали перевод чисел из десятичной системы в двоичную. Теперь пришло время чётко сформулировать этот алгоритм.
Напомним, что его принцип состоит в делении числа на 2 и записей остатков, получающихся при делении.
Пример 3. Составить алгоритм перевода чисел из десятичной системы в двоичную.
Решение:
То есть, алгоритм будет выглядеть так:
- Если число равно 0 или 1, то это и будет его двоичное представление.
- Если число больше 1, то мы делим его на 2.
- Полученный остаток от деления записываем в последний разряд двоичного представления числа.
- Если полученное частное равно 1, то его дописываем в первый разряд двоичного представления числа и прекращаем вычисления.
- Если же полученное частное больше 1, то мы заменяем исходное число на него и возвращаемся в пункт 2).
Блок-схема этого алгоритма выглядит следующим образом:
Рис. 4. Блок-схема к примеру 3.
Примечание: подумайте, можно ли как-то упростить приведенную блок-схему.
«Чтение» алгоритмов
Пример 4. По заданной блок-схеме выполнить действия алгоритма для числа 23.
Рис. 5. Блок-схема к примеру 4.
Решение:
- a=23
- 23+5=28
- 28<35
- 28+5=33
- 33<35
- 33+5=38
- 38>35
- 76 – двузначное число
- 76-50=26.
Ответ: 26.
На этом уроке мы разобрали примеры составления алгоритмов, а также пример «чтения алгоритма» по готовой блок-схеме.
На следующем уроке мы обсудим игры и выигрышные стратегии.
Как убить Кощея?
Наверное, все помнят из детства сказку, в которой рассказывается о местонахождении смерти Кощея Бессмертного: «Смерть моя – на конце иглы, которая в яйце, яйцо – в утке, утка – в зайце, заяц в сундуке сидит, сундук на крепкий замок закрыт и закопан под самым большим дубом на острове Буяне, посреди моря-океяна …»
Рис. 6. Кощей Бессмертный и Василиса Премудрая (Источник).
Предположим, вместо Ивана-царевича бороться с Кощеем был брошен Иван-дурак. Давайте поможем Василисе Премудрой составить такой алгоритм, чтобы даже Иван-дурак смог убить Кощея.
- Конечно же, сначала необходимо разыскать остров Буян (на такие вещи, будем считать, Иван-дурак способен).
- Поскольку сундук закопан под самым большим дубом, то сначала необходимо найти самый большой дуб на острове.
- Затем нужно выкопать сам сундук.
- Прежде чем доставать зайца, необходимо сломать крепкий замок.
- Теперь уже можно достать зайца.
- Из зайца нужно достать утку.
- Из утки достать яйцо.
- Разбить яйцо и достать иголку.
- Иголку поломать.
Это тоже линейный алгоритм, хотя и более длинный, чем алгоритм запуска программы Paint.
Его блок-схема выглядит так:
Рис. 7. Блок-схема.
На распутье…
И снова обратимся к сказочным персонажам в поисках примеров различных алгоритмов. Когда речь идёт об алгоритмах с ветвлениями, то, конечно, нельзя не вспомнить о богатыре, стоящем на распутье возле камня.
Рис. 8. Богатырь на распутье (Источник).
На камне написано:
«Направо пойдёшь – коня потеряешь, себя спасёшь; налево пойдёшь – себя потеряешь, коня спасёшь; прямо пойдёшь – и себя и коня потеряешь».
Попробуем составить алгоритм действий, который составил автор надписи на камне для путников?
- Если мы пойдём направо, то потеряем коня. Если же мы не пойдём направо, то у нас остаётся два варианта (мы считаем, что назад возвращаться путник не будет): пойти прямо и налево.
- В случае, если мы пойдём налево, то потеряем себя, а коня спасём.
- Если же мы пойдём прямо, то потеряем и себя, и коня.
Блок-схема этого алгоритма выглядит так:
Рис. 9. Блок-схема.
Репка
Русские народные сказки не оставили нас и без циклического алгоритма. И, как ни странно, спрятался он в одной из самых незамысловатых сказок – «Репке».
Рис. 10. Репка.
Вспомним сюжет сказки: дед тянет-потянет – вытянуть не может. Затем на помощь к деду по очереди подходят новые персонажи – и так до тех пор, пока не приходит мышка.
Попытаемся составить алгоритм действий всех персонажей сказки для того, чтобы они всё-таки смогли вытянуть Репку.
- Изначально к Репке подошёл дед и попытался вытянуть.
- Поскольку вытянуть Репку не получилось, то понадобилась помощь следующего персонажа.
- И так происходит до тех пор, пока не появилась мышка (или, другими словами, до тех пор, пока Репку не вытащили).
В виде блок-схемы этот алгоритм выглядит следующим образом:
Рис. 11. Блок-схема.
Список рекомендованной литературы
- Босова Л.Л. Информатика и ИКТ: Учебник для 6 класса. – М.: БИНОМ. Лаборатория знаний, 2012
- Босова Л.Л. Информатика: Рабочая тетрадь для 6 класса. – М.: БИНОМ. Лаборатория знаний, 2010.
- Босова Л.Л., Босова А.Ю. Уроки информатики в 5-6 классах: Методическое пособие. – М.: БИНОМ. Лаборатория знаний, 2010.
Рекомендованные ссылки на ресурсы интернет
- Интернет портал «Сообщество взаимопомощи учителей» (Источник).
- Интернет портал «Nsportal.ru» (Источник).
- Интернет портал «Фестиваль педагогических идей» (Источник).
Рекомендованное домашнее задание
- §3.3, 3.4 (Босова Л.Л. Информатика и ИКТ: Учебник для 6 класса);
- Постарайся самостоятельно составить линейный алгоритм из 5-6 фигур;
- Составь блок-схему циклического алгоритма выполнения домашнего задания;
Что это такое? Блок-схема алгоритма отображает в графическом виде последовательность операций и переходные фазы. Каждому действию соответствует определенная фигура (ромб, квадрат, овал и т. д.), поэтому располагать их нужно в правильном порядке.
Как составить? В любой блок-схеме существуют обязательные элементы: начало, конец, линии связи. Также необходима нумерация для понимания направления чтения. Остальные действия зависят от того, какой именно алгоритм нужно описать.
В статье рассказывается:
- Суть алгоритмов
- Что такое блок-схема алгоритма
- Составляющие блок-схемы алгоритма
- Правила составления блок-схемы
- Разделение блок-схемы
- Востребованность блок-схем
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Суть алгоритмов
Алгоритмом называют конечную последовательность конкретных действий, выполняя которые, исполнитель достигает определенной цели.
Итогом прохождения всех шагов должен быть изначально заданный результат (например, некие выходные данные). Для выполнения этого процесса по мере необходимости могут создаваться и использоваться промежуточные данные. Они выходными являться не будут и нужны исключительно для обеспечения всей работы.
Любой алгоритм нужно наделять определенными свойствами. Наиболее важную роль играют:
- Дискретность. Общая задача разделяется на отдельные, последовательно выполняемые шаги. Это, как правило, простейшие действия, порядок которых строго определен. Каждый шаг представляет собой инструкцию или команду, выполнение которой должно начинаться только тогда, когда выполнена предыдущая команда в этой последовательности.
- Конечность. Количество шагов должно быть конечным. Иными словами, результат необходимо получить по завершении строго определенного числа команд в алгоритме.
- Понятность. Все шаги необходимо формулировать так, чтобы исполнитель их полностью понимал. То есть алгоритм должен состоять только из команд, входящих в систему компетенций данного человека.
Скачать
файл
- Детерминированность. Каждую команду, а также порядок выполнения всех команд необходимо предварительно четко и однозначно определить. При этом на результат выполнения каждого шага не должна влиять никакая сторонняя информация. Необходимо выстроить команды так, чтобы конечная цель алгоритма обеспечивалась только формальным выполнением четких и последовательных инструкций. Исполнителю при этом не нужно вникать в смысл команд. Благодаря такому подходу итоговый результат будет всегда одинаковым и предсказуемым независимо от того, кто выполняет эту работу.
- Массовость. Один алгоритм призван решать сразу комплекс однотипных задач, определяемый заданным диапазоном входной информации.
Алгоритмы могут быть представлены в нескольких формах:
- Текстовая запись. Команды записываются обычным текстом на каком-либо языке. Порядок выполнения определяется нумерацией. Действия описываются произвольно и максимально конкретно.
Читайте также
- Блок–схема. Команды отображаются графически, в виде блок-схемы из геометрических фигур.
- Алгоритмические языки. Алгоритм строится с использованием специального искусственного языка, состоящего из определенной системы обозначений.
- Псевдокод. Обычный язык комбинируется с алгоритмическим. Последний берется за основу для описания базовых структур алгоритма.
Что такое блок-схема алгоритма
Как упоминалось выше, алгоритм может быть схематически представлен в виде блок-схемы. Этот вид графики также широко используется для представления любых процессов и систем в самых разных отраслях деятельности человека. С помощью блок-схемы выполняется документирование, изучение, планирование, совершенствование и объяснение сложных процессов путем превращения их в простые и логичные диаграммы.
Для описания конкретных действий используются геометрические фигуры: прямоугольники, ромбы, овалы и т. д. Последовательность шагов и направление процессов отображается соединительными стрелками.
Существует несколько видов блок-схем алгоритма, которые отличаются в числе прочего сложностью исполнения, начиная от простейших и нарисованных от руки эскизов, заканчивая сложными, спроектированными на компьютере диаграммами. Блок-схемы, учитывая многообразие всех вариаций, могут быть использованы в самых разных областях жизнедеятельности и, соответственно, по-разному называться.
Так, в зависимости от отрасли, встречаются схемы процессов, функциональные блок-схемы, модели и нотации бизнес-процессов, схемы технологических процессов. Все это имеет тесную связь с другими популярными разновидностями схем (например, с некоторыми диаграммами).
Составляющие блок-схемы алгоритма
Блок-схемы создаются из различных блоков, соединяемых между собой линиями со стрелками. Таким образом отображается поток управления. Далее разберем более подробно каждый тип блоков.
Терминал
Представляет собой овальную область, которой обозначают начало и конец выполнения программы. В любом алгоритме, изображенном в виде блок-схемы, присутствует как минимум два таких овала, которые ограничивают собой данный алгоритм.
Данные
Блок рисуется в виде параллелограмма, содержащего внутри входные или выходные данные. Обычно здесь размещают информацию, поступающую в алгоритм извне, и результат, который в итоге он выдает.
Процесс
Выглядит как прямоугольник, служит для записи основного программного кода. Процесс является ключевым элементом алгоритма, отражающим суть всей блок-схемы.
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ ресурсов об IT-сфере
Только лучшие телеграм-каналы, каналы Youtube, подкасты, форумы и многое другое для того, чтобы узнавать новое про IT
ТОП 50+ сервисов и приложений от Geekbrains
Безопасные и надежные программы для работы в наши дни
Уже скачали 21008
Решение
Данный блок рисуется в виде ромба и предназначен для управляющих и условных операторов какого-либо языка программирования (например, if или «больше» и «меньше»). Здесь всегда предлагается на выбор один из двух вариантов: «да» или «нет».
Поток
Обозначается в виде стрелки, представляя собой собственно поток какого либо процесса или алгоритма с указанием направления. Таким способом обеспечивается высокая читаемость программы.
Ссылка на странице
Выглядит как окружность с расположенными внутри символами. Такая ссылка дает понять, что блок-схема продолжает дальнейшие шаги алгоритма. Когда схема достаточно длинная, для экономии места внутри данной окружности в качестве ссылки размещают одну цифру. Этот же символ должен быть использован в продолжении схемы.
Правила составления блок-схемы
Чтобы составить блок-схему алгоритма грамотно, необходимо следовать приведенным ниже принципам.
- Начало и конец схемы обязательно ограничиваются соответствующими блоками в одном экземпляре.
- Начальный блок должен быть соединен с конечным линиями связи.
- Линии потока необходимо рисовать из всех блоков, кроме конечного.
- Все блоки нумеруются по порядку слева направо и сверху вниз. Номера ставятся в верхнем левом углу с разрывом начертания.
- Между всеми блоками обеспечивается взаимная связь через линии, определяющие последовательность выполнения команд. Движение потока в обратном порядке от принятого по умолчанию обязательно обозначается стрелками.
- Используемые в схеме линии могут быть входящими или выходящими. Это разделение относительное. Для одного линия, выходящая из одного блока, для другого уже будет являться входящей.
- Начальный блок имеет лишь выходящие линии потока. Соответственно, в конечный блок линии могут только входить.
- Поскольку движение потока идет сверху вниз, входящие линии принято изображать сверху от блока, а выходящие — снизу. Это в целом упрощает чтение блок-схемы.
- Линии потока могут обрываться. При этом места разрывов необходимо помечать специальными соединительными элементами.
- Чтобы блок-схема легче читалась, допускается описательную часть выносить в комментарии.
Разделение блок-схемы
Построение блок-схемы зачастую связано с определенными трудностями, среди которых:
- слишком малое место для размещения на одной странице;
- сложности в связывании всех элементов непосредственно друг с другом.
Устранить эти проблемы можно путем разбивки всей блок-схемы алгоритма программы на несколько фрагментов и последующего соединения этих фрагментов специальными соединительными элементами.
Используемые при этом соединители подписываются уникальными номерами, состоящими из двух частей. Это нужно для определения соответствия соединительных линий друг другу. Принадлежность частей уникального номера соединительному элементу обеспечивается записью данного номера на каждом фрагменте блок-схемы. Общие правила разделения приведем ниже.
Только до 1.06
Скачай подборку тестов, чтобы определить свои самые конкурентные скиллы
Список документов:
Тест на определение компетенций
Чек-лист «Как избежать обмана при трудоустройстве»
Инструкция по выходу из выгорания
Чтобы получить файл, укажите e-mail:
Подтвердите, что вы не робот,
указав номер телефона:
Уже скачали 7503
- Места разрыва схемы обозначаются соединительным блоком. Каждое такое соединение маркируется уникальным номером.
- Использоваться должны только машинно-независимые элементы.
- Представление в блок-схеме каждого шага не является обязательным. Важно отобразить только ключевые этапы выполнения программы.
- Переменные и блоки желательно именовать наглядными и запоминаемыми словами.
И самое главное условие — сформированный алгоритм должен быть понятен любому программисту.
Востребованность блок-схем
В небольших компаниях для построения алгоритмов обычно применяют лаконичную словесную форму (псевдокод). Блок-схемы же вероятнее всего встречаются на государственных предприятиях, где действуют требования по оформлению документации ЕСПД. Однако даже при регистрации программного обеспечения в Госреестре можно обойтись без этих схем.
И все же современные учебные программы в школах и вузах учитывают умение рисовать данного вида графику. Вопросы, посвященные блок-схемам, встречаются на выпускных и государственных экзаменах. Студенты перед дипломной защитой также должны проверять свою работу на соответствие стандартам построения схем.
Программное обеспечение сегодня почти не разрабатывается по устаревшей каскадной модели, так как при этом часто на этапах проектирования возникают ошибки. Но когда разработка по такой модели все же ведется, применяются именно блок-схемы записи алгоритма.
Читайте также
Во всем мире наблюдается значительное отставание образовательной системы от технического прогресса. Отечественный устаревший стандарт ГОСТ 19.701-90 в целом схож с международным ISO 5807:1985. Более актуальные модификации до сих пор не разработаны. За рубежом все еще продолжают создавать специализированное программное обеспечение для проектирования блок-схем (Dia, MS Visio, yEd).
Есть немногочисленные примеры применения более совершенных диаграмм деятельности UML, хотя эти диаграммы показывают свою эффективность лишь при описании параллельных алгоритмов.
В среде разработчиков порой возникает мнение о бесполезности блок-схем и даже UML. Некоторые убеждены в том, что и документация для разработки тоже не требуется. Впрочем, об этом чаще говорят сторонники так называемого экстремального программирования.
Для определенных задач разработки использование блок-схем все же требуется. В частности, это необходимо, когда программы создаются в визуальных средах программирования (например, ДРАКОН). Также с помощью блок-схем верифицируются алгоритмы. То есть, в соответствии с методом индуктивных утверждений Флойда формально доказывается их корректность.
Пока что можно сделать вывод, что единого мнения касательно необходимости блок-схем нет. Безусловно, в некоторых областях деятельности без них пока не обойтись в отсутствие альтернативы. Формальная верификация требует создавать блок-схемы выполнения алгоритма, хотя для непосредственного проектирования и документирования это уже не нужно.
Здесь стоит прислушаться к утверждению «программистов-экстремалов» о том, что имеет смысл рисовать лишь те схемы, которые действительно полезны в работе и при этом не требуют слишком больших усилий для рисования и актуализации.
Конструирование алгоритмов
Последовательное построение алгоритма
Существуют различные методы конструирования
(разработки, построения) алгоритмов. Мы познакомимся с одним из них — методом последовательного построения (уточнения) алгоритма. Иначе он называется методом разработки «сверху вниз», нисходящим
методом или методом пошаговой детализации.
Процесс последовательного построения алгоритма
выглядит следующим образом.
На первом шаге мы считаем, что перед нами
совершенный исполнитель, который «всё знает и всё умеет». Поэтому достаточно определить исходные данные и результаты алгоритма, а сам алгоритм представить в виде единого предписания — постановки
задачи (рис. 2.4).
Рис. 2.4.
Линейный алгоритм, являющийся результатом первого этапа детализации задачи
Если исполнитель не обучен исполнять заданное
предписание, то необходимо представить это предписание в виде совокупности более простых предписаний (команд).
Для этого:
• задачу разбивают на несколько частей, каждая из
которых проще всей задачи;
• решение каждой части задачи формулируют в
отдельной команде, которая также может выходить за рамки системы команд исполнителя;
• при наличии в алгоритме предписаний, выходящих за
пределы возможностей исполнителя, такие предписания вновь представляются в виде совокупности ещё более простых предписаний.
Процесс продолжается до тех пор, пока все
предписания не будут понятны исполнителю.
Объединяя полученные предписания в единую
совокупность выполняемых в определённой последовательности команд, получаем требуемый алгоритм решения исходной задачи.
Разработка алгоритма методом последовательного
уточнения для исполнителя Робот
Вы уже знакомы с исполнителем Робот. Он действует на
клетчатом поле, между клетками которого могут быть стены.
Система команд исполнителя
Робот:
В одном условии можно использовать несколько команд,
применяя логические операции И, ИЛИ, НЕ.
Известно, что Робот находится где-то в
горизонтальном коридоре. Ни одна из клеток коридора не закрашена.
Составим алгоритм, под управлением которого Робот
закрасит все клетки этого коридора и вернётся в исходное положение.
Представим план действий Робота следующими
укрупнёнными шагами (модулями):
Детализируем каждый из пяти модулей.
1. Чтобы закрасить все клетки коридора, находящиеся
левее Робота, прикажем Роботу шагнуть влево и выполнить цикл — ПОКА:
влево
нц пока сверху стена и снизу стена закрасить; влево
кц
Под управлением этого алгоритма Робот закрасит все
клетки коридора, находящиеся левее от него, и окажется в клетке левее коридора.
2. Командой вправо вернём Робота в коридор. Наша
задача — вернуть Робота в исходную клетку. Эта клетка — первая незакрашенная клетка, находящаяся правее Робота. Поэтому пока занимаемая Роботом клетка оказывается закрашенной, будем перемещать
его вправо.
вправо
нц пока клетка закрашена вправо
кц
Под управлением этого алгоритма Робот окажется в
исходной клетке.
3. Выполнив команду вправо, Робот пройдёт исходную
клетку и займёт клетку правее исходной. Теперь можно закрашивать клетки коридора, расположенные правее исходной.
вправо
нц пока сверху стена и снизу стена закрасить; вправо
кц
4. Так как, выполнив предыдущий алгоритм, Робот
оказался правее коридора, командой влево вернём его в коридор. Возвращение в исходную клетку обеспечивается алгоритмом:
влево
нц пока клетка закрашена влево
кц
5. По команде закрасить Робот закрашивает исходную
клетку. Полностью программа управления Роботом выглядит так:
Вспомогательные алгоритмы
При построении новых алгоритмов нередко возникают
ситуации, когда в разных местах алгоритма необходимо выполнение одной и той же последовательности шагов обработки данных. Для такой последовательности шагов создают отдельный алгоритм, называемый
вспомогательным. В качестве вспомогательных могут использоваться алгоритмы, ранее разработанные для решения других задач.
Вспомогательный алгоритм — алгоритм, целиком
используемый в составе другого алгоритма.
Пример 1. В среде КуМир составим алгоритм для исполнителя Робот, под
управлением которого он нарисует узор:
Начальное положение Робота отмечено звёздочкой. В
алгоритме использован вспомогательный алгоритм фигура.
При представлении алгоритмов с помощью блок-схем для
обозначения команды вызова вспомогательного алгоритма используется блок «предопределённый процесс» (рис. 2.5), внутри которого записывается название (имя) вспомогательного алгоритма, после
которого в скобках перечисляются параметры — входные данные и результаты.
Рис. 2.5. Блок «предопределённый
процесс»
Вспомогательный алгоритм делает структуру алгоритма
более понятной.
Пример 2. Вспомним алгоритм вычисления степени с натуральным показателем
у = аn. Соответствующая блок-схема:
Степень с целым показателем у = ах, где х
— целое число, а ≠ 0 вычисляется так:
В приведённой записи дважды фигурирует вычисление
степени с натуральным показателем. Поэтому в алгоритм вычисления степени с целым показателем можно включить вызов вспомогательного алгоритма вычисления степени с натуральным показателем.
Соответствующая блок-схема:
Алгоритм, представленный на блок-схеме, является
основным по отношению к вызываемому в нём вспомогательному алгоритму.
Параметрами используемого вспомогательного алгоритма
являются величины а, n, у. Это формальные параметры, они используются при описании алгоритма. При конкретном обращении к вспомогательному алгоритму формальные параметры заменяются фактическими
параметрами, т. е. именно теми величинами, для которых будет исполнен вспомогательный алгоритм. Типы, количество и порядок следования формальных и фактических параметров должны совпадать.
Команда вызова вспомогательного алгоритма
исполняется следующим образом (рис. 2.6):
1) формальные входные данные вспомогательного алгоритма заменяются
значениями фактических входных данных, указанных в команде вызова вспомогательного алгоритма;
2) для заданных входных данных исполняются команды вспомогательного
алгоритма;
3) полученные результаты присваиваются переменным с именами
фактических результатов;
4) осуществляется переход к следующей команде основного
алгоритма.
Рис. 2.6. Схема выполнения команды вызова
вспомогательного алгоритма
Алгоритм, в котором прямо или косвенно содержится
ссылка на него же как на вспомогательный алгоритм, называют рекурсивным.
Рассмотрим несколько примеров рекурсивных
алгоритмов.
Пример 3. Алгоритм вычисления степени с натуральным показателем п для
любого вещественного числа а можно представить в виде рекурсивного:
Число а в степени n (n-я степень числа а) есть не
что иное, как произведение аn-1 • а; в свою очередь, аn-1 = аn-2 • а и т. д.
Пример 4. Рекурсивный алгоритм положен в основу эффективного решения
головоломки «Ханойская башня».
Интерактивная игра «Ханойские башни» (195747)
поможет вам вспомнить условие и алгоритм решения головоломки (http://sc.edu.ru/).
Пример 5. Рассмотрим алгоритм построения геометрической фигуры, которая
называется снежинкой Коха. Шаг процедуры построения состоит в замене средней трети каждого из имеющихся отрезков двумя новыми такой же длины, как показано на рисунке:
С каждым шагом фигура становится всё причудливее.
Граница снежинки Коха — положение кривой после выполнения бесконечного числа шагов.
Попробуйте подсчитать, сколько рёбер в границе
снежинки Коха после четвёртого шага; после пятого шага.
Предыдущие статьи: “Руководство по структурам данных и алгоритмам: введение и настройка среды”
Алгоритм — это пошаговая процедура, которая определяет набор выполняемых в том или ином порядке инструкций для получения желаемого результата. Алгоритмы обычно создаются независимо от базовых языков программирования, т. е. с возможностью реализации на нескольких языках.
С точки зрения структур данных, важны следующие категории алгоритмов:
- Алгоритм поиска элемента в структуре данных.
- Алгоритм сортировки элементов в определенном порядке.
- Алгоритм вставки элемента в структуру данных.
- Алгоритм изменения имеющегося в структуре данных элемента.
- Алгоритм удаления элемента из структуры данных.
Характеристики алгоритма
Не все процедуры можно назвать алгоритмом. Алгоритм должен обладать следующими характеристиками:
- Однозначность. Алгоритм должен быть четким и однозначным. Каждый из его шагов, а также данные в вводе/выводе должны быть четкими и приводить только к одному значению.
- Входные данные. В алгоритме должны быть четко определенные входные данные, но входные данные могут и отсутствовать.
- Выходные данные. Алгоритм должен иметь четко определенные выходные данные и соответствовать желаемому результату.
- Конечность. Алгоритмы должны завершаться после конечного числа шагов.
- Осуществимость. Должен быть осуществим при имеющихся ресурсах.
- Независимость. Алгоритм должен иметь пошаговые инструкции, независимые от любого программного кода.
Как написать алгоритм?
Это, скорее, зависит от задачи и ресурсов. Четко определенных стандартов написания алгоритмов не существует. Алгоритмы никогда не пишут для поддержки того или иного программного кода.
Как известно, у всех языков программирования общие базовые конструкции кода, например циклы (do, for, while), управление потоком (if-else) и т. д. Эти общие конструкции могут быть использованы для написания алгоритма.
Алгоритмы обычно пишут пошагово, но не всегда. Написание алгоритма — это процесс, который выполняется после четкого определения проблемной области. То есть надо знать проблемную область, для которой разрабатывается решение.
Пример
Попробуем научиться писать алгоритмы на примере.
Задача: разработать алгоритм сложения двух чисел и отображения результата:
Шаг 1 − НАЧАЛО ADD
Шаг 2 − объявляем три целых числа a, b и c
Шаг 3 − определяем значения a и b
Шаг 4 − добавляем значения a и b
Шаг 5 − сохраняем результат шага 4 в c
Шаг 6 − печатаем c
Шаг 7 − КОНЕЦ ADD
Алгоритмы сообщают программистам, как писать код программы. Алгоритм может быть написан и в таком виде:
Шаг 1 − НАЧАЛО ADD
Шаг 2 − получаем значения a и b
Шаг 3 − c ← a + b
Шаг 4 − отображение c
Шаг 5 − КОНЕЦ ADD
При разработке и анализе алгоритмов второй метод используется обычно для описания алгоритма. Это позволяет упростить его анализ, игнорируя все нежелательные определения. Аналитик может наблюдать, какие операции используются и как протекает процесс.
Писать номера шагов необязательно.
Алгоритм разрабатывается для получения решения задачи. А у задачи может быть несколько решений:
Поэтому для задачи могут быть разработаны алгоритмы с множеством решений. Следующий этап — анализ этих предложенных алгоритмов и реализация наиболее подходящего решения.
Анализ алгоритмов
Эффективность алгоритма можно проанализировать на двух разных этапах — до и после реализации. Вот эти этапы:
- Априорный анализ — это теоретический анализ алгоритма. Эффективность алгоритма измеряется при условии, что все остальные факторы, например скорость процессора, постоянны и не влияют на реализацию.
- Апостериорный анализ — это эмпирический анализ алгоритма. Выбранный алгоритм реализуется с использованием языка программирования, а затем выполняется на целевом компьютере. При проведении этого анализа собираются фактические статистические данные, такие как время выполнения и требующееся пространство.
Изучим априорный анализ алгоритмов. При анализе алгоритмов учитывается время выполнения или длительность различных задействованных операций. Время выполнения операции может быть определено как количество команд, выполняемых компьютером за одну операцию.
Сложность алгоритма
Пусть X — это алгоритм, n — размер входных данных, а используемые в алгоритме X время и пространство — это два основных фактора, которые определяют его эффективность.
- Фактор времени. Время измеряется путем подсчета количества ключевых операций, например сравнений в алгоритме сортировки.
- Фактор пространства. Пространство измеряется путем подсчета максимального объема памяти, требующегося алгоритму.
Сложностью алгоритма f(n) определяется время выполнения и/или дисковое пространство, требующиеся алгоритму, где n — это размер входных данных.
Пространственная сложность
Пространственная сложность алгоритма представляет собой объем памяти, требующийся алгоритму в течение его жизненного цикла. Этот объем состоит из двух частей:
- Фиксированная часть, то есть пространство, необходимое для хранения определенных данных и переменных, не зависящих от размера задачи. Например, используемые простые переменные и константы, размер программы и т. д.
- Изменяемая часть, то есть пространство, необходимое переменным, зависящим от размера задачи. Например, динамическое выделение памяти, пространство стека рекурсии и т. д.
Пространственная сложность S(P) любого алгоритма P определяется как S(P) = C + SP(I), где C — это фиксированная , а SP(I) — это изменяемая часть алгоритма, зависящая от характеристики экземпляра I. Вот простой пример, объясняющий эту концепцию:
Алгоритм: SUM(A, B)
Шаг 1 - НАЧАЛО
Шаг 2 - C ← A + B + 10
Шаг 3 - Конец
Здесь есть три переменные A, B, и C и одна константа. Поэтому пространственная сложность S(P) = 1 + 3. Пространство зависит от типов данных заданных переменных и типов констант и будет в соответствии с этим увеличиваться.
Временная сложность
Временная сложность алгоритма представляет собой количество времени, требующееся для его выполнения до завершения. Она может быть определена в виде численной функции T(n), где T(n) может измеряться количеством шагов при условии, что на каждый шаг расходуется постоянное время.
Например, сложение двух n-битных целых чисел проходит в n шагов. Значит, общее вычислительное время составит T(n) = c ∗ n, где c — это время, необходимое для сложения двух битов. Здесь имеет место линейный рост T(n) по мере увеличения размера входных данных.
Читайте также:
- Как алгоритм «случайный лес» вычисляет продавцов-мошенников на онлайн-рынке
- 6 техник, которые помогут вам учиться лучше
- Почему люди подсаживаются на TikTok? Алгоритм ИИ, который вас подловил
Читайте нас в Telegram, VK и Яндекс.Дзен
Download Article
Download Article
An algorithm is a set of steps designed to solve a problem or accomplish a task. Algorithms are usually written in pseudocode, or a combination of your speaking language and one or more programming languages, in advance of writing a program. This wikiHow teaches you how to piece together an algorithm that gets you started on your application.
Steps
-
1
Determine the outcome of your code. What is the specific problem you want to solve or the task you want it to accomplish? Once you have a solid idea of what you’re aiming to accomplish, you can determine the steps it will take to get there.
-
2
Decide on a starting point. Finding your starting and ending point are crucial to listing the steps of the process. To determine a starting point, determine the answers to these questions:[1]
- What data/inputs are available?
- Where is that data located?
- What formulas are applicable to the issue at hand?
- What are the rules to working with the available data?
- How do the data values relate to each other?
Advertisement
-
3
Find the ending point of the algorithm. As with the starting point, you can find the end point of your algorithm by focusing on these questions:
- What facts will we learn from the process?
- What changes from the start to the end?
- What will be added or no longer exist?
-
4
List the steps from start to finish. Start with broad steps. To use a real-world example, let’s say your goal is to have lasagna for dinner. You’ve determined that the starting point is to find a recipe, and that the end result is that you’ll have a lasagna fully cooked and ready to eat by 7 PM. Your steps may look something like this:
- Search for a recipe online.
- Look for the ingredients you already have in the kitchen.
- Make a list of ingredients you’ll need from the store.
- Buy the missing ingredients.
- Return home.
- Prepare the lasagna.
- Remove the lasagna from the oven.
-
5
Determine how you will accomplish each step. Now that you have a step-by-step outline, it’s time to think about how you might code each step. Which language will you use? What resources are available? What’s the most efficient way to accomplish each step in that language? Incorporate some of that code into your algorithm. Expand each step until you’ve detailed the entire process.
- For example, the first step in our lasagna algorithm is Search for a recipe online. But what is involved in this search? Be specific. For example:
- Turn on your computer.
- Check to make sure you’re connected to the internet. Connect to the internet if you aren’t already.
- Open a web browser.
- Enter your search terms.
- Click a recipe link.
- Determine whether the recipe meets your needs.
- Filter out recipes that aren’t vegetarian.
- Make sure the recipe makes at least 5 servings.
- Repeat some of these steps until you find the right recipe.
- Turn on your computer.
- Consider the resources at your disposal, such as the capabilities of the system you’re developing a program for. In the case of lasagna, we assume the person making the lasagna knows how to search the internet, operate an oven, etc.
- For example, the first step in our lasagna algorithm is Search for a recipe online. But what is involved in this search? Be specific. For example:
-
6
Review the algorithm. Now that you’ve written your algorithm, it’s time to evaluate the process. Your algorithm is designed to accomplish something specific, and you’ll need it to start writing your program. Ask yourself the following questions, and address each as necessary:[2]
- Does the algorithm solve the problem/accomplish the task?
- Does it have clearly defined inputs and outputs?
- Should the end goal be redefined to be more general? More specific?
- Can any of the steps be simplified?
- Is the algorithm guaranteed to end with the correct result?
Advertisement
Add New Question
-
Question
How do I write an algorithm that 7 is greater than 5?
nicholasz2510 Gaming, Travel, and Music
Community Answer
The syntax can vary over different languages, but to write the conditional 7 is greater than 5 would most likely by simply be this: 7 > 5.
-
Question
How do I make an algorithm of the sum of two numbers?
Adam Blalock
Community Answer
To add two numbers in a programming language, you just use a «+» between them. In Python (a programming language), it would look like: x = 10, y = 13; print x + y.
-
Question
Is there any way to understand this easier? I’m 15 and still trying to understand the concepts.
I just started programming and my college professors are very vague and make understanding the concepts pretty hard. Your best bet is to keep looking up the terms on Google, that’s what I’ve been doing, and it works to a degree.
See more answers
Ask a Question
200 characters left
Include your email address to get a message when this question is answered.
Submit
Advertisement
-
Check out existing algorithms for ideas on writing your own.
-
Use fast calculating iterations.
-
Focus on efficiency when coding.
Show More Tips
Thanks for submitting a tip for review!
Advertisement
About This Article
Article SummaryX
1. Determine the problem or task to accomplish.
2. Decide the starting point.
3. Figure out the endpoint.
4. List the steps that occur between the start and finish.
5. Break down the steps as necessary.
6. Review the algorithm and change where necessary.
Did this summary help you?
Thanks to all authors for creating a page that has been read 439,394 times.