Алгоритм и его свойства

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

Содержание

Алгоритм и его свойства

Перед тем как разобраться со свойствами, давайте разберем, что же такое алгоритм.

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

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

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

  • Подойти к началу пешеходной разметки («зебре»).
  • Посмотреть на светофор.
  • Если горит красный свет, то дождаться, когда загорится желтый.
  • Посмотреть по сторонам и убедиться, что транспорт замедлил свой ход.
  • Когда загорится зеленый свет, начать переходить дорогу.
Алгоритм перехода улицу

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

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

Дискретность

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

Поступая в 1 класс мы включаемся в алгоритм обучения. И пошагово, каждый год, переходим из класса в класс. Так продолжается до тех пор, пока мы не закончим обучение и не получим документ об образовании. Можно ли здесь обойтись без дискретности? Скорее всего нет. Ведь обучение идет последовательно, от простого к сложному, шаг за шагом. И от скорости восприятия человеком знаний зависит время его обучения.

Вы заболели, вызвали врача, а он, осмотрев вас, выписал множество лекарств. Каждое лекарство надо пить по определенной схеме. И чтобы ни запутаться, ни пропустить прием того или иного лекарства, составляется план (график) приема лекарств: утром, в обед и вечером, до или после еды. Этот план и будет дискретным, пошаговым алгоритмом лечения.

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

Часто бывает так, что задача кажется совершенно невыполнимой. Например, вы купили землю под дачу, а, когда приехали посмотреть, то оказалось, что это просто огороженная часть леса. Тут не только строить дом, но и что-то посадить типа огурчиков или морковки проблематично. Однако, потихоньку, шаг за шагом, вы очистили участок, разбили грядки и уже через пару лет участок не узнать: строится домик, растут цветы, есть огород. Вы действовали пошагово или дискретно. И у вас все получилось.

Алгоритм работы в команде

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

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

Понятность

Понятность достаточно просто трактовать: команды, которые выполняет исполнитель должны быть понятны и доступы последнему. Пешеход понимает, как пройти на противоположную сторону используя «зебру», но, если поставить перед ним задачу, скажем, пройти этот же маршрут по воздуху, исполнитель (пешеход), вряд ли выполнит это требование. Как пройти по воздуху? Что для этого нужно? Возможно ли это вообще? Данные вопросы оставленные без ответов приведут к тому, что человек не выполнит требование, т.к. не было соблюдено одно из свойств алгоритма – понятность. Но, если через этот переход построен виадук, то выполнить данные требования несложно.

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

  • Первый. «Идите прямо. Как дойдете до перекрестка, то не надо сворачивать ни направо ни налево. Надо еще пройти прямо. Когда увидите красный дом, то проходите мимо, не надо сворачивать на улицу, которая будет около этого дома. Дальше увидите большой магазин, не доходя до магазина поверните налево. Потом надо идти прямо, Дорога повернет направо, но вы не поворачивайте, а перейдите дорогу и идите в парк на другой стороне улицы, никуда не сворачивая. Когда пройдете весь парк и он закончится, то увидите нужное место».
Алгоритм понятность
  • Второй. «Идите прямо. Пройдите 2 перекрестка и поверните налево. Дальше прямо до парка. Пройдете парк и окажитесь в нужном месте»
Схема

Описание маршрута «как пройти…» и есть алгоритм. И от его понятности будет зависеть, найдете вы нужное место или нет. Нет сомнений, что тот путешественник, получивший объяснения по второму примеру, найдет быстрее нужное место, чем тот, которому объясняли по первому. Более того, этому путешественнику, скорее всего, придется уточнять свой маршрут, чтобы не заблудиться.

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

Алгортим языка

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

Определенность

Определенность проявляется в чёткости и точности поставленных команд. Опять обращусь к примеру с «зеброй»: не достаточно просто указать во втором пункте «посмотреть и дождаться зеленый свет». Нужны уточнения, четкость, я бы даже сказал определенность. «Посмотреть (куда?) на светофор», «когда загорится зеленый свет (что делаем?), переходим дорогу».

Частенько из-за нарушения данного свойства особенно при приготовлении того или иного блюда по рецепту, получается не то, что ожидалось.

Алгоритм точности
Категории яиц

Например, в рецепте указано «взять 2 яйца». Яйца могут быть совершенно разные — от 40 г до 120 г и более. Понятно, что, если в рецепте речь шла о яйцах по 50 г, то вместо 2-х по рецепту надо брать только 1 большое. Поэтому во многих рецептах указывается вес яйца: «взять 2 яйца по 65 г».

Сказанное выше относится и к мере «чайная ложка». По умолчанию предполагается, что мера «чайная ложка» (ч.л.) — это 5 мл, но ведь это знают не все хозяйки! Разновидностей чайных, как и столовых ложек достаточно много и они все совершенно разные по размеру.

Чайные ложки
Чайные ложки

А меры типа «на кончике ножа», «щепоточка», «по вкусу» — вообще не имеют данного свойства! У многих рецептов, к сожалению, отсутствует определенность, хотя остальные свойства вроде бы как имеются, но этого недостаточно. Именно поэтому «Кулинарную книгу» в качестве сборника алгоритмов рассматривать не стоит.

Результативность

Как не трудно догадаться, свойство результативности — это выполнение последовательности действий, которые обязательно должны привести к какому-то результату.

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

К слову сказать, что отсутствие результата это тоже результат.

Алгоритм результативности
Результат

«Когда в товарищах согласья нет, на лад их дело не пойдет. А выйдет из него не дело, а только мука!» Кто из нас не учил басню Крылова — «Лебедь, рак и щука»? Но к сожалению, большинство не могут признать, что сами поступают именно так, как герои данной басни! Например, многие родители, пытаясь «воспитать» совего сына, сами между собой не могут договориться, а потом удивляются: «откуда у их сына ЭТО появилось».

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

Отсутствие результата

Массовость

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

Алгоритм массовости

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

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

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

От задачи к алгоритму

Алгоритм слона

Однажды на курсах программирования перед слушателями был поставлен вопрос: «Можно ли съесть слона?» Очень необычное задание, которое на первый взгляд кажется бессмысленным и невыполнимым. Поэтому большинство слушателей ответили, что это невозможно. Однако, задача имеет простое решение.

Конечно, если вдуматься, то съесть целого слона сразу невозможно. Он для этого слишком большой! Но, если данную задачу разделить на мелкие подзадачи, которые постепенно будут выполнены, то ничего сложного не будет. Решение задачки может выглядеть следующим образом:

  • Убивваем слона
  • Делим слона на части
  • Сохраняем мясо в морозильной камере
  • Ежедневно готовим что-то из мяса слона.
  • Едим приготовленное каждый день

Несомненно, слон очень большой и процесс займет долгий период, но в конце концов задача будет решена – слон будет съеден. Эта задача и ее решение в программировании стали настолько популярными, что получили название «метод слона»

Как использовать этот метод? Заменим слово «слон» на «сайт», а «съесть» на «создать». В итоге получиться следующее: «Как создать сайт?». Не такое необычное задание как первое, но в то же время, не менее трудное.

Как же задача «съесть слона» поможет в программировании? Как вы уже догадались, создать сайт, как и съесть слона, мы сможем с помощью алгоритма. Разбиваем большую задачу на последовательность мелких и шаг за шагом выполняем их поочередно. Детали и конкретные методики придут с обучением, но основной скелет работы программиста будет усвоен сразу.

Заключение (коротко подводим итоги)

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

Похожие статьи
Top
Прокрутить вверх
Пролистать наверх