对蛮力解决方案的偏好是一个不好的迹象吗?

时间:2009-01-06 22:37:17

标签: algorithm brute-force

我是初学C ++程序员,为了扩展我的思想,我一直在尝试projecteuler.net上的一些问题。尽管学校对数学很感兴趣,但我发现自己会自动选择蛮力解决问题的方法,而不是寻找精简或优雅的东西。

这听起来像是一种糟糕的心态吗?我觉得这样做有点内疚,但有时可能很快就很脏......

14 个答案:

答案 0 :(得分:23)

我认为你应该看看你的目标是什么以及你的约束是什么。

有时,暴力方法可以在50ms内解决问题,尝试解决方案的每个组合,而“聪明”的解决方案可以在10ms内解决问题。在那时,不那么聪明但更容易理解的解决方案胜过聪明的解决方案。

然而,有一些问题,暴力强迫不仅不优雅,而且根本不起作用。有很多问题,如果你试图天真地强迫它们,它将花费大量的时间来解决它们。很明显,这些类型的问题需要更优雅的方法。

那么问问自己,为什么要尝试这些项目欧拉问题?你在学习吗?然后,尝试一个聪明的解决方案将符合您的最佳利益,但只有在您最初尝试使用暴力解决方案以帮助掌握问题之后。

在进行Python挑战问题时,我尝试以最简洁的方式做到这一点,推动我的能力极限。在我解决之后,我会回顾其他人的答案,并记下那些比我更聪明,他们做了什么的人的心理记录。有些人会特别使用我没想过的更适合任务的数据结构,或者他们将使用很少的数学技巧来提高算法的效率。最后,我尽可能地吸收他们的聪明才智,并在下次出现类似性质的问题时表现出来。

答案 1 :(得分:10)

不,这不是一件坏事。我的解决方案非常优雅,他们错了。

答案 2 :(得分:10)

作为一名初学程序员,您将花费更多精力来确定如何使用C ++实际实现内容,而不是花费精力为每个问题找到一个聪明的解决方案。这很好,因为它让您有机会在处理各种各样的问题时探索C ++的不同领域。

当你精通C ++并且不必考虑如何做每件小事时,那么你将能够花更多的时间来发明非暴力解决方案。< / p>

答案 3 :(得分:6)

优雅的解决方案并非自发创造;当当前解决方案需要更高速度或更少内存消耗时,它们来自蛮力解决方案。

所以不,不是。这就是优雅解决方案的产生方式。

答案 4 :(得分:4)

我有点经历过这种演变:

  1. 让它编译
  2. 让它按预期工作
  3. 找出一个有效的解决方案
  4. 找出一个好的解决方案
  5. 找出多个解决方案,找到最好的
  6. 找出多种解决方案,并找到最适合这种情况的方法
  7. ?尚未到达那里

答案 5 :(得分:3)

我会说不,这不是一个坏兆头。事实上,你通过远离过早的优化来帮助自己,这绝对是一件好事。

答案 6 :(得分:3)

肯·汤普森:“如有疑问,请使用蛮力”

答案 7 :(得分:2)

学习是一个蛮力的过程。我不会说它不好。在尝试以某种方式做某事时,您可能会注意到一种模式。我想只要你在想某事并试图找到解决方案,你就会学到。很少有人会跳到最优雅或最有效的解决方案。

很难说服那些试图学习的人可能被称为坏人。除了可能是一个邪恶的科学家:P

祝你好运。

答案 8 :(得分:1)

你是否适合问题的1分钟运行时规则?如果是的话,那么你的“蛮力”解决方案就能满足所有要求,这实际上是一个非常好的迹象,表明你可以快速提出有效的方法!

这些问题鼓励微优化和非常聪明的算法,但总的来说,一个非常易读的直接实现将更容易维护,并将在商业世界中受到青睐。

答案 9 :(得分:1)

如果碰巧是“暴力”=&gt; “简单”和“优雅”=&gt; “复杂”,然后蛮力获胜。这通常是正确的。

答案 10 :(得分:1)

完全没有。正确完整地解决问题,然后根据需要使其更加高效或优雅。

这并不是说你应该忽略明显的性能提升......在你更好地理解问题之前,不要只关注它们。

答案 11 :(得分:1)

将其置于不同的背景下:

当你使用一个你不太了解的库(例如创建UI)时,你可以以一种完美的高效方式解决一个简单的问题,尽管你知道这是一种“正确的方法”。如果你好奇并担心你的蛮力代码让你看起来像个白痴,你很快就会找到“正确的方法”(例如,在周末,或在你睡觉时)。 与此同时,通过蛮力,你会有一些有用的东西。

我实际上有时会忘记使用蛮力,并开始扫描API以获得“正确”的解决方案。在许多情况下,这绝对是一个错误。 如果蛮力解决方案易于实施,可根据需要进行扩展(实际上,如果有效),那么就忘记正确的解决方案。你很快就能找到它(很多时候你已经知道了!),但与此同时,你解决了这个问题,并且能够继续下一个。

编码时路障很糟糕,绝对应该避免使用蛮力解决方案。

答案 12 :(得分:0)

对于暴力行为来说绝对不是一个坏迹象,特别是作为一个初学者,因为你可能不知道更好。特别是对于Project Euler,实施强力方法并不审查评论以学习更有效的方法是一个不好的迹象。

我经常和你在同一条船上结束,这就是我开始做P.E.的原因。问题 - 我正在实施许多蛮力方法,并希望让自己接触到更优雅的解决方案......

答案 13 :(得分:0)

你已经权衡了你的选择。如果蛮力解决方案能够完成工作并且执行正常,那么这是一个很好的解决方案。