大O表示法-尽可能轻松地解释

2021-01-17 01:58:55

数据结构和算法是关于有效解决问题的。一个糟糕的程序员不能有效地解决他们的问题,而一个真正糟糕的程序员甚至都不知道为什么他们的解决方案效率低下。因此,问题是,您如何对算法的效率进行排名?

该问题的简单答案是Big O符号。这是如何运作的?让我解释!

假设您编写了一个遍历列表中每个数字并将其添加到total_sum变量的函数。

如果您考虑添加"为1运算,然后在10个数字的列表上运行此函数将花费10个操作,在20个数字的列表上运行它将花费20个运算,类似地,在n个数字的列表上运行它将花费列表(n)个运算的长度。

现在假设您编写了另一个函数,该函数将返回列表中的第一个数字。

现在,无论此列表有多大,此功能都不会花费一个以上的操作。显然,这两种算法在输入大小的增长与执行的操作的增长之间具有不同的时间复杂度或关系。我们使用大O表示法传达这些时间复杂性。

大O表示法是一种数学表示法,用于根据算法的运行时间或空间要求随输入大小的增长如何增长对算法进行分类。

我们的第一个算法在O(n)中运行,这意味着其运算与输入大小呈线性关系增长-在这种情况下,即列表中的数字数量。我们的第二种算法完全不依赖于输入大小-因此它在恒定时间内运行。让我们看一下一个程序在输入大小为n = 5 vs n = 50的情况下必须在函数中执行多少个操作。

输入较小时可能并不重要,但是随着输入大小的增加,此差距会变得非常明显。

如果n为10000,则在log(n)中运行的函数仅需进行14次运算,而在n中运行的函数将!会使您的计算机着火!

对于大O表示法,我们舍弃了常数,因此O(10.n)和O(n / 10)都等于O(n),因为图形仍然是线性的。

大O表示法还用于空间复杂性,其工作方式相同-算法随着n的增长使用多少空间,或者输入大小的增长与所需空间的增长之间的关系。

嗯是的!从我的角度来讲,这是对“大O符号”的最简单的解释,希望您喜欢阅读。如果愿意,您可以订阅我的时事通讯,并且永远不会错过我即将发表的文章。另外,如果您发现此信息有用,请在不同的社交媒体平台上与您的朋友分享。如果您有任何建议或反馈,请随时在评论中让我知道。