Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm LogN的值是多少_Algorithm_Sorting_Big O - Fatal编程技术网

Algorithm LogN的值是多少

Algorithm LogN的值是多少,algorithm,sorting,big-o,Algorithm,Sorting,Big O,所以我一直在学习大O符号(Noob),大多数东西对我来说都像是外星语言。现在我了解了基本的log,比如base2的log16,是2的幂等于16。现在对于二进制搜索来说,大O(logN)对我来说毫无意义,logN的值是多少?这里的基数是多少?我在网上搜索过,问题是每个人都在数学上解释了这个问题,我没听清楚我的数学不好。有人能用基本的英语而不是像指数一样的外来语来解释这一点吗。我知道二进制搜索是如何工作的 第二个问题:[我甚至不知道f=Ω(g)这个符号是什么意思]有人能用简单的英语给我解释一下这里需

所以我一直在学习大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)2


(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)