Как делить/ссылаться на переменные 3 массива в этом коде вместо использования изменяемых значений?Что такое неизменяемая версия для массива de/reference?
Приведенный ниже код вычисляет самую длинную общую подпоследовательность (LCS) по диагонали, пересекающей массив m * n.
Аргументы 2 символьные массивы следующим образом:
Так ЛВП метод должен приводить к длине 4, как самые длинные символы общей суб-последовательности «ACBB» & «bcbb».
let private s1 = "ABCDBB".ToCharArray()
let private s2 = "CBACBAABA".ToCharArray()
let public lcs_seq_1d_diags (x:char[]) (y:char[]) =
let m = x.Length
let n = y.Length
let mutable dk2 = Array.create (1+m) 0
//printfn "\r\n0: %A" dk2
let mutable dk1 = Array.create (1+m) 0
//printfn "1: %A" dk1
let mutable dk = Array.create (1+m) 0
for k = 2 to m+n do
let low = max 1 (k-m)
let high = min (k-1) n
for j = low to high do
let i = k - j
if x.[i-1] = y.[j-1] then
dk.[i] <- dk2.[i-1] + 1
else
dk.[i] <- max dk1.[i] dk1.[i-1]
let mutable temp = dk2
dk2 <- dk1
dk1 <- dk
dk <- temp
dk1.[m]
let private res_seq_1d_rows = duration (fun() -> lcs_seq_1d_rows s1 s2)
//res_seq_1d_rows = 4
Изменчивость определяется типом данных - если вы хотите использовать System.Array то вам нужно ожидать/иметь дело с изменчивостью. – ildjarn