Какие бывают свойства алгоритма и зачем их вообще учить?
В учебнике написано, что у алгоритма есть какие-то свойства: дискретность, понятность, результативность и ещё пара. Я их зазубрил, но не понимаю, зачем они нужны и что они значат на практике. Можете объяснить по-человечески, с примером?
2 ответа
Эти свойства — просто список требований, которым должна отвечать любая нормальная инструкция, чтобы её можно было выполнить «не думая». Разберём на рецепте блинов:
- Дискретность — алгоритм разбит на отдельные шаги (разбить яйцо, добавить муку...), а не «сделай блины как-нибудь».
- Понятность — каждый шаг исполнителю по силам. Роботу нельзя сказать «посоли по вкусу», а человеку можно.
- Определённость (детерминированность) — на одном и том же входе всегда один и тот же результат, без «как повезёт».
- Результативность (конечность) — алгоритм заканчивается за конечное число шагов и выдаёт ответ.
- Массовость — работает не для одного набора данных, а для целого класса задач (рецепт годится для любого количества блинов).
Их учат, потому что если хоть одно свойство нарушено — алгоритм либо зависнет, либо даст разный ответ, либо исполнитель его не поймёт. На ОГЭ/ЕГЭ за определение тоже могут спросить.
Маленькая подсказка для экзамена: чаще всего путают результативность (есть конечный результат) и конечность/дискретность. Если алгоритм может зациклиться навсегда (бесконечный while True без выхода) — нарушена именно результативность.