Binomial transform: Difference between revisions
Content added Content deleted
(→{{header|C}}: Added self-inverting variant.) |
|||
Line 363: | Line 363: | ||
[1 0 0 1 0 1 1 1 2 2 3 4 5 7 9 12 16 21 28 37] |
[1 0 0 1 0 1 1 1 2 2 3 4 5 7 9 12 16 21 28 37] |
||
</pre> |
</pre> |
||
=={{syntaxhighlight lang="julia">""" https://rosettacode.org/wiki/Binomial_transform """ |
|||
""" forward binomial transform """ |
|||
binomial_transform(seq) = |
|||
[sum(binomial(n, k) * seq[k+1] for k in 0:n) for n in 0:length(seq)-1] |
|||
""" inverse binomial transform """ |
|||
function inverse_binomial_transform(seq) |
|||
return [sum((-1)^(n - k) * binomial(n, k) * seq[k+1] for k in 0:n) for n in 0:length(seq)-1] |
|||
end |
|||
const test_sequences = [ |
|||
"Catalan number sequence" => [ |
|||
1, |
|||
1, |
|||
2, |
|||
5, |
|||
14, |
|||
42, |
|||
132, |
|||
429, |
|||
1430, |
|||
4862, |
|||
16796, |
|||
58786, |
|||
208012, |
|||
742900, |
|||
2674440, |
|||
9694845, |
|||
35357670, |
|||
129644790, |
|||
477638700, |
|||
1767263190, |
|||
], |
|||
"Prime flip-flop sequence" => |
|||
[0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0], |
|||
"Fibonacci number sequence" => [ |
|||
0, |
|||
1, |
|||
1, |
|||
2, |
|||
3, |
|||
5, |
|||
8, |
|||
13, |
|||
21, |
|||
34, |
|||
55, |
|||
89, |
|||
144, |
|||
233, |
|||
377, |
|||
610, |
|||
987, |
|||
1597, |
|||
2584, |
|||
4181, |
|||
], |
|||
"Padovan number sequence" => |
|||
[1, 0, 0, 1, 0, 1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37], |
|||
] |
|||
for (s, a) in test_sequences |
|||
println("\n$s:\n", join(a, " ")) |
|||
println("Forward binomial transform:\n", join(binomial_transform(a), " ")) |
|||
println("Inverse binomial transform:\n", join(inverse_binomial_transform(a), " ")) |
|||
println("Combined:\n", join(inverse_binomial_transform(binomial_transform(a)), " ")) |
|||
end |
|||
</syntaxhighlight>{{out}} Same as C, Go, etc. |
|||
=={{header|Python}}== |
=={{header|Python}}== |