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

Здесь я делюсь общей стратегией решения проблем, используемой многими разработчиками и упомянутой в Как ее решить венгерским математиком Джорджем Поля. При этом я бы рассмотрел этот шаблон как хорошую отправную точку, где вы можете изменять шаги по мере накопления опыта.

Стратегия решения проблем состоит из пяти основных шагов:
1. Понимание проблемы: Я спрашивал себя о проблеме!
Могу ли я переформулировать проблему своим собственным словом?
Каковы входные и выходные данные?
Как мне следует пометьте важную часть данных, которая является частью проблемы.

2. Изучите конкретные примеры: Неважно, насколько сложна проблема, начните с простых примеров и продвигайтесь к более сложным.
Всегда думайте о примерах, представляющих крайние случаи, например, что, если ввод пуст или что, если ввод недействителен?

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

4. Упростите проблему и решите ее: найдите основную трудность в том, что вы пытаетесь решить, и временно игнорируйте ее!
Теперь подумайте о решении упрощенной версии проблемы, которое в большинстве случаев делает разобраться в проблеме намного проще.
Теперь вернем эту трудность.

5. Рефактор: часто, решая проблему, мы не думаем об эффективности или, по крайней мере, это не является приоритетом. Но после получения рабочего решения мы должны вернуться и задать себе несколько вопросов;
Могу ли я сразу понять свое решение?
Есть ли лучшее / менее сложное решение, повышающее производительность?
Могу ли я подумать о других вариантах рефакторинга?
Как другие решат ту же проблему?

Распространенные шаблоны решения проблем
Бывает, что мы находим один и тот же шаблон в разных решениях. Другими словами, мы можем применять один и тот же шаблон для решения разных проблем, и причина в том, что многие проблемы очень похожи по своей сути, например, поиск элемента в списке или сравнение двух элементов и т. Д.
Поэтому мы можем извлечь выгоду из некоторых общих шаблонов, которые использовались ранее. ниже приведены несколько примеров распространенных шаблонов решения проблем;

  1. Частотомер
  2. Множественные указатели
  3. Раздвижное окно
  4. Разделяй и властвуй

И это лишь несколько распространенных закономерностей из многих.

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