16 методов программиста.
Метод 1-й. Дихотомия.

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

Дихотомия или метод деления пополам основывается на математическом методе поиска минимума\максимума неразрывной функции на отрезке или пересечения функции с нулем.

Метод: вычисляем значения функции на концах отрезка, посередине и отбрасываем левый или правый отрезок, вновь делим, и так до того момента пока не достигнем точки с определенной погрешностью. Подобные методы: золотого сечения (делим на 3 части), сканирующей линии (на n — частей).

Вернемся к программированию. При написании кода метод хорош, когда имеется булевский критерий – работает\не работает, совпадает или нет. Метод применим для поиска различий в алгоритме или сужении контекста (отдельный метод) в тестовых данных и т.д.. Например, в задаче оптимизации отчета (при замене алгоритма) необходимо добиться совпадения с первоначальной, не оптимизированной версией или доказать корректность нового алгоритма на конкретных случаях. При проверке алгоритма формируются отчеты за год, сверяем. Совпадают – сверяем за следующий год, различаются – сверяем первое полугодие, различается – за 3 месяца и так далее, до дня или возможно времени суток, пока не получим выборку, которая легка для восприятия и повторения в тестах. После исправления полученной ситуации проверку лучше выполнять в обратном порядке: день, неделя, месяц, полугодие, год так, как существует вероятность наличия других ошибок, дающих отклонение.

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

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

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *