以下算法的运行时间成本是多少?

时间:2017-01-25 00:04:07

标签: algorithm time-complexity

set.seed(1)
A <- data.table( dates.A = seq.Date(as.Date('2008-01-01'),as.Date('2008-01-31'), by = '3 days'), 
                 letters.A = LETTERS[1:4] , value.A = runif(4) )

B <- data.table( date.B = seq.Date(as.Date('2008-01-01'),as.Date('2008-01-05'), by = 'days'), 
                 letters.B = LETTERS[1:4] , value.B = runif(4) )

#### Define the columns I merge on

A[, ':=' (dates.merge = dates.A, letters.merge = letters.A)]
B[, ':=' (dates.merge = date.B, letters.merge = letters.B)]
setkeyv(A, c('letters.merge','dates.merge'))
setkeyv(B, c('letters.merge','dates.merge'))

result <- B[A, roll = 'nearest']

#### As a side note, how do I avoid the change in order of my data.tables??
setorder(result,dates.A,letters.A)
setorder(A,dates.A)
setorder(B,date.B)

给定算法的运行时间成本是多少?能否请您描述逐步解决方案。

1 个答案:

答案 0 :(得分:1)

为了计算时间复杂度,通常从内循环走到外循环。

现在内部是一个while循环。它在j < 1时结束,这是在 O(log 3 3n)步骤之后的情况,或 O(1 + log 3 < / sub> n) O(log 3 n)。请注意,我们在这里使用 n :外部循环的循环计数器i在这里不起作用。

另一方面,外部循环迭代 O(n-1)次,或因此 O(n)次,每次时间,它完成相同的工作量: O(log 3 n)。所以总时间复杂度 O(n log 3 n)

你可以在日志中删除3,因为 O(log k n) O(log n)的固定< EM>ķ。所以更好的表示法是 O(n log n)