我听说Timsort打破了O(n log n)界限,因为某些情况利用了数据模式。怎么可能?任何人都可以详细解释我吗?如果确实如此,那么Timsort总是会比快速排序少进行比较,因为在实际数据中有一些模式,除了数据是真正随机的?
我们可以使用某种技巧来破坏平均情况下的O(n log n)绑定以进行比较吗?
答案 0 :(得分:4)
这取决于你的意思平均值。在CS领域内,平均值具有非常精确的含义:所有可能输入集的均值,假设每个可能的输入集具有相同的概率。此定义很方便,因为它精确且易于处理,但在某些情况下并不是最有用的,因为真实的单词数据通常与随机数不同,因此平均值的更好定义可能是:所有真实世界输入集的平均值。但这不是很精确,也不会在科学背景下发挥作用,所以你不会在学术界找到这个。这两个定义的差异是巨大的:在现实世界数据中,您可以合理地假设存在固定百分比K1
的输入集,可以通过类似于timsort的线性时间进行排序。对于随机数据,可以按线性时间排序的百分比K2(n)
非常快地变为零,如K2=Exp(-n)
,其中n
是输入集的大小。因此,对您提出的确切的,学术性的答案是否,您无法改善平均情况。现实工程师的答案是可能,这取决于我们可以尝试。他们这样做。