繁体   English   中英

如何对我的算法进行运行时分析?

[英]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.

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