Jaap Spies wrote: > > Maybe it is interesting to know that you can do this with integer arithmetic > (and permanents!): > > Let J_n be the n x n matrix with all 1's and I_n the identity matrix, > then the number of recontres or derangements with no fixed points is > > D_{n,0} = per(J_n - I_n) (per being the permanent of the matrix) > > Applying Ryser's algorithm one gets the formula: > > D_{n,0} = sum_r=0^n-1 (-1)^r * binomial(n,r) * (n-r)^r * (n-r-1)^{n-r} > > and than > > D_{n,k} = binomial(n,k) * D_{n-k, 0} > >
This is my favorite application of permanents: counting the number of permutations with restricted positions! See: encontres system:sage {{{id=0| def derangements(n, k): if n == 0 and k == 0: return 1 if n == 1 and k == 0: return 0 if k == 0: lst = [(-1)^r * binomial(n, r) * (n-r)^r * (n-r-1)^(n-r) for r in range(n)] return sum(lst) else: return binomial(n, k) * derangements(n-k, 0) }}} {{{id=1| derangements(3,0) /// 2 }}} {{{id=2| derangements(6,1) /// 264 }}} {{{id=3| for i in range(12): for j in range(i+1): print derangements(i,j), print /// 1 0 1 1 0 1 2 3 0 1 9 8 6 0 1 44 45 20 10 0 1 265 264 135 40 15 0 1 1854 1855 924 315 70 21 0 1 14833 14832 7420 2464 630 112 28 0 1 133496 133497 66744 22260 5544 1134 168 36 0 1 1334961 1334960 667485 222480 55650 11088 1890 240 45 0 1 14684570 14684571 7342280 2447445 611820 122430 20328 2970 330 55 0 1 }}} {{{id=4| derangements(0,0) /// 1 }}} {{{id=5| derangements(1,0) /// 0 }}} Jaap --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/ -~----------~----~----~----~------~----~------~--~---