Algorithm 用已经支持的语言实现数据结构/算法

Algorithm 用已经支持的语言实现数据结构/算法,algorithm,data-structures,programming-languages,implementation,Algorithm,Data Structures,Programming Languages,Implementation,即使数据结构和算法已经得到支持,但如果您知道为了获得尽可能好的性能而对其进行调优,那么使用您选择的语言实现您自己的数据结构和算法版本是否有意义?有时-是的。您可能需要针对特定案例优化数据结构,或者为其提供一些特定的额外功能 java示例是(一个成熟的、广泛使用的信息检索库)。尽管Map接口和实现已经存在,但对于性能问题,它的使用还不够好,因为它将int装箱为整数,并且为此目的开发了一个更优化的接口,而不是有时使用Map是的。您可能需要针对特定案例优化数据结构,或者为其提供一些特定的额外功能 ja

即使数据结构和算法已经得到支持,但如果您知道为了获得尽可能好的性能而对其进行调优,那么使用您选择的语言实现您自己的数据结构和算法版本是否有意义?

有时-是的。您可能需要针对特定案例优化数据结构,或者为其提供一些特定的额外功能


java示例是(一个成熟的、广泛使用的信息检索库)。尽管
Map
接口和实现已经存在,但对于性能问题,它的使用还不够好,因为它将
int
装箱为
整数,并且为此目的开发了一个更优化的接口,而不是有时使用
Map
是的。您可能需要针对特定案例优化数据结构,或者为其提供一些特定的额外功能


java示例是(一个成熟的、广泛使用的信息检索库)。尽管
Map
接口和实现已经存在,但对于性能问题,它的使用还不够好,因为它将
int
装箱为
整数
,并为此开发了一个更优化的接口,当您使用编译语言(如C、汇编等)时,它可能会有意义,而不是使用
映射。
使用解释语言时,可能会有性能损失,因为本机结构解析器已经编译,不会浪费时间“解释”新结构。

只有当本机结构或算法缺少您需要的东西时,您才可能这样做。

当您使用编译语言(如C、汇编……)时,这可能是有意义的。 使用解释语言时,可能会有性能损失,因为本机结构解析器已经编译,不会浪费时间“解释”新结构。
只有当本机结构或算法缺少您需要的东西时,您才可能这样做。

这个问题包含一个错误的假设,即存在“尽可能最好的性能”这样的东西

如果已经存在的代码在您特定的使用模式下被调优为尽可能最佳的性能,那么您就不可能在性能方面对其进行改进,并且尝试这样做是徒劳的

但是,它没有针对您的特定用途进行尽可能最佳的性能调整。假设它是经过调优的,那么它的设计目的是在许多可能的使用模式中都具有良好的综合性能,其中一些模式与您无关

因此,原则上,通过自己实现代码,您可以应用一些有助于您的调整,并且(如果实现者考虑到这些调整的话)可能会在其他地方阻碍其他用户。但没关系,他们不必使用你的代码。也许你喜欢布谷鸟散列,他们喜欢线性探测

实施者可能没有考虑调整的原因包括:他们不如你聪明(很少,但确实如此);当他们编写代码时,这种调整还没有发明出来,他们也没有遵循这种结构/算法的最新技术;他们有更好的事情要做,而你没有。在这种情况下,一旦你完成了,他们可能会接受你的补丁


除了性能之外,还有其他原因,您可能希望数据结构与您的语言支持的数据结构非常相似,但添加或删除了某些特定行为。如果不能在现有结构的基础上实现,那么最好从头开始。显然,无论是在前期还是在未来的支持中,这样做都是一个巨大的成本,但如果值得,那么你就去做。

这个问题包含了一个错误的假设,即存在“尽可能最佳的性能”这样的东西

如果已经存在的代码在您特定的使用模式下被调优为尽可能最佳的性能,那么您就不可能在性能方面对其进行改进,并且尝试这样做是徒劳的

但是,它没有针对您的特定用途进行尽可能最佳的性能调整。假设它是经过调优的,那么它的设计目的是在许多可能的使用模式中都具有良好的综合性能,其中一些模式与您无关

因此,原则上,通过自己实现代码,您可以应用一些有助于您的调整,并且(如果实现者考虑到这些调整的话)可能会在其他地方阻碍其他用户。但没关系,他们不必使用你的代码。也许你喜欢布谷鸟散列,他们喜欢线性探测

实施者可能没有考虑调整的原因包括:他们不如你聪明(很少,但确实如此);当他们编写代码时,这种调整还没有发明出来,他们也没有遵循这种结构/算法的最新技术;他们有更好的事情要做,而你没有。在这种情况下,一旦你完成了,他们可能会接受你的补丁


除了性能之外,还有其他原因,您可能希望数据结构与您的语言支持的数据结构非常相似,但添加或删除了某些特定行为。如果不能在现有结构的基础上实现,那么最好从头开始。显然,无论是在前期还是在未来的支持中,这都是一个巨大的成本,但如果值得,那么你就这么做。

取决于这样做的原因。在特定的情况下,可能有正当理由。太笼统了,说不上来。也许,也许不是。取决于您重新实现它的原因。我会想象,通常在某些情况下,人们可以为重新实现任何东西提供一个很好的理由。你想要具体的例子吗?真正的问题是什么?@Patrick87最受欢迎的例子。是的。@saadtaame:确切的数字是多少