Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 指数算法(指数非常小)比一般对数算法快吗?_Algorithm_Performance_Time Complexity - Fatal编程技术网

Algorithm 指数算法(指数非常小)比一般对数算法快吗?

Algorithm 指数算法(指数非常小)比一般对数算法快吗?,algorithm,performance,time-complexity,Algorithm,Performance,Time Complexity,假设某个运行速度为n^0.5 vs log n。的确,这显然不是很快(logn比它快)。但是,n^0.1或n^0.01呢?还是采用对数算法更好吗 我想,指数应该有多小才能转换成指数?指数并不重要。重要的是n 无论指数时间复杂度算法的指数有多小,如果n足够大,对数时间复杂度算法都会超过它 因此,这完全取决于您的n。替换一个特定的n,计算指数时间复杂度算法与对数时间复杂度算法的实际运行时成本,看看谁是赢家。你说的是大O,它指的是算法如何根据输入进行缩放,与绝对时间意义上的速度相反。在某些数据集上,大

假设某个运行速度为n^0.5 vs log n。的确,这显然不是很快(logn比它快)。但是,n^0.1或n^0.01呢?还是采用对数算法更好吗


我想,指数应该有多小才能转换成指数?

指数并不重要。重要的是
n

无论指数时间复杂度算法的指数有多小,如果
n
足够大,对数时间复杂度算法都会超过它


因此,这完全取决于您的
n
。替换一个特定的
n
,计算指数时间复杂度算法与对数时间复杂度算法的实际运行时成本,看看谁是赢家。

你说的是大O,它指的是算法如何根据输入进行缩放,与绝对时间意义上的速度相反。在某些数据集上,大O值越差的算法在绝对时间上的性能越好

假设有两个算法,一个是O(n^0.1),另一个是log(n)


虽然O(n^0.1)更糟糕,但直到n大约等于10000000000,它才会被log(n)超越。

渐近复杂性可能有点误导

与logn成比例的函数将小于与n0.01成比例的函数。一旦n变得足够大

但是对于较小的n值,所有的赌注都是无效的,因为比例常数可以发挥很大的作用。例如,当已知n较小时,具有O(n2)最坏情况复杂度的排序算法通常比具有O(nlogn)最坏情况复杂度的排序算法更好,因为后者通常更复杂,因此开销更大。只有当n变大时,后者才开始胜出


一般来说,性能决策应该基于分析和测试,而不是纯粹的数学论证,即理论上什么应该更快。

一般来说,给定两个次线性算法,您应该选择具有最小常数乘数的算法。由于复杂性理论无法帮助您实现这一点,因此您必须尽可能高效地编写程序并对其进行基准测试。这种必要性可能会导致您选择更易于高效编码的算法,这也可能是一个合理的标准


这当然不是超线性函数的情况,因为大n会夸大成本。但即便如此,你可能会发现一种算法,其理论效率更高,但它需要非常大的n才能优于更简单的算法,可能如此之大以至于永远不会尝试。

一种算法可能有一个sqrt(n)运行时间,但指数更低的算法会是什么样子?如果可以找到对数方法,它显然是替代对数方法的候选者,而这正是大O分析不再有用的地方——它取决于N和每个操作的其他成本,再加上实现难度。

首先,指数复杂性的形式是,其中N是指数。下面的复杂性通常称为次线性

是的,从某个有限n₀ 从那时起,一般对数总是比任何对数都好。然而,正如你所观察到的,这个n₀ 对于较小的k值,结果是相当大的。因此,如果你期望你的n值相当小,对数的有效载荷可能比幂更坏,但这里我们从理论转向实践

要了解为什么对数应该更好,让我们先看看一些曲线图:

对于k的所有值,该曲线看起来基本相同,但对于较小的指数,可能会穿过n轴。如果其值大于0,则对数较小,因此更好。第二次穿过轴的点(不在此图中)是对数成为此后所有n值的最佳选择

注意最小值-如果最小值存在且小于0,我们可以假设函数最终将第二次穿过轴,并支持对数。让我们用导数求最小值

从函数的性质来看,这是最小值,并且始终存在。因此,功能正从这一点上升


对于k=0.1,结果是1000000000,这不是函数第二次穿过n轴的地方,只有最小值。因此,在实践中,使用指数比使用对数好,至少在这一点上是这样(当然,除非你有一些常数)。

是的,但n^0.1不是指数——它是次线性的。@PaulHankin,这是一个很好的观点。那么,我想OP的意思是
n^1.1
n^1.01
?他们可能只是对术语感到困惑,我不知道他的意思。n^1.1也不是指数型的——它介于线性和二次型之间。指数看起来像1.1^n,n是指数。这里的指数是什么意思?当我们提到指数复杂性时,它的形式是c^n,比如1.1^n而不是n^c,比如n^1.1n^0.5是多项式时间,而不是指数时间。