number_of_mXn_arrays_with_rows_being_permutations.sf 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/usr/bin/ruby
  2. # Author: Daniel "Trizen" Șuteu
  3. # Date: 23 February 2018
  4. # https://github.com/trizen
  5. # A new recurrence for computing the number of mXn arrays with rows being
  6. # permutations of 0..n-1 and no column j greater than column j-1 in all rows.
  7. # Special case formula for m = 3: (OEIS: A212856)
  8. # a(n) = f(n) * n!, where f(0) = 1, f(n) = Sum_{k=0..n-1} (-1)^(n+k+1) * f(k) * binomial(n, k)^2 / (n-k)!. - Daniel Suteu, Feb 23 2018
  9. # OEIS sequences:
  10. # m = 2: https://oeis.org/A000275
  11. # m = 3: https://oeis.org/A212856
  12. # m = 4: https://oeis.org/A212857
  13. # m = 5: https://oeis.org/A212858
  14. func a3(n) {
  15. func f((0)) { 1 }
  16. func f(n) is cached {
  17. sum(^n, {|k|
  18. (-1)**(n+k+1) * f(k) * binomial(n,k)**2 / (n-k)!
  19. })
  20. }
  21. f(n) * n!
  22. }
  23. say 10.of { a3(_+1) } #=> [1, 7, 163, 8983, 966751, 179781181, 53090086057, 23402291822743, 14687940716402023]
  24. say '-'*80
  25. # Generalized formula by Petros Hadjicostas, Sep 08 2019 (OEIS: A212857)
  26. # a(n) = (-1)^(n-1) + Sum_{s = 1..n-1} a(s) * (-1)^(n-s-1) * binomial(n,s)^m for n >= 2 with a(1) = 1. For m >= 1.
  27. func a(n, m) is cached {
  28. return 1 if (n == 0)
  29. sum(0..n-1, {|k|
  30. a(k, m) * (-1)**(n+k+1) * binomial(n, k)**m
  31. })
  32. }
  33. say 10.of { a(_+1, 2) } #=> [1, 3, 19, 211, 3651, 90921, 3081513, 136407699, 7642177651, 528579161353]
  34. say 10.of { a(_+1, 3) } #=> [1, 7, 163, 8983, 966751, 179781181, 53090086057, 23402291822743, 14687940716402023, 12645496977257273257]
  35. say 10.of { a(_+1, 4) } #=> [1, 15, 1135, 271375, 158408751, 191740223841, 429966316953825, 1644839120884915215, 10079117505143103766735, 94135092186827772028779265]
  36. say 10.of { a(_+1, 5) } #=> [1, 31, 7291, 7225951, 21855093751, 164481310134301, 2675558106868421881, 84853928323286139485791, 4849446032811641059203617551, 469353176282647626764795665676281]