Mercurial > lbo > hg > juliaplay
changeset 16:a4a917da5365
Implement recursive LISS with tracking
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Tue, 28 Feb 2023 13:37:49 +0100 |
parents | be208ce0ffaf |
children | f6833e5295d6 |
files | julia/dp.jl |
diffstat | 1 files changed, 14 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/julia/dp.jl Tue Feb 28 12:52:34 2023 +0100 +++ b/julia/dp.jl Tue Feb 28 13:37:49 2023 +0100 @@ -96,17 +96,24 @@ c end -function recursive_liss(v::AbstractVector{<:Integer}, last=-1000, i=1, l=0)::Int +function recursive_liss(v::AbstractVector{<:Integer}, last=1, i=1, l=0, prev=zeros(Int, length(v)), L=zeros(Int, length(v)), Lmax=[0])::Int if i > length(v) return l else - if v[i] >= last - incl = recursive_liss(v, v[i], i+1, l+1) - excl = recursive_liss(v, last, i+1, l) + if v[i] >= v[last] + incl = recursive_liss(v, i, i+1, l+1, prev, L, Lmax) + excl = recursive_liss(v, last, i+1, l, prev, L, Lmax) + if incl >= excl + Lmax[1] = max(Lmax[1], incl) + end + if incl == Lmax[1] + L[l+1] = i + prev[i] = last + end max(incl, excl) - else # v[i] < last - incl = recursive_liss(v, v[i], i+1, 1) - excl = recursive_liss(v, last, i+1, l) + else # v[i] < v[last] + incl = recursive_liss(v, i, i+1, 1, prev, L, Lmax) + excl = recursive_liss(v, last, i+1, l, prev, L, Lmax) max(incl, excl) end end