问题描述
由于是完全自学的(和StackOverflow),我是Big-O符号的新手,在以后的一些采访中需要更好地理解它。
我的问题是,当复杂度小于N
时,您如何在Big-O中进行注释?示例是一个质数计算器,它检查直到N/2
的每个整数的余数,因为如果发现除数不小于一半,则可以确定上半部将没有除数。
那么O(N/2)
还是N
成为N = N/2
的符号?
def primecheck(num):
i = 2
while i <= ( num // 2 ):
if not (num % i):
return False
i += 1
return True
解决方法
Big-O标记旨在忽略常量因子。只要k
是一个常数(即与N
无关的东西,例如1 / 2、1 / 3、1、2、3等),那么O(kN)
的含义就完全是与O(N)
相同。
Big-O
表示法旨在表达仅变量的复杂性,在这种情况下,所有常量都将被忽略,因此n/2
的表达方式与4n
相同。但是素数检查是一个问题,只需要检查最多sqrt(n)
,因此问题仅是O(sqrt(n))