Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 关于在代码中实现算法的一些建议_Algorithm - Fatal编程技术网

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的角度来看,我同意你需要分析。