Книга: Вычислительное мышление: Метод решения сложных задач
Назад: Обобщение
Дальше: Понимание людей

Декомпозиция

Разделение крупной задачи на мелкие части, с которыми легче справиться, называется декомпозицией. Мы видели применение этого принципа, когда делали робота-мошенника и собрали целое, продумав все отдельные компоненты. Это очень действенный способ решения проблем. Именно декомпозиция позволяет писать сложные программы, состоящие из миллиона инструкций. Без нее у нас не было бы программ, позволяющих делать все то, для чего сейчас используются компьютеры.
Использование метода декомпозиции при написании программ тесно связано с абстракцией управления. Идея состоит в том, чтобы разбить программу на массу более мелких задач. Каждую из этих небольших программ написать легко. После этого становится легче написать большую объединяющую их программу, потому что не надо думать обо всех деталях. Как только части завершены, мы учитываем только то, что они делают, а не как они это делают. Чтобы облегчить процесс, каждой части присваивается имя, которое четко указывает, чтó она делает, но подробности при этом скрыты (такого рода наименования — это еще один вид абстракции). Потом при объединении маленьких программ уже не надо думать о мелких деталях.
Таким образом, декомпозиция обеспечивает еще один способ использования обобщения. Если небольшие программы написаны в достаточно общем ключе, то их используют в других больших программах. Возможно, для решения определенных подзадач пригодятся уже существующие программы, если при сопоставлении с образцом выявится необходимое соответствие. Кроме того, существуют особые приемы, позволяющие использовать декомпозицию для быстрого нахождения работающих решений. Один из вариантов — алгоритм «разделяй и властвуй». Идея заключается в том, чтобы решить задачу, найдя способ разделить ее на более мелкие, но в остальном одинаковые задачи. Чтобы решить проблему поиска по телефонному справочнику, мы можем открыть его в середине и посмотреть, находятся ли напечатанные там фамилии до или после нужной нам фамилии. После этого мы игнорируем одну из половин, так как знаем, где надо искать. У нас остается похожая, но менее масштабная проблема — поиск в половине телефонного справочника. Мы решаем эту задачу так же — открываем выбранную часть на середине и так далее, пока не найдем нужную фамилию. Это позволяет решить задачу гораздо быстрее. Такой подход — пример решения задачи с использованием рекурсии, особого вида алгоритмического мышления. На этой идее основан подход к созданию алгоритмов, в основе которого лежит деление задачи на похожие, но меньшего объема. Метод «разделяй и властвуй» выделяется в том плане, что задачу делят пополам (или на трети, четверти и т.п.), чтобы получившиеся при этом задачи были примерно одного объема, но гораздо меньшего по сравнению с общей задачей и, следовательно, легче в решении, чем изначальная.
Назад: Обобщение
Дальше: Понимание людей