Data structures 计算平均案例的方法是什么;s

Data structures 计算平均案例的方法是什么;s,data-structures,time-complexity,big-o,Data Structures,Time Complexity,Big O,背景: 对于我的数据结构和算法,我正在研究大O符号。到目前为止,我了解了如何计算时间复杂度、最佳和最坏情况。然而,这个普通的案例让我困惑不解。老师只是在向我们抛出我不懂的方程式。他不愿意详细解释 问题: 伙计们,计算这个的最好方法是什么?是否有一个公式可以计算这个问题,或者每个算法的计算结果不同 您采取了哪些步骤来计算此值 让我们以插入排序算法为例 研究: 我在youtube和stackoverflow上寻找答案。但它们都使用不同的方程式 任何帮助都会很好 谢谢如评论中所述,您必须查看算法的平均


背景:
对于我的数据结构和算法,我正在研究大O符号。到目前为止,我了解了如何计算时间复杂度、最佳和最坏情况。然而,这个普通的案例让我困惑不解。老师只是在向我们抛出我不懂的方程式。他不愿意详细解释
问题:
伙计们,计算这个的最好方法是什么?是否有一个公式可以计算这个问题,或者每个算法的计算结果不同
您采取了哪些步骤来计算此值
让我们以插入排序算法为例
研究:
我在youtube和stackoverflow上寻找答案。但它们都使用不同的方程式
任何帮助都会很好

谢谢

如评论中所述,您必须查看算法的平均输入(在本例中表示随机)。思考这个问题的一个好方法是尝试跟踪如果输入是平均值,算法会做什么

对于插入排序的示例:

  • 在最佳情况下(当输入已经排序时),算法将查看输入,但从不交换任何内容,显然会导致运行时间为O(n)
  • 在最坏的情况下(如果输入与所需的顺序正好相反),算法会将每个输入从其当前位置一直移动到列表的开头,即索引0上的对象不会移动,索引1上的对象移动一次,输入2上的对象移动两次,依此类推,导致运行时间为0+1+2+3+…+n-1≈ 0.5n²=0(n²)
  • 同样的思维方式也可以用来寻找平均情况,但不是每个对象都一直移动到起点,我们可以预期它将平均移动到起点的一半,也就是说,索引0上的对象不会移动,索引1上的对象将移动半次(当然,这仅在平均情况下才有意义),输入2上的对象将移动一次,索引3上的对象将移动1,5次,依此类推,导致运行时间为0+0.5+1+1.5+2+…+(n-1)/2≈ 0.25n²(在每个指数中,我们拥有最坏情况下的一半)=0(n²)

当然,并不是所有的算法都像这样简单,但是如果输入是随机的,看看算法在每一步都会做些什么通常会有所帮助。如果您对算法的输入有任何类型的可用信息,(例如,插入排序通常被用作其他算法完成大部分排序后的最后一步,因为如果输入几乎已排序,这是非常有效的,在这种情况下,例如,我们可能知道没有对象移动超过x次)然后,在计算平均运行时间时可以考虑这一点。

不同算法的平均运行时间确实不同。在每种情况下,您都需要仔细考虑可能的输入,以及每种输入的时间复杂度,并使用这些信息计算平均值。平均案例分析取决于平均输入,那么平均输入是什么?很难确定。大多数情况下,假设所有输入发生的可能性相同。