Algorithm 关于在代码中实现算法的一些建议
前几天我想我会尝试在我的代码中创建斐波那契算法,但我从来都不擅长数学 我最终用循环编写了自己的方法,但它似乎效率低下或不是“正确的方法” 有人对在代码中实现算法有什么建议/阅读材料吗?我发现这类东西很有用。它迫使您考虑一个算法,然后实现它。然后,许多问题都有关于如何解决问题的广泛讨论(从幼稚的解决方案到一些相当巧妙的解决方案),您可以使用这些解决方案来查看您所做的是对还是错Algorithm 关于在代码中实现算法的一些建议,algorithm,Algorithm,前几天我想我会尝试在我的代码中创建斐波那契算法,但我从来都不擅长数学 我最终用循环编写了自己的方法,但它似乎效率低下或不是“正确的方法” 有人对在代码中实现算法有什么建议/阅读材料吗?我发现这类东西很有用。它迫使您考虑一个算法,然后实现它。然后,许多问题都有关于如何解决问题的广泛讨论(从幼稚的解决方案到一些相当巧妙的解决方案),您可以使用这些解决方案来查看您所做的是对还是错 在讨论线程中,您还可以找到其他人用许多不同语言提供的各种实现。自己提出一个解决方案,然后与其他人的解决方案进行比较,这是一
在讨论线程中,您还可以找到其他人用许多不同语言提供的各种实现。自己提出一个解决方案,然后与其他人的解决方案进行比较,这是一个很好的学习方法。这两本介绍性书籍都有关于这类事情的好信息: 莫雷索 两者都是面向函数(和方案)的,但这自然适合于此类问题
最重要的是,你可能会从youtube上了解到一些关于算法介绍的讲座。有一些非常非常好的讲座,分解了一些最常见的算法,比如斐波那契级数,以及如何优化它们 开始阅读O表示法,这样您就可以了解算法是如何随着可变大小的输入而增长的,以及如何对算法的运行时进行分类 从这个视频系列开始,我找到了关于这个主题的优秀材料:
通过测试驱动导出您的算法。通过使用TDD,我能够正确地编写比以前复杂得多的算法。如果你不能将斐波那契函数的伪代码翻译成你的语言,那么你应该去找一本你的语言的基本教程,因为你似乎还没有掌握它的基本习惯用法
如果您有一个有效的解决方案,但对它感到不安全,请将它展示给其他人查看。问题不清楚。“在代码中实现算法”?算法总是用某种语言(=代码)给出的,那么你在要求什么呢?阿卡帕,这实际上是不真实的。很多时候,算法都是用psuedo代码描述的,或者用OP,math notation给出的例子来描述的。这是正确的Anthony,我在维基百科上看到了Fibonacci序列的psuedo代码。我不知道如何将其转化为代码,因此我不得不通过查看结果来“反向工程”解决方案,我认为这是一种糟糕的做法。这是“伪”的,请不要传播拼写错误的模因。嗨,斯万特,去你的,完美主义者,肯特·贝克有一个使用TDD实现斐波那契序列的例子,最终得到递归解。正确的解决方案应该是“带循环”,因为它具有更好的性能,有助于理解无限流,而不是帮助理解低于标准的解决方案的递归。将递归转换为迭代是非优化编译器的标准重构。对尾部递归的重构是机械的,正如使用基于堆的堆栈进行重构一样。两者都不会更改运行时行为。但是Fib(n)是一种情况,其中一些分析表明,迭代地建立解决方案比递归地下降要快。这是新的算法开发,不是标准的重构。TDD有什么帮助?例如,我将“fib(50)”作为一个测试用例添加到通过TDD(参见Beck或Bernhardt)找到的递归解决方案中,并在10分钟后终止该过程。Fowler称这种重构为“替换算法”,OP希望帮助理解这一步骤。另外,“引入缓存”我可以看到正在进行TDD,即使只有最后两个值。太糟糕了,缺少AssertRunsFast()。矩阵乘法,我不能从TDD的角度来看,我同意你需要分析。