5.3.2. Анализ результатов работы алгоритма с реалъншли изображениями

Анализ алгоритмов для начинающих: вводное руководство

5.3.2. Анализ результатов работы алгоритма с реалъншли изображениями

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

Вы никогда не задумывались, для чего нужна теоретическая computer science, и какое отношение она имеет к реальному программированию? Кажется, что если вас не очень интересует сфера математического анализа, то TCS может понадобиться только для ответа на вопросы о сложности алгоритмов на собеседованиях. Должно же быть нечто большее!

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

Вспомните фильм Каратэ-пацан с Джеки Чаном и Джейден Смит. Джеки заставляет Дре снова и снова надевать и снимать куртку. Смысл этого действия не в одежде, а в приобретении необходимых для кунг-фу навыков.

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

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

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

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

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

КупитьКнигу (названиеКниги) { Открыть Amazon Искать книгу по названию Если товар в наличии, добавить его в корзину Оформить заказ С нетерпением ждать отправки } Купить Книгу («В тихом омуте»)

Анализ алгоритмов и производительность

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

Мы сосредоточимся на производительности.

Прежде всего, подумайте, есть ли в программировании что-то более важное, чем производительность? Разумеется! Если сверхбыстрая программа выдает неверный результат, это плохая программа.

Еще есть такие понятия, как простота, удобство обслуживания, надежность, безопасность, функциональность и удобство для пользователя. Все они гораздо важнее производительности.

Вот например, Эван Шпигель решил перепроектировать Snapchat. Зачем? Snapchat уже работает отлично, как было задумано. Просто пользователи жаловались на определенную сложность работы с приложением, и Эван решил сделать его проще в использовании. Удобство явно перевешивает эффективность алгоритмов.

Очевидно, что производительность – это не самая важная вещь. Тогда почему мы о ней говорим?

Дело в том, что иногда удобство использования напрямую связано с производительностью.

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

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

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

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

Bubblesort( var a as array ) for i from 1 to N for j from 0 to N — i if a[j] > a[j + 1] swap( a[j], a[j + 1] ) end func

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

Давайте рассмотрим работу функции на реальном примере. Отправим на вход следующие данные: {6, 5, 3}. На выходе мы ожидаем получить {3, 5, 6}, то есть массив, отсортированный по возрастанию. Будем последовательно сравнивать числа и при необходимости менять их местами (swap).

Проход 1

• Сравниваем первый и второй элементы:

{**6, 5**, 3}

• 6 > 5, поэтому их следует поменять:

{5, 6, 3}

• Сравниваем второй и третий элементы:

{5, **6, 3**}

• 6 > 3, меняем их местами:

{5, 3, 6}

После первого прохода наш массив выглядит так:

{5, 3, 6}

Он все еще не отсортирован, алгоритм нужно повторить.

Проход 2

• Сравниваем первый и второй элементы:

{**5, 3**, 6}

• 5 > 3, меняем:

{3, 5, 6}

• Сравниваем второй и третий элементы:

{3, **5, 6**}

• 5 < 6, здесь все правильно.

{3, 5, 6}

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

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

Время работы

Время выполнения алгоритма напрямую зависит от входных данных:

• от их качества

Предположим, что исходный список {3, 5, 6}, переданный алгоритму пузырьковой сортировки, уже упорядочен.

В этом случае достаточно сделать один проход по нему, чтобы убедиться в правильности расположения элементов.

Но, что делать, если входной список {6, 5, 3} отсортирован в обратном порядке? Потребуется несколько раундов выполнения, чтобы получить желаемый результат, так как нужно заменить каждый элемент.

• от количества

Представьте себе сортировку списка, содержащего 6*10⁹ элементов. Вероятно, она будет выполняться чуть дольше, чем упорядочивание шести чисел.

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

Количество проходов

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

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

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

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

Асимптотический анализ алгоритмов

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

Но где именно мы должны запустить этот алгоритм? На чьем компьютере? А ведь если запустить его на суперкомпьютере, он будет работать очень-очень быстро!

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

Начинается самое интересное: асимптотический анализ алгоритмов!

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

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

Θ-нотация

Давайте взглянем на нотацию тета большое. Она следует простым двум правилам:

  • отбросить слагаемые низких порядков;
  • отбросить константы.

Что это значит, рассмотрим на примере:

3n³ + 40n² — 10n + 409

Первое правило гласит: отбросьте слагаемые низких порядков. Здесь самый высокий порядок n – это 3. Следовательно все остальное, включая свободный член 409, можно отбросить.

3n³

Второе правило требует отбросить константы. Убираем 3 и получаем в итоге:

Что читается как тета большое от n в кубе.

Это инженерный способ манипулирования тета-нотацией.

Функция n³, которую мы помещаем в Θ – это сложность нашего алгоритма.

Когда n приближается к бесконечности, алгоритм Θ(n²) всегда будет работать быстрее, чем Θ(n³). Неважно, какими были члены нижнего порядка или ведущие константы. Даже если вы запустите Θ(n²) на медленном компьютере, а Θ(n³) – на быстром, с ростом n первый будет все сильнее вырываться вперед.

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

Если alg1 превосходит alg2 для очень большого входящего n, очевидно, что он будет делать это и при малом n.

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

Нотация о большое работает с худшими случаями, а омега большое – с лучшими.

Перевод статьи Shilpa Jain: The Ultimate Beginners Guide To Analysis of Algorithm

Источник: https://proglib.io/p/analysis-of-algorithm/

Введение в курс «Анализ изображений и видео». Лекции от Яндекса

5.3.2. Анализ результатов работы алгоритма с реалъншли изображениями
Мы начинаем публиковать лекции Натальи Васильевой, старшего научного сотрудника HP Labs и руководителя HP Labs Russia.

Наталья Сергеевна читала курс, посвящённый анализу изображений, в петербургском Computer Science Center, который создан по совместной инициативе Школы анализа данных Яндекса, JetBrains и CS клуба

Всего в программе — девять лекций.

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

Начиная с 40-й минуты, лектор рассказывает об эксперименте Вебера, представлении и восприятии цвета, цветовой системе Манселла, цветовых пространствах и цифровых представлениях изображения. Полностью слайды лекции доступны по ссылке.

Изображения везде вокруг нас. Объёмы мультимедиа информации растут с каждой секундой. Снимаются фильмы, спортивные матчи, устанавливается аппаратура для видеонаблюдения. Мы сами каждый день снимаем большое количество фотографий и видео — такая возможность есть почти у каждого телефона. Чтобы все эти изображения приносили пользу, нужно уметь что-то с ними делать. Можно сложить их в ящик, но тогда непонятно, для чего их создавать. Необходимо уметь искать нужные картинки, что-то делать с видеоданными — решать задачи, специфичные для той или иной области. Наш курс называется «Анализ изображений и видео», но речь в основном будет идти об изображениях. Невозможно начать заниматься обработкой видео без знаний о том, что делать с картинкой. — это набор статических изображений. Конечно, есть задачи, специфичные для видео. Например, слежение за объектами или выделение каких-то ключевых кадров. Но в основе всех алгоритмов работы с видео лежат алгоритмы обработки и анализа изображений. Что же такое анализ изображений? Это во многом смежная и пересекающаяся с компьютерным зрением область. Точного и единственного определения у неё нет. Для примера приведем три. Computing properties of the 3D world from one or more digital images. Trucco and Veri В этом определении подразумевается, что вне зависимости от того, есть мы или нет, существует какой-то окружающий мир и его изображения, анализируя которые мы хотим что-то о нём понять. И это подходит не только для определения анализа цифровых изображений машиной, но и для их анализа нашей головой. У нас есть сенсор — глаза, у нас есть преобразующее устройство — мозг, и мы воспринимаем мир путем анализа тех картинок, которые видим. Make useful decision about real physical objects and scenes the sensed images. Shapiro Наверное, это больше относится к робототехнике. Мы хотим принимать решения и делать выводы о реальных объектах вокруг нас на основе изображений, которые уловили сенсоры. К примеру, это определение идеально подходит под описание того, что делает робот-пылесос. Он принимает решение о том, куда ему дальше ехать и какой угол пылесосить на основании того, что он видит. The construction of explicit, meaningful decisions of physical objects from images Наиболее общее определение из трех. Если опираться на него, мы хотим просто описывать явления и объекты вокруг нас на основе анализа изображений. Подытоживая, можно сказать, что в среднем анализ изображений сводится к извлечению значимой информации из изображений. Для каждой конкретной ситуации эта значимая информация может быть разной. Если мы посмотрим на фотографию, на которой маленькая девочка ест мороженое, то сможем описать её словами, — так мозг интерпретирует то, что мы видим. Приблизительно этому мы хотим научить машину. Чтобы описать изображение текстом, необходимо провести такие операции, как распознавание объектов и лиц, определение пола и возраста человека, выделение однородных по цвету областей, распознавание действия, выделение текстуры. В рамках курса мы будем говорить и об алгоритмах обработки изображений. Именно они используются, когда мы повышаем контрастность, удаляем цвет или шум, применяем фильтры и т.д… В принципе изменение картинок — это все, что делается в обработке изображений. Далее идут анализ изображений и компьютерное зрение. Точных определений для них нет, но, на мой взгляд, для них характерно то, что имея на входе изображение, на выходе мы получаем некую модель или некоторый набор признаков. То есть некоторые числовые параметры, которые описывают это изображение. Например, гистограмма распределения уровней серого цвета. В анализе изображений как результат мы получаем вектор признаков. Компьютерное зрение решает более широкие задачи. В частности строятся модели. К примеру, по набору двухмерных изображений можно построить трехмерную модель помещений. И есть еще одна смежная область — компьютерная графика, в которой генерируют изображение по модели. Все это невозможно без использования знаний и алгоритмов из еще целого ряда областей. Таких, как распознавание образов и машинное обучение. В принципе можно сказать, что анализ изображений — это частный случай анализа данных, область искусственного интеллекта. К смежной дисциплине можно отнести и нейропсихологию — для того чтобы понять, какие у нас есть возможности и как устроено восприятие картинок, хорошо бы понимать, как эти задачи решает наш мозг.
Существуют огромные архивы и коллекции изображений, и одной из самых главных задач является индексирование и поиск картинок. Коллекции бывают разные:

  • Персональные. Например, в отпуске человек может сделать пару тысяч фотографий, с которыми потом нужно что-то делать.
  • Профессиональные. Они насчитывают миллионы фотографий. Здесь тоже есть необходимость как-то их организовывать, искать, находить то, что требуется.
  • Коллекции репродукций. Это тоже миллионы изображений. Сейчас у большого количества музеев есть виртуальные версии, для которых оцифровываются репродукции, т.е. мы получаем изображения картин. Пока утопичная задача — поиск всех репродукций одного и того же автора. Человек по стилю может предположить, что видит, допустим, картины Сальвадора Дали. Было бы здорово, если бы этому научилась и машина.

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

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

, что в итоге нам дает большое количество нечетких дубликатов.

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

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

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

Сейчас совершенно потрясающие вещи происходят в медицине.

  • Выявление аномалий. Уже широко известная и решаемая проблема. К примеру, по рентгеновскому снимку пытаются понять, здоров пациент или нет — отличается ли этот снимок от снимка здорового человека. Это может быть как снимок всего тела, так и отдельно кровеносной системы, чтобы выделить из нее аномальные сосуды. В рамках этой задачи — поиск раковых клеток.
  • Диагностика заболеваний. Также делается на основе снимков. Если у вас есть база снимков пациентов и известно, что первая аномалия встречается у здоровых людей, а вторая означает, что человек болен раком, то, основываясь на подобии изображений, можно помочь врачам с диагностикой заболеваний.
  • Моделирование организма и предсказание последствий лечения. Сейчас это то, что называется, cutting edge. Хотя мы все и похожи, каждый организм устроен индивидуально. Наример, у нас может быть разное расположение или толщина кровеносных сосудов. Если человеку требуется соединить разорванный сосуд шунтом, то определить, где его ставить, можно, основываясь на экспертном мнении врача, а можно — смоделировав по снимку кровеносную систему и «вставив» шунт в этой модели. Так мы получим возможность увидеть, как изменится кровоток, и предсказать, как пациент будет себя чувствовать при разных вариантах.

Еще одна область применения – это системы безопасности. Кроме использования отпечатков пальцев и сетчатки глаза для авторизации, здесь есть и не решенные пока задачи. Например, **обнаружение «подозрительных» предметов**. Её сложность в том, что вы не можете заранее дать описание того, что является подозрительным предметом. Другая интересная задача — **выявление подозрительного поведения** человека в системах видеонаблюдения. Невозможно предоставить все возможные примеры аномального поведения, поэтому распознавание будет устроено на выявлении отклонений от того, что помечено как нормальное. Есть еще большое количество областей, где используется анализ изображений: военная промышленность, робототехника, кинопроизводство, создание компьютерных игр, автомобилестроение. В 2010 году одна итальянская компания оснастила камерами грузовик, который, используя карты и сигнал GPS, на автоматическом управлении проехал от Италии до Шанхая. Путь проходил и через Сибирь, не все дороги которой есть на картах. На этом отрезке карту ему передавал управляемый человеком автомобиль, который ехал перед ним. Грузовик же сам распознавал дорожные знаки, пешеходов и понимал, как ему можно перестраиваться.
Но почему мы до сих пор водим автомобили самостоятельно, и даже к системам видеонаблюдения должен быть приставлен человек? Одна из ключевых проблем — семантический разрыв. Человек, глядя на картинку, понимает её семантику. Компьютер же понимает цвет пикселей, умеет выделить текстуру и в конечном счете отличить кирпичную стену от ковра и распознать на фотографии человека, но определить, счастлив ли он, машина ещё может. Мы сами не всегда можем это понять. То есть автоматическое понимание того, скучают ли студенты на лекции, — это следующий уровень. Кроме того, наш мозг — это уникальная система понимания и обработки той картинки, которую мы видим. Он склонен видеть то, что мы хотим видеть, а как научить такому же компьютер — открытый вопрос. Мы очень хорошо умеем обобщать. По изображению мы способны догадаться, что видим лампу. Нам не нужно знать все модификации предмета из одного класса, чтобы отнести к нему образец. Компьютеру это сделать сложнее, потому что визуально разные лампы могут сильно отличаться. Есть еще ряд сложностей, с которыми анализ изображений еще не справился. Наш мозг часто «достраивает» картинку и добавляет семантику. Мы все можем увидеть «что-то» или «кого-то» в очертании облака. Зрительная система самообучается. Европейцу сложно различать лица азиатов, так как обычно в жизни он редко их встречает. Зрительная система научилась улавливать различия в европейских лицах, а азиаты, которых он видел мало, кажутся ему «на одно лицо». И наоборот. Был случай с коллегами из Пало-Альто, которые совместно с китайцами разрабатывали алгоритм обнаружения лиц. В итоге он чудесно находил азиатов, но не мог увидеть европейцев. В каждой картинке мы в первую очередь ищем знакомые образы. Например, мы здесь видим квадраты и круги. Глаз способен воспринимать очень большие диапазоны яркости, но делает это хитрым образом. Зрительная система адаптируется к диапазону значений яркости порядка 1010. Но в каждый конкретный момент мы можем распознать небольшой участок яркости. То есть наш глаз выбирает себе какую-то точку, адаптируется к значению яркости в ней и распознает только небольшой диапазон вокруг этой точки. Все то, что темнее, кажется черным, все то, что светлее — белым. Но глаз очень быстро перемещается и мозг достраивает картинку, поэтому мы видим хорошо. Субъективная яркость – логарифм от физической яркости. Если мы посмотрим на изменение яркости какого-либо источника и станем изменять яркость линейно, наш глаз будет воспринимать ее как логарифм.

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

Это называется фотопическим зрением.

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

Источник: https://habr.com/post/251161/

Самая удобная и увлекательная подготовка к ЕГЭ

5.3.2. Анализ результатов работы алгоритма с реалъншли изображениями

Термин «алгоритм», впервые употребленный в современном значении. Лейбницем (1646–1716), является латинизированной формой имени великого персидского математика Мухаммеда бен Муссы аль-Хорезми (ок. 783 – ок. 850).

Его книга «Об индийском счете» в XII в. была переведена на латинский язык и пользовалась широкой популярностью не одно столетие.

Имя автора европейцы произносили как Алгоритми (Algorithmi), и со временем так стали называть в Европе всю систему десятичной арифметики.

Научное определение алгоритма дал А. Чёрч в 1930 году. В наше время понятие алгоритма является одним из основополагающих понятий вычислительной математики и информатики.

Алгоритм — это точное и полное описание последовательности действий над заданными объектами, позволяющее получить конечный результат.

Можно сказать, что алгоритм решения какой-либо задачи — это последовательность шагов реализации (или нахождения) этого решения, а процесс построения алгоритма (алгоритмизация) — разложение задачи на элементарные действия или операции.

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

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

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

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

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

Основные требования, предъявляемые к алгоритмам:

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

Определенность (детерминированность; лат. determinate — определенность, точность): шаги (операции) алгоритма должны допускать однозначную трактовку и быть понятными для исполнителя алгоритма. Это свойство указывает на то, что любое действие в алгоритме должно быть строго определено и описано для каждого случая.

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

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

Конечность: количество шагов алгоритма должно быть конечным.

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

Для оценки и сравнения алгоритмов существует много критериев. Чаще всего анализ алгоритма (или, как говорят, анализ сложности алгоритма) состоит в оценке временных затрат на решение задачи в зависимости от объема исходных данных.

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

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

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

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

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

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

  1. следование — образуется из последовательности действий, следующих одно за другим;
  2. ветвление (развилка) — обеспечивает в зависимости от результатов проверки условия (ДА или НЕТ) выбор одного из альтернативных путей алгоритма;
  3. цикл — обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла.

Для описания алгоритмов наиболее распространены следующие методы (языки):

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

Блок-схемы. Графическое изображение алгоритма с помощью специальных значков-блоков.

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

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

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

  • строго не формализуемы;
  • достаточно многословны;
  • могут допускать неоднозначность толкования отдельных предписаний;
  • сложные задачи с анализом условий, с повторяющимися действиями трудно представляются в словесной или словесно-формульной форме.

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

Такое графическое представление алгоритма называется блок-схемой. Определенному типу действия (ввод/вывод данных, проверка условия, вычисление выражения, начало и конец алгоритма и т. п.) соответствует определенная геометрическая фигура — блочный символ.

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

Название символаГрафическое изображение

Источник: https://examer.ru/ege_po_informatike/teoriya/analiz_rezultata_ispolneniya_algoritma

Scicenter1
Добавить комментарий