有什么方法可以计算平均案例

时间:2018-02-21 13:42:42

标签: data-structures time-complexity big-o


背景:
对于我的数据结构和算法,我正在研究Big O符号。到目前为止,我了解如何锻炼时间复杂度,最佳和最差情况。然而,平均情况只是令人困惑。老师只是向我们扔了一些我不懂的方程式。而且他不愿意详细解释它们。
问题:
那么请大家,计算这个的最佳方法是什么?是否有一个方程式可以计算这个或者它是否因算法而异?
你计算这个步骤有哪些步骤?
我们举一个插入排序算法的例子?
研究:
我查看了youtube和stackoverflow的答案。但他们都使用不同的方程式。
任何帮助都会很棒 谢谢

1 个答案:

答案 0 :(得分:1)

如评论中所述,您必须查看算法的平均输入(在这种情况下意味着随机)。考虑它的一个好方法是尝试跟踪如果输入是平均值,算法会做什么。

有关插入排序的示例:

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

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