我很难找到平均案例复杂性,只是拉随机问题......就像。
对于标记序列搜索,如果概率为0 <= p <= 1,则找到平均情况。
我得到的最坏情况是O(n + 1),因为数组中会有n个元素加上你在最后添加的键的额外元素。如果您立即找到它,最好的情况就是O(1)。
我真的不想要答案......但更多的是......如果我只想要答案,我想我只是看一个解决方案手册。
答案 0 :(得分:0)
你说“平均案例复杂性”需要仔细定义算法和可能的输入集合。
搜索线性整数列表所需的比较次数提供了一个示例。
如果输入搜索键可以是任意整数,那么平均结果是将搜索整个列表(需要n + 1次比较才能找到哨兵)因为有无限多个整数且只有有限多个元素阵列。只有有限数量的输入需要少于n + 1个比较,但无限多个将导致n + 1。
另一方面,如果分析是从数组中的元素(统一)中随机选择搜索键(并且这些元素不包含重复)时的平均比较次数,那么可能结果的平均值将是当搜索项目在列表中第一个时的比较次数加上列表中第二次的数字等等,直到第n个项目,全部除以结果的数量,即n。换句话说,
(1 + 2 + ... n) / n = n(n+1)/(2n) = (n + 1) / 2
这是一个健全性检查:设n = 1。然后公式表示在1元素列表中找到元素的平均比较数是1。这显然是正确的。
最后要注意的是,你提出问题的方式表明你应该研究big-O的定义。 O(n)与O(n + 1)相同。大O总是表达任何测量值的上限。表示平均值的上限通常是不合适的,因为平均案例分析通常也提供下限。上面的(n + 1)/ 2比较最好用平均情况下的\ Theta(n)表示。