Time complexity 如何计算算法的时间复杂度O(n)?

Time complexity 如何计算算法的时间复杂度O(n)?,time-complexity,Time Complexity,我所做的: 我测量了处理100、1000、10000、100000、1000000个项目所花费的时间。 此处的测量值: . 然后我假设O(n)与n成比例增加,并计算了关于O(n)的剩余算法 有处理100、1000、10000、100000、1000000个项目的时间度量,我们现在如何将算法归因于O(1)、O(logn)、O(n)、O(n logn)或O(n^2)?让我们将n定义为可能的数据输入之一。一个算法可以有不同的大O值,这取决于您所引用的输入,但通常只有一个大输入是您关心的。如果没有所讨

我所做的: 我测量了处理100、1000、10000、100000、1000000个项目所花费的时间。 此处的测量值: .

然后我假设O(n)与n成比例增加,并计算了关于O(n)的剩余算法


有处理100、1000、10000、100000、1000000个项目的时间度量,我们现在如何将算法归因于O(1)、O(logn)、O(n)、O(n logn)或O(n^2)?

让我们将n定义为可能的数据输入之一。一个算法可以有不同的大O值,这取决于您所引用的输入,但通常只有一个大输入是您关心的。如果没有所讨论的算法,你只能猜测。但是,有一些指导原则可以帮助您确定它是哪一个

一般规则:

O(1)-无论数据大小,程序的速度几乎不会改变。为了实现这一点,一个程序必须完全没有对相关数据进行操作的循环

O(logn)当N急剧增加时,程序会以对数曲线的形式略微减慢。为了得到这个结果,循环必须只通过数据的一小部分。(例如,二进制搜索)

O(N)-程序的速度与数据输入的大小成正比。如果对每个数据单元执行一个操作,就会得到这个结果。不能有任何类型的嵌套循环(作用于数据)

O(N log N)-较大的输入会显著降低程序的速度。如果在循环中嵌套了一个O(logN)操作,否则该操作将是O(N),则会发生这种情况。例如,有一个循环对每个数据单元进行二进制搜索

O(N^2)-该程序将减速为具有较大输入的爬网,并最终在具有足够大数据的情况下暂停。当您有嵌套循环时会发生这种情况。同上,但这次嵌套循环是O(N)而不是O(logn)

所以,试着把循环操作想象成O(N)或O(logn)。然后,无论何时有嵌套,将它们相乘。如果循环不是嵌套的,则它们不会像这样相乘。因此,两个彼此分离的环只是O(2N)而不是O(N^2)

还要记住,引擎盖下可能有环,所以你也应该考虑它们。例如,如果您在Java中执行类似Arrays.sort(X)的操作,那么这将是一个O(nlogn)操作。因此,如果出于某种原因,你的程序在一个循环中出现了这种情况,那么你的程序将比你想象的慢得多


希望这能回答您的问题。

让我们将N定义为可能的数据输入之一。一个算法可以有不同的大O值,这取决于您所引用的输入,但通常只有一个大输入是您关心的。如果没有所讨论的算法,你只能猜测。但是,有一些指导原则可以帮助您确定它是哪一个

一般规则:

O(1)-无论数据大小,程序的速度几乎不会改变。为了实现这一点,一个程序必须完全没有对相关数据进行操作的循环

O(logn)当N急剧增加时,程序会以对数曲线的形式略微减慢。为了得到这个结果,循环必须只通过数据的一小部分。(例如,二进制搜索)

O(N)-程序的速度与数据输入的大小成正比。如果对每个数据单元执行一个操作,就会得到这个结果。不能有任何类型的嵌套循环(作用于数据)

O(N log N)-较大的输入会显著降低程序的速度。如果在循环中嵌套了一个O(logN)操作,否则该操作将是O(N),则会发生这种情况。例如,有一个循环对每个数据单元进行二进制搜索

O(N^2)-该程序将减速为具有较大输入的爬网,并最终在具有足够大数据的情况下暂停。当您有嵌套循环时会发生这种情况。同上,但这次嵌套循环是O(N)而不是O(logn)

所以,试着把循环操作想象成O(N)或O(logn)。然后,无论何时有嵌套,将它们相乘。如果循环不是嵌套的,则它们不会像这样相乘。因此,两个彼此分离的环只是O(2N)而不是O(N^2)

还要记住,引擎盖下可能有环,所以你也应该考虑它们。例如,如果您在Java中执行类似Arrays.sort(X)的操作,那么这将是一个O(nlogn)操作。因此,如果出于某种原因,你的程序在一个循环中出现了这种情况,那么你的程序将比你想象的慢得多


希望这能回答你的问题。

我是不是遗漏了什么?请出示有问题的算法。如果算法未知,那么您只能猜测,您将得到无限多的候选算法,这取决于您进行了多少次测量。@RmbRT,我比较了5种算法并分析了它们的速度。这些算法占用了几个类中的几个文件——这是太多的代码,无法上传到这里。我带来了源代码的链接:我问了几个站点计算O(n)的问题,但实际上似乎没有人能够计算。每个人都有一个主观的不公正的评价,没有考虑到所有的因素。我在这里遗漏了什么吗?请出示有问题的算法。如果算法未知,那么您只能猜测,您将得到无限多的候选算法,这取决于您进行了多少次测量。@RmbRT,我比较了5种算法并分析了它们的速度。这些算法占用了几个类中的几个文件——这是太多的代码,无法上传到这里。我带来了源代码的链接:我问了几个站点计算O(n)的问题,但实际上似乎没有人能够计算。每个人都只有一个主观的、不合理的评价,而这一点确实如此