javascript - 是否有黑盒方法来检测排序算法是否稳定?

标签 javascript sorting computer-science computability

在 JavaScript(在其他地方有些适用)中,您不知道您的代码在哪个目标实现上运行,有没有一种方法可以检测底层排序算法(Array.sort )稳定与否,只知道它遵循the specification

我可以在 webkit 中找到 2 个测试 (1) (2) ,但这些测试的可靠性如何? (这个检查可以用 PCP 完成吗?)我正在寻找一个数学上合理的解决方案。

这是一个棘手的问题,因为更高级的排序算法可以根据源数组的长度更改子算法(如 Timsort)。我一直很困惑,因为我运行的每项测试都表明 Google Chrome 浏览器的类型是稳定的,但我看到的所有文档都说它不稳定(the source 会告诉你原因)。

(通常,我使用 this strategy 来使我的排序稳定;它对性能的影响很小但有时很明显)

各种实现中排序的源代码:

最佳答案

黑盒测试不能用于确定程序是否满足任何标准,除非您可以测试与标准相关的所有可能输入。黑匣子可以自由地简单地拥有一个将输入映射到输出的查找表(请参阅 Pentium FDIV bug 了解现实世界中的查找表错误),因此您无法确定您的测试是否排除了其他输入触发违规的可能性。

关于javascript - 是否有黑盒方法来检测排序算法是否稳定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16473837/

相关文章:

javascript - 在另一个 browserify 应用程序中包含一个已经捆绑的文件

javascript - 滚动脚本实现不起作用

php - 如何使用32位系统对数字(1099511627520)求逆时得到正确的结果

javascript - 如何从 angularjs 中的 Controller 调用 Ui-Bootstrap 0.10.0 中的 $modal.open

javascript - 将并行数组组合成单个对象数组并排序

c# - DataGridView 上的自定义排序

c - 正确使用 scandir() 排序?

accessibility - 对于盲人程序员来说,有哪些好的计算机科学资源?

python - 找到这些向量之间相似性的最佳方法是什么?

javascript - 当使用新 Prop 调用渲染时,React JS 未完全更新 View