<分区>
考虑到目前很多库已经优化了排序引擎,那为什么还有很多公司问Big O和一些排序算法,而实际上在我们每天的计算中,这种实现不再是真正需要的?
例如,自平衡二叉树,是一些嵌入式行业的大公司仍然要求程序员编写代码作为测试和候选人选择过程的一部分的问题。
即使是嵌入式编码,如果有 boost、SQLite 和其他库可供使用,在任何情况下都会发生这种实现?换句话说,是否还值得思考如何优化此类算法?
<分区>
考虑到目前很多库已经优化了排序引擎,那为什么还有很多公司问Big O和一些排序算法,而实际上在我们每天的计算中,这种实现不再是真正需要的?
例如,自平衡二叉树,是一些嵌入式行业的大公司仍然要求程序员编写代码作为测试和候选人选择过程的一部分的问题。
即使是嵌入式编码,如果有 boost、SQLite 和其他库可供使用,在任何情况下都会发生这种实现?换句话说,是否还值得思考如何优化此类算法?
最佳答案
作为一名嵌入式程序员,我会说这一切都归结为问题和系统限制。尤其是在微处理器上,您可能不想/不需要引入 Boost 并且 SQLite 对于给定的问题可能仍然太重。如果你说 2K RAM,你如何解决问题看起来会有所不同 - 但这绝对是极端的。
例如,您可能不想自己重写红黑树的代码,因为正如您所指出的,您最终可能会得到高度未优化的代码。但在追求可重用性的过程中,抽象往往会在代码中添加间接层。因此,您最终可能会重新实现至少更简单的“已解决”问题,在这些问题中,对于某些特殊情况,您可以比内置库做得更好。例如,最近我使用共享内存池编写了链表的专用版本,用于跨列表分配。我已经针对 STL 的列表进行了基准测试,但由于增加了抽象层,它并没有削减它。我的代码一样好吗?不,可能不是。但我更容易专注于特定的用例,所以结果更好。
所以我想我想从您的帖子中解决一些问题: - 为什么公司仍然询问大 O 运行时?我见过即使是非常优秀的工程师也会在数据结构方面做出错误的选择,因为他们没有仔细考虑 O() 运行时。当假设错误时,二次与线性或线性与恒定时间运算是一个痛苦的教训。 (啊,经验之谈)
-为什么公司仍然询问实现经典结构/算法?可以说您不会重新实现快速排序,但如前所述,您很可能最终会更定期地实现稍微不那么复杂的结构。说实话,如果我想雇用你,我会想要确保你了解现有解决方案的内在和外在理论,所以如果我需要你想出一个新的解决方案,你可以在它。如果其他申请人有,而你没有,我可能会说他们有优势。
此外,还有另一种思考方式。在软件开发中,平台通常非常强大并且消费者已经拥有硬件平台。在嵌入式软件开发中,消费者可能购买硬件平台 - 希望是从贵公司购买。这意味着软件通常在销售硬件。因此,通常使用功能较弱、价格较低的硬件来解决问题并花费更多时间来开发固件会赚更多的钱。固件是一次性的前期成本,而硬件是按单位计算的。因此,即使从业务方面来看,也存在受限硬件的压力,这反过来又导致在软件方面实现专门的结构。
关于algorithm - 不可预测数据的排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20780312/