首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定制设计算法的好处

问定制设计算法的好处
EN

Stack Overflow用户
提问于 2012-02-23 07:04:35
回答 7查看 177关注 0票数 1

在许多语言中,特别是对我来说,Java和C++都有一个庞大的标准库。计算机科学中的许多经典问题,如搜索、排序、散列等。是在这个库中实现的。我的问题是,与简单地使用库的版本相比,实现自己的算法有什么好处吗?有没有什么特别的例子可以证明这是真的?

我之所以这么问,是因为在学校里花了大量的时间在排序上,然而在我的实际代码中,当人们已经在Java和C++中实现和优化了排序算法时,我发现没有理由利用这些知识。

编辑:我与我认识的一位教授详细讨论了这个问题,并发布了他的回复,有人能想出更多补充吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-02-23 08:17:44

在与计算机科学教授详细讨论后,以下是他的观点:

使用库的理由

1.你正在写有截止日期的代码。

  • 阻碍您快速、及时地完成项目的能力是没有意义的。这就是为什么编写库是为了节省时间和避免“重新发明轮子”

如果你想要完全优化你的代码,2.。

  • 机会是一群才华横溢的人,他们用Java或C++编写算法,或者任何人的库在为这种语言优化算法方面做得更好,无论他们花了多少时间,都比你在一两个小时或四个小时内做得更好。

3.你之前已经做过的解决了这个问题。

  • 如果你已经解决了这个问题,并且对它是如何设计的有一个很好的完整的理解,那么你就不需要费力地研究一个复杂的解决方案,因为你不会获得太多的好处。

话虽如此,仍然有很多理由让你自己制定解决方案。

自己动手的原因

1.一旦你遇到一个通过非库解决方案更好地优化的问题,对问题解决技术和算法的基本理解是完全必要的。

  • 如果您有一个高度特定的问题,在处理网络或游戏之类的工作时,经常会出现这样的问题。能够发现特定算法胜过库版本的情况变得非常有价值。

2.对算法及其设计和使用有很好的理解,这会让你在工作中更有价值。

  • 任何半途而废的程序员都可以编写一个函数来比较两个对象,然后将它们放入库函数中,然而,能够发现情况并最终提高程序功能和速度的函数将受到管理层的重视。

3.具有如何做某事的概念的通常与能够做某事一样有价值,如果不是这样的话。

  • 凭借对Java库以及如何使用这些库的出色知识,您很有可能成功地解决java中的任何问题。但是,当您受雇到erlang工作时,您将面临一些困难时期。如果你知道Java的库是怎么做的,而不仅仅是它做了什么,你就可以把这些想法移植到任何语言上去。

4.作为程序员,我们永远不会真正满足于仅仅有一些“工作”。

  • 很有可能你很想知道事情为什么会这样。可能正是这种好奇心驱使你进入这个研究领域。不要否认这种好奇心!鼓励它,尽情学习。

5.最后,创建自己的排序或散列等个人方式会带来巨大的成就感和成就感。

  • 想象一下,当你宣称你可以在n log(n)时间内找到两个顶点之间的最短路径时,你的朋友会看到你有多酷!严肃地说,知道你完全有能力理解和选择基于知识的最佳解决方案,这是非常有价值的。不是某些库提供给你的。
票数 0
EN

Stack Overflow用户

发布于 2012-02-23 07:08:46

在大多数情况下,原始库函数的性能将比自定义代码的性能更高。

如果您有一个非常具体的(而不是一般的)问题,您可能会通过编写专门的函数来获得性能提升,但作为开发人员,您应该有意识地努力不要“重复发明轮子”。

票数 1
EN

Stack Overflow用户

发布于 2012-02-23 07:16:33

排序是一个值得考虑的好例子。如果除了如何比较元素之外,您对要排序的数据一无所知,那么标准排序算法会运行得很好。在这种情况下,在C++中,STL排序可以做得很好。

但有时你会更了解你的数据。例如,如果您的数据由均匀分布的数字组成,基数排序可能会快得多。但基数排序是“侵入性的”,因为它需要更多地了解你的数据,而不仅仅是一个数字是否大于另一个数字。这使得编写一个可以被所有人共享的通用接口变得更加困难。因此,STL缺少基数排序,在这种情况下,您可以通过编写自己的代码来做得更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9404638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档