为什么大多数主流编程语言的标准库都没有实现Disjoint Set(联合查找算法)?

Why is there no Disjoint Set (Union Find Algorithm) implemented in most mainstream programming languages' standard library?

我找到了关于如何为 C++、Java、Kotlin、Python 等实现不相交集(联合查找算法实现)的文章。它的实现并不是特别困难, 尽管有一些错误的余地。令我惊讶的是,没有语言在其标准库中包含这种形式。

这有什么原因吗?考虑到大多数标准库中已经存在多少种不同的数据结构,我很惊讶没有一个(我发现的)包含这个。是不是太晦涩难懂了?

这是一个合理的问题,除了“因为大多数人不需要它”之外,也许没有真正令人满意的答案。我可能使用过不相交集数据结构 10-20 次,但几乎只在 competitive programming; most languages' standard libraries are not designed with competitive programmers in mind. Disjoint set data structures are also needed for writing some standard algorithms like Kruskal's algorithm 的上下文中使用过,但如果你自己实现 Kruskal 算法,那么你也可以自己实现一个不相交集数据结构。

现在,您可能会直觉地认为,即使大多数程序员永远不会使用它,将它放在标准库中也无妨。诚然,语言开发人员首先会花费很少的时间来编写它,但他们还必须对其进行广泛的测试、编写文档、响应错误报告或有关它的功能请求等等。语言设计者还必须就 哪个 算法应该是标准库中提供的算法采取立场;有各种具有不同性能和并发特征的选项,因此需要进行一些研究来选择要实施的内容。

另一方面,如果某些小众数据结构不在标准库中,但对某些程序员来说足够重要,那么它很可能无论如何都会出现在 third-party 库中。从语言设计者的角度来看,将它留给 third-party 库开发者几乎没有任何坏处。