【发布时间】:2017-02-20 04:25:49
【问题描述】:
此方法试图将 num 表示为 arr 中元素的乘积。
例如 method1(37,[1,3,5]) 返回 [2,0,7]
// arr is an array of divisors sorted in asc order, e.g. [1,3,5]
def method1(num, arr)
newArr = Array.new(arr.size, 0)
count = arr.size - 1
while num > 0
div = arr[count]
if div <= num
arr[count] = num/div
num = num % div
end
count = count - 1
end
return newArr
end
如果您能帮我推导出算法的复杂性,我将不胜感激。也请随时提高我的算法的效率
【问题讨论】:
-
计数在哪里初始化?
-
确定 Big-O 表示法的经验法则:如果将输入的大小加倍,算法还需要做多少工作:(a) 如果输入完全相同,它可能是 O(1)。 (b) 如果它输入两倍,它可能是 O(n)。 (c) 如果它是输入的四倍,它可能是 O(n^2)。
-
哦忘了在此处包含计数。谢谢
-
@X.enia:您的意思是增加
count变量而不是在while 循环内减少吗? -
对我来说看起来像 N 次,它基本上是在数组上循环一次对吗?
标签: ruby algorithm big-o code-complexity