проблемный домен
Сначала вы должны понять проблемную область. Изящное решение неправильной проблемы не годится, и в большинстве случаев неэффективное решение правильной проблемы. Другими словами, качество решения часто является относительным. Простая задача планирования, которая имеет детерминированное решение, выполнение которого занимает десять минут, может быть приемлемой, если графики пересчитываются один раз в неделю, но если графики меняются несколько раз в день, может потребоваться решение на основе генетического алгоритма, которое сходится за несколько секунд.
разложение и отображение
Во-вторых, разбейте проблему на подзадачи и известные / неизвестные элементы, которые соответствуют элементам решения. Иногда это очевидно, например, для подсчета виджетов нужен способ идентификации виджетов, счетчик с приращением и способ хранения счетчика. Иногда это не так очевидно. Иногда вам нужно одновременно разложить проблему, предметную область и возможные решения и попробовать несколько разных сопоставлений между ними, чтобы найти то, которое приведет к правильным результатам [это общий метод].
модель
Смоделируйте решение, по крайней мере, в своей голове, и пройдите через него, чтобы увидеть, работает ли оно правильно. Отрегулируйте при необходимости (см. Разложение и отображение выше).
Состав / интерфейсы
Во многих случаях вы можете найти элементы задачи и элементы решения, которые сопоставляются друг с другом и дают полезные частичные результаты. Эта композиция и структура интерфейса обеспечивают ядро решения, а также служат для уменьшения объема остающейся проблемы. Итак, вы просто возвращаетесь к вершине с меньшей начальной проблемой и проходите ее снова.
опыт
Опыт - лучший учитель, конечно, но чтение о различных видах проблем и решениях также будет полезно. Изучение некоторых известных алгоритмов и их приложений также очень полезно, например. Дейкстра , Брезенхэм , Объединение и, конечно, теория графов .