我的方法效率有问题。有什么建议?

时间:2016-04-16 20:46:12

标签: java performance big-o

如果n的除法器的总和是m
,则两个数字n和m被称为“朋友” 反之亦然。

例如:如果n = 200且m = 284而不是

1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284

1 + 2 + 4 + 71 + 142 = 220。

所以该方法需要得到一个数字K, 该方法应该返回“朋友”对的数量

如果K = 9000,则该方法将返回5,因为有5对是“朋友”:

220284

1184,1210

2620,2924

5020,5564

6232,6368

就大O而言,最有效的运行时间是什么?

1 个答案:

答案 0 :(得分:0)

虽然我无法告诉你最佳实现的算法复杂性,但我可以将其分解,至少对于强力方法,如果你实现了一个计数器,那么当你调整因子分解方法时你会知道什么新的 O 值为

第一步:循环数字0(或1)-K这是 O(K)并对其应用第2步和第3步

第二步:获取数字除数的(总和)。如果我们通过循环遍历所有数字来计算除数,则 O(K)

第三步:计算除数之和(除数之和)是否等于原始数 O(K)。如果是递增计数器。

第四步:输出计数器变量 0(1)时间

因此蛮力方法的整体算法复杂度为 O(K * 2K) = O(K ^ 2)