使用您选择的语言实现您自己的数据结构和算法版本是否有意义,即使它们已经受到支持,因为他们知道为了获得最佳性能而一直在考虑调整这些数据结构和算法吗?
答案 0 :(得分:3)
有时候 - 是的。您可能需要针对特定情况优化数据结构,或者为其提供一些特定的额外功能。
java示例是apache Lucene(一个成熟的,广泛使用的信息检索库)。虽然Map<S,T>
接口和实现已经存在 - 但是对于性能问题,其使用情况还不够好,因为它将int
加载到Integer
,并且更加优化IntToIntMap
是为此目的而开发的,而不是使用Map<Integer,Integer>
。
答案 1 :(得分:3)
这个问题包含一个错误的假设,即存在“最佳表现”这样的事情。
如果已根据您的特定使用模式调整已存在的代码以获得最佳性能 ,则您无法在性能方面对其进行改进并试图这样做是徒劳的。
但是,它并未根据您的特定用途进行调整以获得最佳性能。假设它完全被调整,它被设计为平均具有良好的全面性能,采用了许多可能的使用模式,其中一些与您无关。
因此,原则上可以通过自己实现代码,您可以应用一些帮助您的调整(如果实施者认为完全调整的话)可能会阻碍其他地方的其他用户。但是没关系,他们不必使用你的代码。也许你喜欢布谷鸟哈希,他们喜欢线性探测。
实施者可能没有考虑过调整的原因包括:他们不如你聪明(很少见,但它会发生);当他们编写代码并且他们没有遵循该结构/算法的最新技术水平时,没有发明这种调整;他们有更好的时间与你的时间有关,你没有。在这些情况下,一旦你完成,他们可能会接受你的补丁。
除了性能之外,还有其他原因,您可能希望数据结构与您的语言支持的数据结构非常相似,但添加或删除了某些特定行为。如果你不能在现有结构之上实现它,那么你可能会从头开始。显然,这是一个很大的成本,在前期和未来的支持,但如果它是值得的,那么你这样做。
答案 2 :(得分:2)
使用编译语言(如C,Assembly ..)时可能有意义。 使用解释型语言时,您可能会遇到性能损失,因为本机结构解析器已经编译,并且不会浪费时间“解释”新结构。 只有在原生结构或算法缺少您需要的东西时,您才可能这样做。