我是一名初级 C++ 程序员,为了扩展我的思维,我一直在尝试解决一些问题 投影网. 。尽管我在学校对数学很感兴趣,但我发现自己会自动寻找问题的强力解决方案,而不是寻找精简或优雅的解决方案。

这听起来是不是一种糟糕的心态?我这样做有点内疚,但也许有时快速和肮脏是可以的......

有帮助吗?

解决方案

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

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

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

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

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

其他提示

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

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

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

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

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

我经历过这样的演变:

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

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

Ken Thompson:“如果有疑问,请使用暴力”

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

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

祝你好运。

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

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

如果恰好是“暴力”的情况。 => "简单"和“优雅” => “复杂”,然后蛮力获胜。这通常是正确的。

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

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

将其置于不同的背景下:

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top