我更喜欢尽可能少的正式定义和简单的数学。


当前回答

算法例(Java):

public boolean search(/* for */Integer K,/* in */List</* of */Integer> L)
{
    for(/* each */Integer i:/* in */L)
    {
        if(i == K)
        {
            return true;
        }
    }
    
    return false;
}

算法描述:

这个算法搜索一个列表,项目按项目,寻找一个密钥,在列表中的每个项目,如果它是密钥,然后返回真实,如果循环没有找到密钥,返回虚假。

Big-O 评分代表了复杂性(时间、空间等)的顶端。

要找到 The Big-O on Time Complexity:

计算时间(考虑到输入大小)最糟糕的案例需要: 最糟糕的案例: 关键不在列表中 时间(Worst-Case) = 4n+1 时间: O(4n+1) = O(n) <unk>在大O,恒例被忽视 O(n) ~ 线性

还有大欧米加,它代表了最佳案例的复杂性:

最佳案例:关键是第一个项目 时间(最佳案例) = 4 时间: Ω(4) = O(1) ~ Instant\Constant

其他回答

大O只是一种方式来“表达”自己,以一种常见的方式,“运行我的代码需要多少时间/空间?”

因此,你可能明白“n2”是什么意思,但要更具体,玩你的想法,你有一个简单的,最简单的分类算法;泡沫分类。

我的名单

比较 1 和 6 是最大的? Ok 6 是正确的位置,前进! 比较 6 和 3, oh, 3 是更少的! 让我们移动, Ok 列表改变了,我们需要从现在开始!

為每個項目,你再看所有項目一次,為比較,這也是“n”,所以為每個項目,你看“n”時刻意味著n*n = n2

我希望这就像你想要的那样简单。

EDIT:快注,这几乎是令人困惑的Big O评分(这是一个上线)与Theta评分(这是一个上线和下线)。在我的经验中,这实际上是非学术设置讨论的典型。

在一个句子中:随着你的工作的规模上升,完成工作需要多长时间?

“大O”评分的一个重要方面是,它不会说哪个算法会更快到一个特定的尺寸。 采取一个字符串(字符串,整体值)对一系列对(字符串,整体值)。 是否更快地找到字符串中的关键或字符串中的元素,基于字符串? (即字符串, “找到字符串部分与特定的关键相匹配的第一个元素” ) 字符串是基因。

算法例(Java):

public boolean search(/* for */Integer K,/* in */List</* of */Integer> L)
{
    for(/* each */Integer i:/* in */L)
    {
        if(i == K)
        {
            return true;
        }
    }
    
    return false;
}

算法描述:

这个算法搜索一个列表,项目按项目,寻找一个密钥,在列表中的每个项目,如果它是密钥,然后返回真实,如果循环没有找到密钥,返回虚假。

Big-O 评分代表了复杂性(时间、空间等)的顶端。

要找到 The Big-O on Time Complexity:

计算时间(考虑到输入大小)最糟糕的案例需要: 最糟糕的案例: 关键不在列表中 时间(Worst-Case) = 4n+1 时间: O(4n+1) = O(n) <unk>在大O,恒例被忽视 O(n) ~ 线性

还有大欧米加,它代表了最佳案例的复杂性:

最佳案例:关键是第一个项目 时间(最佳案例) = 4 时间: Ω(4) = O(1) ~ Instant\Constant

我最喜欢的英语词来描述这个概念是你为一个任务付出的代价,因为它越来越大。

既然这些常态在长期内并不重要,这种语言允许我们讨论超越我们正在运行的基础设施之外的任务,所以工厂可以到任何地方,工人可以到任何地方 - 它都是可怕的,但是工厂的大小和工人的数量是我们在长期内可以改变的事情,因为您的输入和输出增长。

由于时间和空间是经济量(即它们是有限的)在这里,它们都可以用这个语言表达。

技术笔记: 时间复杂性的一些例子 - O(n) 一般意味着如果一个问题是“n”的大小,我至少必须看到一切。 O(log n) 一般意味着我减半问题的大小,检查并重复,直到任务完成。

定义 : 大 O 评级是指如果数据输入增加,算法性能将如何表现的评级。

当我们谈论算法时,有3个重要柱子 算法输入、输出和处理 大 O 是象征性的评分,如果数据输入增加到什么速度,算法处理的性能将有所不同。

例如,请参见下面的函数“函数1”,该函数收集并在第一个记录中进行处理,现在该函数的性能将是相同的,无论您放置1000、10万或100000记录。

void Function1(List<string> data)
{
string str = data[0];
}

void Function2(List<string> data)
        {
            foreach(string str in data)
            {
                if (str == "shiv")
                {
                    return;
                }
            }
        }

因此,通过查看Big O评级,我们分类算法的好和坏区域。

此分類上一篇

https://www.youtube.com/watch?v=k6kxtzICG_g