繁体   English   中英

算法的渐近时间复杂度O(log n)是多少?

[英]is the asymptotic time complexity of this algorithm O(log n)?

查找p的伪代码算法为:

peakreturn(H)
for p=1 to m //m is the length of H
    if H[p-1] ≤ H[p] and H[p] ≥ H[p+1] then return p
return nil // only returns this if there is no peak

假设我有一个整数值H [1至m]的数组,其中,如果“ p”是峰值元素,则:

H[p] ≥ H[p+1] if p = 1,
H[p-1] ≤ A[p] ≥ H[p+1] if 1 < p < m,
H[p] ≥ H[p-1] if p = m.

基本上,如果H [p]大于或等于其相邻元素,则为峰。

假设数组H在开头和结尾处都增加了1个元素,数组为H [0至m + 1],其中H [0] = H [m + 1] =-无穷大。 因此,H [0]和H [m + 1]是标记。 如果H [p-1]≤H [p]≥H [p + 1],则元素p(其中1≤p≤n)为峰值。

我认为渐近时间复杂度为O(log n),但我不确定。 如果可以的话请帮助,非常感谢。

不,不是O(log m)。 例如,如果H在增加,则循环执行m次,因为唯一的峰值是最后一个元素。 因此,最坏的情况是O(m)。

O(log m)解决方案如下所示:要在数组中找到一个末端元素小于其邻居的峰,请考虑数组的中间元素。 如果是高峰,则停止。 否则,如果它小于其左侧的元素,请在阵列的左半部分找到一个峰。 如果它小于右边的元素,请在阵列的右边找到一个峰。 它必须小于一个,因为它不是峰值。 每次大约将数组的大小减半,并且保证终止,因为一旦数组达到3号,就保证中间元素为峰值,因为末端元素(根据构造)比它们的邻居小-中间元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM