def three_way_merge(L1,L2,L3):
L = []
i1 = 0
i2 = 0
i3 = 0
done1 = False
done2 = False
done3 = False
while not (done1 and done2 and done3):
if not done1 and (done2 or L1[i1] < L2[i2]) and (done3 or L1[i1] < L3[i3]):
L.append(L1[i1])
i1 += 1
done1 = i1 >= len(L1)
elif not done2 and (done3 or L2[i2] < L3[i3]):
L.append(L2[i2])
i2 += 1
done2 = i2 >= len(L2)
else:
L.append(L3[i3])
i3 += 1
done3 = i3 >= len(L3)
return L
我想计算我发现的该算法的最差比较次数,因为我的算法课即将进行考试,我希望能够进行这种分析。我的想法是编写一个程序来创建这种“最坏情况”的许多随机示例(我猜这是类型:L1 = [9,10,11], L2 = [6,7,8], L3 = [3,4,5]
,其中所有列表都已排序,但值严格小于L3
等)然后每个当我进行任何比较时,我会增加一个计数器并返回最终计数,然后尝试找出输出中的某种模式,但这似乎是一种低效的方法。L2
L1
有没有办法以类似于归并排序中经典归并分析的方式来计算这一点?