Метод решения больших задач. Принцип "разделяй и властвуй"

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

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

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

Тогда задача книжного магазина делится на четыре подзадачи:
1) прочитать файл с записями о продажах;
2) подсчитать количество продаж по названиям и по изделиям;
3) отсортировать записи по издателям;
4) вывести результат.

Решения для подзадач 1), 2) и 4) известны, их не нужно делить на более мелкие подзадачи. А вот 3) слишком сложна. Будем дробить ее дальше.

3.1) Отсортировать записи по издателям;
3.2) для каждого издателя отсортировать записи по названиям;
3.3) сравнить соседние записи в группе каждого изделия. Для каждой одинаковой пары увеличить счетчик для первой записи и удалить вторую.

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

Результирующая последовательность действий называется алгоритмом.

Следующий шаг - перевести наш алгоритм на некоторый язык программирования, например на C++.

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

Вывод: "разделяй и властвуй"!