2014-02-18 4 views
0

Рассмотрим матрицу M (I, J), которая описывает общее время для машины я, чтобы завершить работу J и последовательность работы S которая порядок исполнения для вакансии. Например:Перестановка Flow Магазин общее время

Как это: enter image description here

В этом случае общее время 13 для S = j1, j2, j3. Я использую следующий код, чтобы получить это значение:

M = matrix(c(4, 2, 2, 5, 3, 2), ncol = 3) 
total = 0 

for (i in 2:nrow(M)) 
    total = total + sum(pmax(M[i, ], M[i - 1, ])) 

print(total) 

Он выдает 12 и она должна быть 13. Кроме того, я не уверен, как включить S к этому. Любые идеи о том, как получить правильное значение? Благодаря!

+0

Вы действительно имели в виду «M [i - 1]» как вторую часть max или 'M [i - 1,]'? Первое из них дает правильный ответ, но я думаю, что это совпадение. Последнее, безусловно, неверно, поскольку вам нужно сдвинуть строки, но просто хочу убедиться, что я понимаю, что вы донгом. – BrodieG

+0

Я перепутал, это 'M [i - 1,]', и он получает неправильное значение! – Fernando

ответ

1

Я думаю, что это то, что вы ищете:

M <- matrix(c(4, 2, 2, 5, 3, 2), ncol = 3) 
M2 <- cbind(M, matrix(0, nrow=nrow(M), ncol=nrow(M) - 1)) 
vec <- seq(len=ncol(M2)) 
M2.ord <- M2 
for(i in 1:nrow(M2)) { 
    M2.ord[i, ] <- vec 
    vec <- c(tail(vec, 1), head(vec, -1)) + ncol(M2) 
} 
M2.shift <- matrix(t(M2)[M2.ord], nrow=nrow(M2)) 
sum(do.call(pmax, split(M2.shift, row(M2.shift)))) 

Раздражает шагом является создание M2.shift:

 [,1] [,2] [,3] [,4] 
[1,] 4 2 3 0 
[2,] 0 2 5 2 

С этого момента, это довольно много логики вы использовали , Обратите внимание, что это предполагает, что мы используем все шаги, определенные в M.

Смежные вопросы