【问题标题】:counting comparisions in mergesort合并排序中的计数比较
【发布时间】:2017-03-19 23:15:03
【问题描述】:

我用 Python 进行了归并排序,它工作正常。而且我需要在这个归并排序运行时计算比较。我声明全局变量 'merge_compare_count' 因为这是递归函数。我对列表 A 的元素使用随机数。

但问题是每当我运行这段代码时,我总是得到相同的 merge_compare_count。不知道为什么……

例如,当 A 得到 5000 个随机不同的元素但 merge_compare_count 总是返回与 123616 相同的值。

任何帮助将不胜感激!

【问题讨论】:

  • 你为什么认为这是个问题?
  • 因为 listA 随机获得不同数量的元素但总是相同的结果很奇怪......我认为......
  • 一点也不奇怪。另外,请正确缩进并将“500”更正为“5000”。
  • 但是我做了另一种排序,比如快速排序和堆排序,它们返回每个不同的计数数字,甚至 A 的长度相同。这就是为什么我认为这很奇怪或者有什么问题......

标签: python sorting merge


【解决方案1】:

这不是问题。它的编写方式,您的代码只是具有这些步骤的确定数量,仅取决于大小,而不是值。你甚至可以像这样计算它们:

>>> def f(n):
        return 0 if n < 2 else f(n/2) + f(n-n/2) + 2*n

>>> f(5000)
123616

【讨论】:

  • 刚刚超过 2 x n x log2(n),这完全是 O(NlogN) 算法所期望的。
  • @MartijnPieters 是的,尤其是对于 Θ(n log n) 的。它实际上几乎完全是 2n⋅log2(n),这并不奇怪。对于 2 的幂,就是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 2015-07-09
  • 2018-05-30
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 2017-07-25
相关资源
最近更新 更多