Рад, что наконец-то смог решить проблему ... Код также работает быстро
Задача: найти минимальную стоимость матрицы. Для ясности предположим, что у меня есть матрица, приведенная ниже:
[1,] 1 4 6 7 8 9 0
[2,] 10 12 1 3 11 2 0
[3,] 11 12 2 8 17 1 0
[4,] 20 1 18 4 28 1 0
[5,] 5 20 80 6 9 3 0
Моя цель - добавить минимальное расстояние пути, начиная с первого ряда ката [1,1] до последнего ряда К [5,4]. Так эффективно, я хочу иметь что-то вроде 1 + 4 + 1 + 2 + 4 + 6 + 9 + 3.
Ниже приведен код R, который я использовал для реализации этого. Он реализует две функции:
# Function that calculates minimum of three values. Returns the Value.
minFUN <- function(Data, a, b){
d = (min(Data[a, b+1], Data[a+1, b], Data[a+1, b+1]))
return(d)
}
# Function that calculates the index of the minimum value, from which the
# The next iteration begins
NextRC <- function(Data, a, b){
d = min(Data[a, b+1], Data[a+1, b], Data[a+1, b+1])
if(d == Data[a, b+1]){
c = cbind(a, b+1)
}else
if(d == Data[a+1, b]){
c = cbind(a+1, b)
} else
if(d == Data[a+1, b+1]){
c = cbind(a+1, b+1)
}
return(c)
}
Je <- c()
NewRow = 1
NewCol = 1
# Warping Function that uses both functions above to loop through the dataset
WarpDist <- function(Data, a = NewRow, b = NewCol){
for(i in 1:4) {
Je[i] = minFUN(Data, a, b)
# Next Start Point
NSP = NextRC(Data, a,b)
NewRow = as.numeric(NSP[1,1])
NewCol = as.numeric(NSP[1,2])
a = NewRow
b = NewCol
}
return(Je)
}
Value=WarpDist(Data = Data, a = NewRow, b = NewCol)
warpo = Data[1,1] + sum(Value)
w = sqrt(warpo)
Результат - минимальный путь от первой строки до последней строки
Value
[1] 4 1 2 4 6
В результате пропущены 9 и 3, поскольку он уже находится в последней строке.
Время:
Time difference of 0.08833408 secs