If statement IF如何影响复杂性?
假设我们有一个由1.000.000个元素组成的数组,我们通过检查所有元素来检查一些简单的东西,例如第一个字符是否是“A”。从我(很少)的理解来看,复杂度将是If statement IF如何影响复杂性?,if-statement,complexity-theory,big-o,If Statement,Complexity Theory,Big O,假设我们有一个由1.000.000个元素组成的数组,我们通过检查所有元素来检查一些简单的东西,例如第一个字符是否是“A”。从我(很少)的理解来看,复杂度将是O(n),并且它将花费一些X的时间。如果我添加另一个If(而不是elseif)来检查,比如说,如果最后一个字符是“G”,它将如何改变复杂性?它的复杂性和时间会加倍吗?像O(2n)和2X 我希望避免考虑不同命令必须进行的计算数量。例如,我知道Len()比简单的字符比较需要更多的计算才能得出结果,但假设IFs中使用的命令(几乎)具有相同的复杂性。
O(n)
,并且它将花费一些X的时间。如果我添加另一个If(而不是elseif)来检查,比如说,如果最后一个字符是“G”,它将如何改变复杂性?它的复杂性和时间会加倍吗?像O(2n)
和2X
我希望避免考虑不同命令必须进行的计算数量。例如,我知道Len()比简单的字符比较需要更多的计算才能得出结果,但假设IFs中使用的命令(几乎)具有相同的复杂性。O(2n)=O(n)
。广义化,O(kn)=O(n)
,其中k
为常数。当然,使用两个IFs可能需要两倍的时间,但执行时间仍然是输入大小的线性函数
编辑:通过示例说明了不太数学化的big-O表示法渐近复杂性(这是big-O使用的)不依赖于常数因子,更具体地说,您可以在函数中添加/删除任何常数因子,它将保持相等(即O(2n)=O(n))
假设if语句需要固定的时间,它只会给复杂性增加一个固定的因素
“恒定时间”是指:
- 给定元素的if语句所用的时间不取决于数组中有多少其他元素
- 基本上,如果它不调用一个函数,该函数以某种方式或类似的方式查看数组中的其他元素
- 任何调用if语句的非函数都可以(除非它包含通过数组的语句,这是某些语言允许的)
补充说明:当不忽略常量因子时,问题是-什么被归类为工作单元?这里没有标准的定义。一种方法是使用耗时最长的运算,但确定这一点可能并不总是直截了当的,也不总是特别准确,也无法对不同算法的复杂性进行一般性比较。这与我今天发布的一个问题有关 在您的示例中,这取决于是否可以从第一个元素跳到最后一个元素,如果不能,则还取决于每个条目的平均长度 如果在遍历数组时,为了计算两条If语句,您必须读取每个完整条目,那么您的顺序将是O(1000000xn),其中N是每个条目的平均长度。如果N是可变的,那么它将影响顺序。例如标准乘法,我们对长度为Log(N)的条目执行Log(N)加法,因此顺序为O(Log^2(N)),或者如果您更喜欢O((Log(N))^2) 另一方面,如果您只需检查第一个和最后一个字符,则N=2且为常数,因此可以忽略
这是一个重要的一点,你必须小心,因为你如何决定你的乘法器可以忽略。例如,假设我们正在对一个日志(N/100)编号进行日志(N)添加。现在,仅仅因为Log(N/100)是较小的术语并不意味着我们可以忽略它。如果乘数是可变的,则不能忽略它。关于时间复杂性的一些关键点: