Big o T(sqrtn)和#x2B;5.

Big o T(sqrtn)和#x2B;5.,big-o,computer-science,Big O,Computer Science,我面临一个问题:T(N)=T(sqrt(N))+5。 我想知道我能用这种方法解决它吗 T(N)=O(sqrt(N))+O(5) 因为O(5)=O(1)是一个常数,我们可以忽略它 所以T(N)的大O表示法是O(N^(1/2)) 或者我可以说它的符号是O(N),因为O(N)和O(sqrt(N))之间没有很大的区别 谢谢大家! 编辑:我在原始答案中犯了一个错误,假设n是2的幂,并将重复次数减少到1,2,4。。。n、 这是错误的。我为这一误导道歉。以下是最新的答案 从 T(n)=T(sqrt(n))+5

我面临一个问题:T(N)=T(sqrt(N))+5。

我想知道我能用这种方法解决它吗

T(N)=O(sqrt(N))+O(5)

因为O(5)=O(1)是一个常数,我们可以忽略它

所以T(N)的大O表示法是O(N^(1/2))

或者我可以说它的符号是O(N),因为O(N)和O(sqrt(N))之间没有很大的区别


谢谢大家!

编辑:我在原始答案中犯了一个错误,假设n是2的幂,并将重复次数减少到1,2,4。。。n、 这是错误的。我为这一误导道歉。以下是最新的答案

T(n)=T(sqrt(n))+5

我们也可以这样写:

T(n)=T(n^(1/2))+5

然后通过重复:

T(n^(1/2))=T(n^(1/4))+5

T(n^(1/4))=T(n^(1/8))+5

T(n^(2^-m))=T(n^(2^-(m+1))+5

这并不表示我们可以停下来的常数,因此我们需要替换n

尝试:

n=2^(2^)米

我们在哪里

m=对数n

从m=0开始,即n=2

然后我们有:

T(n)=T(2)+5+5+…+5

有多少个5s? 我们这样计算:

2^(2^0),2^(2^1),2^(2^2),…2^(2^m)

所以有m5s,其中m=logn

T(n)=T(2)+5对数n

就是

T(n)=O(对数n)


编辑:我在原始答案中犯了一个错误,假设n是2的幂,并将重复次数减少到1,2,4,…n,这是错误的。我为误导道歉。这是更新的答案

T(n)=T(sqrt(n))+5

我们也可以这样写:

T(n)=T(n^(1/2))+5

然后通过重复:

T(n^(1/2))=T(n^(1/4))+5

T(n^(1/4))=T(n^(1/8))+5

T(n^(2^-m))=T(n^(2^-(m+1))+5

这并不表示我们可以停下来的常数,因此我们需要替换n

尝试:

n=2^(2^)米

我们在哪里

m=对数n

从m=0开始,即n=2

然后我们有:

T(n)=T(2)+5+5+…+5

有多少个5s? 我们这样计算:

2^(2^0),2^(2^1),2^(2^2),…2^(2^m)

所以有m5s,其中m=logn

T(n)=T(2)+5对数n

就是

T(n)=O(对数n)

(为了整洁,让我们用一个常量
c
)替换5)

多次将此函数替换为自身,我们可以发现一种模式:

什么时候停止迭代?当满足停止条件时。将其视为
n=2
(而不是通常情况下的1,因为参数是渐近的
n=1
):

因此,该功能的最终成本为:

请注意,常数
c
(=5)在渐近复杂性方面并不重要。(而且结果不仅仅是
logn
,而是
logn


编辑:如果要选择不同的停止条件
n=a,a>1
,则上述步骤将变为:

它与原始结果仅相差一个常数。

(为了整洁起见,让我们用常数
c
替换5)

多次将此函数替换为自身,我们可以发现一种模式:

什么时候停止迭代?当满足停止条件时。将其视为
n=2
(而不是通常情况下的1,因为参数是渐近的
n=1
):

因此,该功能的最终成本为:

请注意,常数
c
(=5)在渐近复杂性方面并不重要。(而且结果不仅仅是
logn
,而是
logn


编辑:如果要选择不同的停止条件
n=a,a>1
,则上述步骤将变为:


它与原始结果只有一个常数不同。

我被一个点弄糊涂了。如何得到T(2)=T(1)+5?因为T(1)=T(1)+5和T(2)=T(2^(1/2))+5,似乎T(2)不等于T(1)+5。@GarethLam是的……你是对的。从技术上讲,这并不清楚。但你可以忽略这一点……没有人会问你T是什么(1) T(2)是(这里T(1)甚至不严格存在…),重点是,我们可以把T(1),T(2)或任何T(c),其中c是一个常数,作为一个常数,在渐近条件下,是O(1)请记住,在大O表示法中,我们不会像解方程那样计算精确的值,相反,例如,我们使用
logn
而不是
logu 2^n
logu 10^n
。重要的是顺序。好吧,我认为这部分对我来说是可以的。但是计数部分呢。为什么使用logn而不是n?这种分析是不正确的t、 递归应该解决θ(logn)。@GarethLam为这个错误感到抱歉。请参阅我更新的答案。我对一点感到困惑。如何获得t(2)=t(1)+5?由于t(1)=t(1)+5和t(2)=t(2^(1/2))+5,似乎t(2)不等于t(1)+5.@GarethLam是的……你是对的。从技术上讲,这并不清楚。但在这里你可以忽略这一点……没有人会问你T(1)和T(2)是什么(这里T(1)甚至不严格存在…)。重点是,我们可以把T(1),T(2)或任何T(c),其中c是一个常数,作为一个常数,在渐近条件下,它是O(1)请记住,在大O表示法中,我们不会像解方程那样计算精确的值,相反,例如,我们使用
logn
而不是
logu 2^n
logu 10^n
。重要的是顺序。好吧,我认为这部分对我来说是可以的。但是计数部分呢。为什么使用logn而不是n?这种分析是不正确的t、 循环应解为θ(log n)。@GarethLam对错误表示抱歉。请参阅我的更新答案。平方根收缩是复杂性的标志。平方根收缩是复杂性的标志。我想知道如何