我是初学C ++程序员,为了扩展我的思想,我一直在尝试projecteuler.net上的一些问题。尽管学校对数学很感兴趣,但我发现自己会自动选择蛮力解决问题的方法,而不是寻找精简或优雅的东西。
这听起来像是一种糟糕的心态吗?我觉得这样做有点内疚,但有时可能很快就很脏......
答案 0 :(得分:23)
我认为你应该看看你的目标是什么以及你的约束是什么。
有时,暴力方法可以在50ms内解决问题,尝试解决方案的每个组合,而“聪明”的解决方案可以在10ms内解决问题。在那时,不那么聪明但更容易理解的解决方案胜过聪明的解决方案。
然而,有一些问题,暴力强迫不仅不优雅,而且根本不起作用。有很多问题,如果你试图天真地强迫它们,它将花费大量的时间来解决它们。很明显,这些类型的问题需要更优雅的方法。
那么问问自己,为什么要尝试这些项目欧拉问题?你在学习吗?然后,尝试一个聪明的解决方案将符合您的最佳利益,但只有在您最初尝试使用暴力解决方案以帮助掌握问题之后。
在进行Python挑战问题时,我尝试以最简洁的方式做到这一点,推动我的能力极限。在我解决之后,我会回顾其他人的答案,并记下那些比我更聪明,他们做了什么的人的心理记录。有些人会特别使用我没想过的更适合任务的数据结构,或者他们将使用很少的数学技巧来提高算法的效率。最后,我尽可能地吸收他们的聪明才智,并在下次出现类似性质的问题时表现出来。
答案 1 :(得分:10)
不,这不是一件坏事。我的解决方案非常优雅,他们错了。
答案 2 :(得分:10)
作为一名初学程序员,您将花费更多精力来确定如何使用C ++实际实现内容,而不是花费精力为每个问题找到一个聪明的解决方案。这很好,因为它让您有机会在处理各种各样的问题时探索C ++的不同领域。
当你精通C ++并且不必考虑如何做每件小事时,那么你将能够花更多的时间来发明非暴力解决方案。< / p>
答案 3 :(得分:6)
优雅的解决方案并非自发创造;当当前解决方案需要更高速度或更少内存消耗时,它们来自蛮力解决方案。
所以不,不是。这就是优雅解决方案的产生方式。
答案 4 :(得分:4)
我有点经历过这种演变:
答案 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)
你已经权衡了你的选择。如果蛮力解决方案能够完成工作并且执行正常,那么这是一个很好的解决方案。