首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本算法手册,需要澄清

问基本算法手册,需要澄清
EN

Stack Overflow用户
提问于 2015-06-24 03:57:24
回答 2查看 96关注 0票数 1
代码语言:javascript
复制
Integer: FindMedian(Integer: array[]) 
For i = 0 To array.Length - 1 
// Find the number of values greater than and less than array[i]. 

Integer: num_larger = 0 
Integer: num_smaller = 0 

For j = 0 To array.Length - 1
    If (array[j] < array[i]) 
        Then num_smaller = num_smaller + 1 
    If (array[j] > array[i]) 
        Then num_larger = num_larger + 1 Next j 
    If (num_smaller = num_larger) 
        Then Return array[i] 
    End If 
Next i 
End FindMedian

关于algoritm的复杂性,作者说:

如果数组包含N个值,则外部For i循环执行N次。对于这些迭代中的每一个,内部For j循环执行N次。这意味着内循环内的步骤执行N×N=N次,使算法的运行时间为O(N )。

我认为复杂性应该是O(N^2)。我说错了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-24 04:20:07

当然,顺序是o(N^2),因为对于每个外部循环,您的内环将运行n个时间,因此有n个外循环。时间复杂度为o(n^2)。

你能把找到它的页码和书的链接分享一下吗?

票数 2
EN

Stack Overflow用户

发布于 2015-06-24 04:09:44

是的,我想是的。

来自https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/

O(N^2)表示其性能与输入数据集大小的平方成正比的算法。这在涉及对数据集的嵌套迭代的算法中很常见。更深层次的嵌套迭代将导致O(N^3)、O(N^4)等。

代码语言:javascript
复制
bool ContainsDuplicates(IList<string> elements)
{
    for (var outer = 0; outer < elements.Count; outer++)
    {
        for (var inner = 0; inner < elements.Count; inner++)
        {
            // Don't compare with self
            if (outer == inner) continue;

            if (elements[outer] == elements[inner]) return true;
        }
    }

    return false;
}

这正是你想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31017350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档