证明这样的算法不存在

时间:2018-05-23 18:54:35

标签: arrays algorithm

我很难找到以下陈述的证据。证明没有基于比较的算法接收n个大小的数组并发出相同元素的数组,其中索引中的所有元素除以3现在在线性时间内以这些索引的排序形式出现。

例如阵列:8 6 1 3 0 9 4

执行算法后,阵列将如下所示:3 6 1 4 0 9 8

最初元素8,3,4出现在数组中,索引是3的乘法,在执行算法后,它们仍然会出现在3的乘法索引中,但这次它们将以排序的形式出现在这种情况下3,4,8。

我需要证明这种算法不存在。我试着假设这句话是正确的,所以在某些时候我会得到矛盾,但它不适合我。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

有两个论证证明这样的算法不存在。首先,正如评论中所指出的,如果确实存在这样的算法,那么您可以执行以下操作:

  1. 在0 mod 3元素
  2. 上运行算法
  3. 在1 mod 3元素上运行算法
  4. 在2 mod 3元素上运行算法
  5. 合并三个列表以创建完全排序的数组。
  6. 前三个步骤中的每一个都将在O(n / 3)时间内运行,最后一个步骤将在O(n)时间内运行。那会给你一个O(n)比较排序算法。但比较排序被证明是O(n log n)。

    第二个参数是给定一个n项的数组,你想在O(n)时间内排序n / 3项。如上所述,比较排序是O(n log n)。因此,排序n / 3项将是O((n / 3)* log(n / 3))。因此,为了在O(n)时间内对那些n / 3项进行排序,log(n/3)必须小于3. 8的基数2对数等于3.因此,如果n> 24,然后排序n / 3项将花费超过O(n)的比较。