在许多语言中,特别是对我来说,Java和C++都有一个庞大的标准库。计算机科学中的许多经典问题,如搜索、排序、散列等。是在这个库中实现的。我的问题是,与简单地使用库的版本相比,实现自己的算法有什么好处吗?有没有什么特别的例子可以证明这是真的?
我之所以这么问,是因为在学校里花了大量的时间在排序上,然而在我的实际代码中,当人们已经在Java和C++中实现和优化了排序算法时,我发现没有理由利用这些知识。
编辑:我与我认识的一位教授详细讨论了这个问题,并发布了他的回复,有人能想出更多补充吗?
发布于 2012-02-23 08:17:44
在与计算机科学教授详细讨论后,以下是他的观点:
使用库的理由
1.你正在写有截止日期的代码。
如果你想要完全优化你的代码,2.。
3.你之前已经做过的解决了这个问题。
话虽如此,仍然有很多理由让你自己制定解决方案。
自己动手的原因
1.一旦你遇到一个通过非库解决方案更好地优化的问题,对问题解决技术和算法的基本理解是完全必要的。
2.对算法及其设计和使用有很好的理解,这会让你在工作中更有价值。
3.具有如何做某事的概念的通常与能够做某事一样有价值,如果不是这样的话。
4.作为程序员,我们永远不会真正满足于仅仅有一些“工作”。
5.最后,创建自己的排序或散列等个人方式会带来巨大的成就感和成就感。
n log(n)时间内找到两个顶点之间的最短路径时,你的朋友会看到你有多酷!严肃地说,知道你完全有能力理解和选择基于知识的最佳解决方案,这是非常有价值的。不是某些库提供给你的。发布于 2012-02-23 07:08:46
在大多数情况下,原始库函数的性能将比自定义代码的性能更高。
如果您有一个非常具体的(而不是一般的)问题,您可能会通过编写专门的函数来获得性能提升,但作为开发人员,您应该有意识地努力不要“重复发明轮子”。
发布于 2012-02-23 07:16:33
排序是一个值得考虑的好例子。如果除了如何比较元素之外,您对要排序的数据一无所知,那么标准排序算法会运行得很好。在这种情况下,在C++中,STL排序可以做得很好。
但有时你会更了解你的数据。例如,如果您的数据由均匀分布的数字组成,基数排序可能会快得多。但基数排序是“侵入性的”,因为它需要更多地了解你的数据,而不仅仅是一个数字是否大于另一个数字。这使得编写一个可以被所有人共享的通用接口变得更加困难。因此,STL缺少基数排序,在这种情况下,您可以通过编写自己的代码来做得更好。
https://stackoverflow.com/questions/9404638
复制相似问题