[英]How can I do a run time analysis of my algortihm?
假设我们有一些具有不同输入参数的服务。 首先,我们生成一个代表 x 轴的数字列表 (cache_slices = [0.00, 0.01, ..., 1.00])。 然后,对于这些值中的每一个,我们计算 backhaul_slices,它表示一个线性表达式 w.r.t cache_slices(backhaul_slice = a * cache_slice + b,具有 a 和 b 实数)。
之后,我们计算 abs_diff_list 中每个元组(backhaul_slice,cache_slice)之间差异的绝对值。 然后,我们在 abs_diff_list 上进行迭代,直到找到它的最小值和 append 元组到一个列表。 这应该对所有 N 个服务进行。
这是该算法的 Python 代码,其中 gamma(i, beta) 表示 function 以计算 backhaul_slice w.rt cache_slice:
cache_slices = [beta/100 for beta in range(101)]
tuples_list = []
for i in range(num_services):
backhaul_slices = [gamma(i,beta) for beta in cache_slices]
abs_diff_list = [abs(gamma(i,beta)-beta) for beta in cache_slices]
for j in range(len(abs_diff_list)):
if abs_diff_list[j] == min(abs_diff_list):
tuples_list.append((backhaul_slices[j],cache_slices[j]))
break
如何对此算法进行运行时分析(最佳、平均和最坏情况)?
正如评论中提到的,复杂性是二次的,因为min
在每次迭代时都会重新计算。 将其从循环中取出将使复杂性线性化。 然而,即使这样也太过分了。 恒定时间复杂度是可行的。
您正在努力最小化abs(gamma(i,beta)-beta)
。 根据您的解释, gamma
是线性 function: a[i]*beta + b[i]
。 因此,要最小化的函数是abs((a[i] - 1) * beta + b[i])
。 当beta
接近(a[i] - 1) * x + b[i] == 0
的根时达到其最小值,即beta
必须接近-b[i] / (a[i] - 1)
. 只有两个候选者要测试(根不属于[0.0... 1.0]
区间的极端情况只需要一个测试)。 它是恒定的时间复杂度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.