Algorithm 在一个优化算法中,将任意三个不同的值按升序放入一个列表中所需的最小三次比较次数

Algorithm 在一个优化算法中,将任意三个不同的值按升序放入一个列表中所需的最小三次比较次数,algorithm,sorting,Algorithm,Sorting,问题: a. 2 and 3 b. 3 and 4 c. 3 and 5 d. 3 and 6 e. 6 and 12 在将任意三个不同值按升序放入列表的优化算法(基于比较值)中,三次比较所需的最小数量是多少?四个不同值的答案是什么 选项: a. 2 and 3 b. 3 and 4 c. 3 and 5 d. 3 and 6 e. 6 and 12 我正在准备AP考试,发现了这个问题 我知道冒泡排序和选择排序,所以我认为冒泡排序应该是最有效的。因此,我将它应用于一个虚构的列表{a,b,c}

问题:

a. 2 and 3
b. 3 and 4
c. 3 and 5
d. 3 and 6
e. 6 and 12
在将任意三个不同值按升序放入列表的优化算法(基于比较值)中,三次比较所需的最小数量是多少?四个不同值的答案是什么

选项:

a. 2 and 3
b. 3 and 4
c. 3 and 5
d. 3 and 6
e. 6 and 12
我正在准备AP考试,发现了这个问题

我知道冒泡排序和选择排序,所以我认为冒泡排序应该是最有效的。因此,我将它应用于一个虚构的列表
{a,b,c}
{a,b,c,d}
,得到的比较数是
3
6
,但测试页面说它不正确

在第一个案例中,我是如何得到
3
的?
我必须比较指数
0,1
1,2
,然后在第二个过程中进行
0,1
比较-总计
3
比较

第一次我是如何得到
6
的?
我必须比较指数
0,1
1,2
2,3
,然后第二次比较
0,1
1,2
,然后第三次比较
0,1
,总计
6
比较

正确答案是什么?为什么?

它告诉你c3,5是正确答案

要了解更多关于如何计算的信息(以及为什么即使是很小的答案也很难计算),请参阅

对于你的考试,只需记住,对于11以下的所有n,你可以得到准确的答案,对于大于11的每一个n,它提供了一个相当准确的估计。

它告诉你c3,5是一个正确的答案

要了解更多关于如何计算的信息(以及为什么即使是很小的答案也很难计算),请参阅


对于你的考试,请记住,对于11以下的所有n,你可以得到准确的答案,对于大于11的每一个n,它提供了一个相当准确的估计。

让我来指导你如何解决这类问题

首先,最重要的是仔细阅读声明

一次比较中三次比较所需的最小数量是多少 最优算法(基于比较值的算法)将任何三个不同的值按升序放入列表中?问题是什么 回答四个不同的值

  • 算法只需要依赖于输入的顺序(你说得对)
  • 该算法是最优的。你需要知道这意味着什么。如果您知道冒泡排序和选择排序,您需要问问自己(或google\wiki\so)它们是否是最优的。如果是,尝试使用它们。因为他们不是,找出原因。比较的下限是Ω(n logn)。有些算法在更坏的情况下达到了这些界限(heapsort、merge-sort)。冒泡排序和选择排序没有
  • 问题是。。。这些算法可能很难分析,而进行排序实际上比要求的任务更困难。这里的提示是放置 如何将元素放入排序列表中?找到元素应位于的位置并将其插入该位置。哪种非常常见的算法适合此任务

    二进制搜索

    如果您现在还不知道二进制搜索,请停止并阅读它。 您的算法如下所示:

    只要输入列表不是空的,就取一个元素,执行 在排序数组(最初为空)上进行二进制搜索以查找其 在列表中的位置,移动位置大于位置的所有元素,然后 把你的元素放在那里

    该算法不是一个很好的通用排序算法,因为您必须处理移位元素。但那不是你的问题在这里,除了比较,任何东西都要花费0。它显示的是

    Number_Comparison(n) = Number_Comparison(n-1) + binary_search_comparison(n-1)
    Number_Comparison(n) = Sum(i = 1->n-1) binary_search_comparison(i)
    
    与k个元素的有序列表进行比较的次数是
    log(k+1)
    四舍五入到最小值

    k = 0 -> 0
    k = 1 -> 1
    k = 2 -> 2
    k = 3 -> 2
    Number_Comparison(3) = 0 + 1 + 2 = 3
    Number_Comparison(4) = 0 + 1 + 2 + 2 = 5
    

    让我来指导你如何解决这类问题

    首先,最重要的是仔细阅读声明

    一次比较中三次比较所需的最小数量是多少 最优算法(基于比较值的算法)将任何三个不同的值按升序放入列表中?问题是什么 回答四个不同的值

  • 算法只需要依赖于输入的顺序(你说得对)
  • 该算法是最优的。你需要知道这意味着什么。如果您知道冒泡排序和选择排序,您需要问问自己(或google\wiki\so)它们是否是最优的。如果是,尝试使用它们。因为他们不是,找出原因。比较的下限是Ω(n logn)。有些算法在更坏的情况下达到了这些界限(heapsort、merge-sort)。冒泡排序和选择排序没有
  • 问题是。。。这些算法可能很难分析,而进行排序实际上比要求的任务更困难。这里的提示是放置 如何将元素放入排序列表中?找到元素应位于的位置并将其插入该位置。哪种非常常见的算法适合此任务

    二进制搜索

    如果您现在还不知道二进制搜索,请停止并阅读它。 您的算法如下所示:

    只要输入列表不是空的,就取一个元素,执行 在排序数组(最初为空)上进行二进制搜索以查找其 在列表中的位置,移动位置大于位置的所有元素,然后 把你的元素放在那里

    该算法不是一个很好的通用排序算法,因为您必须处理移位元素。但那不是你的问题