Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,16 @@
|
|||
greatest_subsequential_sum_it([]) = [] => true.
|
||||
greatest_subsequential_sum_it(A) = Seq =>
|
||||
P = allcomb(A),
|
||||
Total = max([Tot : Tot=_T in P]),
|
||||
Seq1 = [],
|
||||
if Total > 0 then
|
||||
[B,E] = P.get(Total),
|
||||
Seq1 := [A[I] : I in B..E]
|
||||
else
|
||||
Seq1 := []
|
||||
end,
|
||||
Seq = Seq1.
|
||||
|
||||
allcomb(A) = Comb =>
|
||||
Len = A.length,
|
||||
Comb = new_map([(sum([A[I]:I in B..E])=([B,E])) : B in 1..Len, E in B..Len]).
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
greatest_subsequential_sum_cp([]) = [] => true.
|
||||
greatest_subsequential_sum_cp(A) = Seq =>
|
||||
N = A.length,
|
||||
|
||||
% decision variables: start and end indices
|
||||
Begin :: 1..N,
|
||||
End :: 1..N,
|
||||
|
||||
% 1 if the number is in the selected sequence, 0 if not.
|
||||
X = new_list(N),
|
||||
X :: 0..1,
|
||||
|
||||
% Get the total sum (to be maximized)
|
||||
TotalSum #= sum([X[I]*A[I] : I in 1..N]),
|
||||
SizeWindow #= sum(X),
|
||||
|
||||
% Calculate the windows of the greatest subsequential sum
|
||||
End #>= Begin,
|
||||
End - Begin #= SizeWindow -1,
|
||||
foreach(I in 1..N)
|
||||
(Begin #=< I #/\ End #>= I) #<=> X[I] #= 1
|
||||
end,
|
||||
|
||||
Vars = X ++ [Begin,End],
|
||||
solve($[inout,updown,max(TotalSum)], Vars),
|
||||
|
||||
if TotalSum > 0 then
|
||||
Seq = [A[I] : I in Begin..End]
|
||||
else
|
||||
Seq = []
|
||||
end.
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
import cp.
|
||||
|
||||
go =>
|
||||
LL = [[-1 , -2 , 3 , 5 , 6 , -2 , -1 , 4 , -4 , 2 , -1],
|
||||
[-1,-2, 3],
|
||||
[-1,-2],
|
||||
[0],
|
||||
[],
|
||||
[144, 5, -8, 7, 15],
|
||||
[144, -145, -8, 7, 15],
|
||||
[-144, 5, -8, 7, 15]
|
||||
],
|
||||
|
||||
println("Iterative version:"),
|
||||
foreach(L in LL)
|
||||
printf("%w: ", L),
|
||||
G = greatest_subsequential_sum_it(L),
|
||||
println([gss=G, sum=sum(G)])
|
||||
end,
|
||||
nl,
|
||||
|
||||
println("Constraint model"),
|
||||
foreach(L in LL)
|
||||
printf("%w: ", L),
|
||||
G = greatest_subsequential_sum_cp(L),
|
||||
println([gss=G, sum=sum(G)])
|
||||
end,
|
||||
|
||||
nl.
|
||||
Loading…
Add table
Add a link
Reference in a new issue