Algorithm LogN的值是多少
所以我一直在学习大O符号(Noob),大多数东西对我来说都像是外星语言。现在我了解了基本的log,比如base2的log16,是2的幂等于16。现在对于二进制搜索来说,大O(logN)对我来说毫无意义,logN的值是多少?这里的基数是多少?我在网上搜索过,问题是每个人都在数学上解释了这个问题,我没听清楚我的数学不好。有人能用基本的英语而不是像指数一样的外来语来解释这一点吗。我知道二进制搜索是如何工作的 第二个问题:[我甚至不知道f=Ω(g)这个符号是什么意思]有人能用简单的英语给我解释一下这里需要什么吗,我不想要答案,只是这意味着什么。 问题: 在下列每种情况下,指出f=O(g)或f=Ω(g),或两者兼而有之。(在这种情况下,f=Θ(g)) (a) n-100…………n-200 (b) 100n+logn…….n+(logn)2Algorithm LogN的值是多少,algorithm,sorting,big-o,Algorithm,Sorting,Big O,所以我一直在学习大O符号(Noob),大多数东西对我来说都像是外星语言。现在我了解了基本的log,比如base2的log16,是2的幂等于16。现在对于二进制搜索来说,大O(logN)对我来说毫无意义,logN的值是多少?这里的基数是多少?我在网上搜索过,问题是每个人都在数学上解释了这个问题,我没听清楚我的数学不好。有人能用基本的英语而不是像指数一样的外来语来解释这一点吗。我知道二进制搜索是如何工作的 第二个问题:[我甚至不知道f=Ω(g)这个符号是什么意思]有人能用简单的英语给我解释一下这里需
(c) log2n。。。。。。。。。。。。。。。log3n首先,让我们看一下符号。我从问题中假设 O(f)是上界, Ω(f)是下限,并且 Θ(f)两者都是 对于O(log(N)),在这种情况下,通常不给出基数,因为不管基数是多少,log(N)的一般形式都是已知的。例如:
(来源:) 因此,如果您已经使用过二进制搜索算法(如果没有,我建议您这样做),您应该会发现最坏的情况(上界)是log_2(N)。因此,给定N个项,在最坏的情况下需要“log_2(N)计算”才能找到该项 关于你的第二个问题 您只是比较f和g的计算运行时间
f=O(g)
当f是g的上界时,即f的计算时间肯定比g长。或者
f=Ω(g)
当f是g的下界时,即g的计算时间肯定比f长。最后,
f=Θ(g)
当f是g的上下限时,即运行时间相同
您需要对每个问题的两个函数进行比较,并确定哪一个需要更长的计算时间。正如米奇提到的,你可以检查这个问题的答案
编辑:不小心链接了e^x而不是log(x)更新:我刚刚意识到我学习了麻省理工学院视频中的算法。这是你的电话号码。尽可能地继续下一节课
显然,如果不确定n是什么以及我们使用的日志的基数,日志(n)就没有价值。经常提到log(n)的目的是帮助人们理解特定算法或代码段的增长率。这只是为了帮助人们正确看待事物。要构建您的视角,请参见下面的比较:
1
上面的一行表示,在数字行上的n
的某个值之后,上述写函数的增长率按照此处提到的顺序。通过这种方式,决策者可以决定在解决问题时采用哪种方法(学生可以通过算法设计和分析考试)
说到你的问题,当书上说‘二进制搜索的运行时间是Log(n)’时,基本上他们的意思是,如果你有n个元素,二进制搜索的运行时间将与Log(n)成比例,如果你有17n个元素,那么你可以在与Log(17n)成比例的持续时间内从算法中得到答案。在这种情况下,Log函数的基是2,因为在二进制搜索中,我们正好有
没有指定日志基的原因是因为它实际上完全不相关。您可以通过三个步骤说服自己:
首先,回想一下log_2(x)=log_10(x)/log_10(2)。还记得log_10(2)是一个常数,我们称之为k2,所以实际上,log_2(x)*k2=log_10(x)
其次,回想一下,这并不是Base2的日志所独有的。转换常数各不相同,但所有对数函数都通过乘法常数相互关联
(如果你理解日志函数背后的数学原理,你可以向自己证明这一点,或者你可以在电子表格上快速计算出来——有一列log_2(x)和一列log_3(x)并将它们除以。)
最后,请记住,在大Oh符号中,常量基本上是不相关的。试图在O(log_2(N))和O(log_3(N))之间进行区分就像试图在O(N)和O(2N)之间进行区分一样。这是一个不重要的区别,因为log_2和log_3通过一个常数关联
老实说,日志的基础并不重要 “现在对于二进制搜索来说,大O(logN)对我来说毫无意义,logN的值是多少?这里的基数是多少?”:基数在大O符号中是不相关的。有很多很好的答案,所以,…在大O表示法中,我认为复杂性O(logn)是一个与问题中的位数成比例的问题。因此,9999级的问题的难度是99级问题的两倍。如果您必须在没有提示的情况下猜测0到99之间的数字,那么查找该数字就是O(N)。对数字0到9999进行同样的操作显然要困难100倍。现在,如果您有“更高/更低”的提示,这将使问题成为O(logn)。在该场景中,查找0到9999之间的数字的难度仅为查找0到9999之间的数字的两倍。忽略日志的原因是它们都是彼此的常量倍数(在大O表示法中,常量倍数被忽略)。查看日志的“基础更改”公式。一般来说,log_a(x)==log_b(x)/log_b(a)==log_10(x)/log_10(a)==ln(x)/ln(a)
“我的数学不好。”然后学习数学。如果你想理解计算机编程,你需要很好地掌握基础数学。高s
f(n) g(n)