Является ли предпочтение решениям грубой силы плохим знаком?

Я начинающий программист на С++, и, чтобы растянуть мой разум, я пытался решить некоторые проблемы на projecteuler.net. Несмотря на интерес к математике в школе, я обнаружил, что автоматически перехожу к решениям грубой силы, вместо того, чтобы искать что-то обтекаемое или изящное.

Звучит ли это как плохое настроение? Я чувствую себя немного виноватым, делая это так, но, может быть, быстро и грязно все в порядке...

Ответ 1

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

Иногда метод грубой силы может решить проблему в 50 мс, проверяя каждую комбинацию решений, и "умное" решение может решить ее за 10 мс. В этот момент менее умное, но более понятное решение превосходит умное решение.

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

Так спросите себя, почему вы пытаетесь решить эти проблемы Project Euler? Вы делаете это, чтобы учиться? Тогда, возможно, попытка умного решения будет в ваших интересах, но только после того, как вы изначально попробовали решение грубой силы, чтобы помочь понять проблему.

При выполнении проблем с Python Challenge я стараюсь сделать это максимально лаконичным образом, выдвигая пределы своих способностей. После того, как я его разрешу, я затем пересматриваю ответы других людей и принимаю умственные заметки людей, которые были более умны, чем я, и что они сделали. Некоторые люди будут особенно использовать структуру данных, о которой я не думал, что больше подходит для этой задачи, или у них будет мало математических трюков, которые они используют, чтобы сделать их алгоритм более эффективным. В конце концов я стараюсь как можно больше поглощать их ум и могу показать, что в следующий раз мне будет задана проблема подобного характера.

Ответ 2

Нет, это не плохо. У меня были решения, которые были настолько элегантными, что они были неправы.

Ответ 3

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

Когда вы освоитесь на С++, и вам не нужно думать о том, как делать каждую мелочь, тогда вы сможете потратить больше времени на разработку решений без грубой силы.

Ответ 4

Элегантные решения не создавались спонтанно; они были получены из решений грубой силы, когда из текущего решения потребовалось больше скорости или меньше потребления памяти.

Нет, нет. Это как изящные решения возникли.

Ответ 5

Я пережил эту эволюцию:

  • Получить его для компиляции
  • Сделать работу как ожидалось
  • Выясните одно решение, которое работает
  • Выясните одно хорошее решение.
  • Выделите несколько решений и найдите лучшие
  • Выясните несколько решений и найдите лучшее для этой ситуации.
  • ?? еще не получили там

Ответ 6

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

Ответ 7

Кен Томпсон: "Если у вас есть сомнения, используйте грубую силу"

Ответ 8

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

Было бы трудно убедить меня, что люди, которые пытаются научиться, могут быть названы плохими. За исключением, может быть, злого ученого: P

удачи.

Ответ 9

Подходите ли вы к правилу времени выполнения 1 минуты для проблем? Если да, то ваше решение "грубой силы" удовлетворяет всем требованиям, и это на самом деле очень хороший знак того, что вы можете быстро придумать что-то, что работает!

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

Ответ 10

Если это случается, когда "грубая сила" = > "простая" и "элегантная" = > "сложная", то выигрывает грубая сила. И это очень часто бывает.

Ответ 11

Совсем нет. Задайте проблему правильно и полностью, затем сделайте ее более совершенной или элегантной при необходимости.

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

Ответ 12

Это определенно не плохой знак тенденции к грубой силе, особенно как новичок, потому что вы можете не знать ничего лучше. Особенно с Project Euler, это плохой знак для реализации метода грубой силы, а не для просмотра комментариев, чтобы изучить более эффективный метод.

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

Ответ 13

Чтобы сделать это в другом контексте:

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

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

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

Ответ 14

Вы взвесили свой вариант. Если решение грубой силы выполнит свою работу и будет выполнено нормально, это хорошее решение.