我想知道有多少人在现实世界中实现了计算机科学的" 经典算法 ",如Dijkstra算法或数据结构(例如二叉搜索树),而不是学术项目?
当有大量的库,框架和API为您提供相同的功能时,了解这些算法和数据结构是否有益于我们的日常工作?
当有大量的库,框架和API为您提供相同的功能时,了解这些算法和数据结构是否有益于我们的日常工作?
该库不知道您的问题域是什么,并且无法选择正确的算法来完成这项工作.这就是我认为了解它们很重要的原因:然后你可以正确选择算法来解决你的问题.
理解您的工具是否有益处,而不仅仅是知道它们存在?
是的,当然有.举一个简单的例子,你不认为知道List(或你的语言的等效动态数组实现)和LinkedList(或你的语言等价物)有什么区别是有好处的吗?知道一个人具有恒定的随机访问时间,而另一个是线性的,这一点非常重要.如果在序列的中间插入一个值,则需要N个副本,而另一个可以在恒定时间内完成.
您是否认为理解相同的排序算法并不总是最优的?例如,对于几乎排序的数据,快速排序很糟糕?如果你不明白引擎盖下发生了什么,天真地只是调用Sort()并希望最好的可能会变得非常昂贵.
当然,你可能不需要很多算法,但即便如此,只要了解它们的工作方式,就可以让自己更容易找到有效的算法来解决其他无关的问题.
了解或能够理解这些算法非常重要,这些都是您交易的工具.这并不意味着你必须能够在一小时内从内存中实现A*.但是你应该能够弄清楚使用红黑树而不是普通的不平衡树的优点是什么,所以你可以决定你是否需要它.您需要能够判断算法的适用性以解决您的问题.
这可能听起来像学校一样,但这些"经典算法"并不是为了给大学生提供考试问题而发明的,它们是为解决问题或改进现有解决方案而发明的,就像数组,链表或堆栈是构建块一样.写一个程序,其中一些.就像在数学中你从加法和减法转向整合和区分一样,这些都是先进的技术,可以帮助你解决那里的问题.
它们可能不会直接适用于您的问题或工作情况,但从长远来看,了解它们将有助于您作为专业软件工程师.
为了回答你的问题,我最近为游戏实施了A*.
好吧,有人必须编写库.在地图软件公司工作时,我实现了Dijkstra,以及二叉搜索树,b树,n-ary树,bk-trees和隐藏的马尔可夫模型.
此外,如果您想要的只是一个"众所周知"的算法,并且您还希望自由专业化并优化它,如果它对性能至关重要,包括整个库似乎是一个糟糕的选择.