这个问题早解决了一些可能导致算法有O(log n)的复杂的因素。
什么会导致一个算法有时间复杂度为O(log日志N)?
这个问题早解决了一些可能导致算法有O(log n)的复杂的因素。
什么会导致一个算法有时间复杂度为O(log日志N)?
为O(log log n)的条款可以在各种不同的地方出现,但通常有将在此运行时到达两个主要途径。
正如答案的链接的问题提到的,对于算法的常用方法有时间复杂度为O(log n)是该算法通过反复的工作,即每次迭代的一些常数因子削减输入的大小了。 如果是这种情况,算法必须O(log n)的迭代后终止,因为这样做Ø后用一常数(log n)的部门,该算法必须缩小问题的规模下降到0或1。这是为什么,例如,二进制搜索具有复杂度为O(log n)的。
有趣的是,缩向下其产生的型O的运行时的问题的大小的类似的方式(对数log n)的。 而是将输入的一半在每一层的,如果我们采取大小的平方根在每个层会发生什么?
例如,让我们数65,536。 多少次,我们有2个,直到我们得到下降到1分呢? 如果我们这样做,我们得到
此过程需要16个步骤,并且它也可以说65536 = 2 16。
但是,如果我们采取的平方根在每个层面上,我们得到
请注意,只需要四个步骤来获得一路下跌到2这是为什么? 好吧,让我们重写的两个大国而言,这顺序:
请注意,我们遵循序列2 16→2→8 2 4→2 2→1。 在每次迭代中,我们削减的两个半功率的指数。 这很有趣,因为这回连到我们已经知道 - 它下降到零之前,你只能除以2澳数k(日志K)倍。
因此,采取任何数量n,并将其写入为n = 2 k。 每次取n的平方根的时候,你减半,公式中的指数。 因此,只能有为O(log K)施加平方根ķ下降到1或更低(在这种情况下,n降低到2或更低)之前。 由于n = 2 K,这意味着K = 2登录n,以及因此采取平方根的数目为O(log K)= O(日志log n)的。 因此,如果有算法,通过反复地减少问题大小的子问题,它是原始问题的大小的平方根的作品,该算法将邻终止后(日志log n)的步骤。
一个真实世界的这个例子是面包车昂德博阿斯树 (VEB树)的数据结构。 甲VEB树为在范围0存储整数的专用数据结构... N - 1。它的工作原理如下:在树的根节点具有√N指针在它,分裂范围0 ... N - 1到√N铲斗各保持一个范围大致√N整数。 这些铲斗然后将每个内部细分为√(√N)桶,其中的每一个大致√保持(√N)的元件。 遍历树,你从根开始,确定哪个桶属于你,然后递归继续在适当的子树。 由于方式VEB树的结构,你可以在O确定(1)的时间下降到其子树,和O后因此(log日志N)的步骤,你将到达树的底部。 因此,在一个VEB树查找需要时间仅O(日志中记录N)。
又如Hopcroft-财富接近的一对点的算法 。 该算法试图2D点集合中找到最接近的两个点。 它的工作原理是建立桶的网格和点分配到这些分组。 如果在算法中的桶被发现,有超过√N点的某一点,该算法递归处理该桶。 因此,递归的最大深度是为O(log log n)的,并且使用它可以表明树中的每个层确实为O(n)工作递归树的分析。 因此,该算法的总运行时间为O(n日志log n)的。
有迹象表明,通过使用算法,如大小的O对象(log n)的二进制搜索实现为O(log log n)的运行时的一些其他算法。 例如, X-快速特里数据结构执行在高度为O(log U)的树以上的层的二进制搜索,所以对于一些它的操作的运行时都为O(log日志U)。 有关Y型快速特里得到了一些它的O(log日志U)运行时通过保持为O(log U)每个节点,允许那些树搜索到时间为O运行的平衡BSTS(日志记录U)。 在探戈树和相关multisplay树的数据结构,结束了一个O(日志log n)的任期在他们的分析,因为他们认为,含有O(log n)的项目每个树。
其他算法实现运行时间为O(log log n)的其他方式。 插值搜索已经预计运行时间为O(log log n)的找到一个排序的数组的数字,但分析是相当复杂的。 最终,分析的工作原理是示出了迭代次数等于数k使得n 2 -k 2≤,对于哪些日志日志n是正确的解决方案。 有些算法,如切瑞顿-的Tarjan MST算法 ,在涉及Ô运行时到达(日志log n)的求解复杂约束优化问题。
希望这可以帮助!
看到的O因子(日志log n)的时间复杂性的一种方法是通过分裂状的东西在对方的回答解释,但有另一种方式来看到这个因素,当我们要的时间和空间之间的贸易/时间和逼近/时间和硬度/ ...的算法,我们对我们的算法,一些人为的迭代。
例如SSSP(单源最短路径)对平面图形的O(n)的算法,但复杂的算法之前有一个更容易的算法(但仍相当困难)与运行时间为O(n日志log n)的,在算法的基础是如下(只是非常粗略的描述,我会提供跳过理解这一部分,读答案的另一部分):
但我的观点是,这里我们选择分工中尺寸的O(日志N /(日志中记录N))。 如果我们选择的其他部门一样为O(log N /(日志log n)的^ 2),这可能运行速度更快,带来的另一个结果。 我的意思是,在很多情况下(如在近似算法或随机算法,或算法,如SSSP如上),当我们遍历东西(子问题,可能的解决方案,...),我们选择对应的是,贸易迭代次数我们(的算法的算法/常数因子时间/空间/复杂性,...)。 所以,可能是我们看到比在现实工作算法“.log日志N”更复杂的东西。