Jump to content

Derangement

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 85.224.196.196 (talk) at 14:08, 30 October 2012 (added an implementation in Python). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Number of possible permutations and derangements of n elements. n! (n factorial) is the number of n-permutations; !n (n subfactorial) is the number of derangements — n-permutations where all of the n elements change their initial places.

In combinatorial mathematics, a derangement is a permutation of the elements of a set such that none of the elements appear in their original position.

The numbers of derangements !n for sets of size n are called "de Montmort numbers" or "derangement numbers" (and can be generalized to rencontres numbers); the subfactorial function (not to be confused with the factorial n!) maps n to !n. No standard notation for subfactorials is agreed upon, and n¡ is sometimes used instead of !n.[1]

The problem of counting derangements was first considered by Pierre Raymond de Montmort[2] in 1708; he solved it in 1713, as did Nicholas Bernoulli at about the same time.

Example

Suppose that a professor has had 4 of his students – student A, student B, student C, and student D - take a test and wants to let his students grade each others' tests. Of course, no student should grade his or her own test. How many ways could the professor hand the tests back to the students for grading, such that no student received his or her own test back? Out of 24 possible permutations (4!) for handing back the tests, there are only 9 derangements:

BADC, BCDA, BDAC,
CADB, CDAB, CDBA,
DABC, DCAB, DCBA.

In every other permutation of this 4-member set, at least one student gets his or her own test back.

Another version of the problem arises when we ask for the number of ways n letters, each addressed to a different person, can be placed in n pre-addressed envelopes so that no letter appears in the correctly addressed envelope.

Counting derangements

Suppose that there are n persons numbered 1, 2, ..., n. Let there be n hats also numbered 1, 2, ..., n. We have to find the number of ways in which no one gets the hat having same number as his/her number. Let us assume that the first person takes hat i. There are n − 1 ways for the first person to make such a choice. There are now two possibilities, depending on whether or not person i takes hat 1 in return:

  1. Person i does not take the hat 1. This case is equivalent to solving the problem with n − 1 persons n − 1 hats: each of the remaining n − 1 people has precisely 1 forbidden choice from among the remaining n − 1 hats (i's forbidden choice is hat 1).
  2. Person i takes the hat 1. Now the problem reduces to n − 2 persons and n − 2 hats.

From this, the following relation is derived:

with the starting values !0 = 1 and !1 = 0.

Notice that this same recurrence formula also works for factorials with different starting values. That is 0! = 1, 1! = 1 and

which is helpful in proving the limit relationship with e below.

Also, the following formulas are known:[3]

Where [x] is the nearest integer function.

where is the floor function. The following recurrence relationship also holds[4]:

Starting with n = 0, the numbers of derangements of n are:

1, 0, 1, 2, 9, 44, 265, 1854, 14833, 133496, 1334961, 14684570, 176214841, 2290792932, ... (sequence A000166 in the OEIS).

These numbers are also called subfactorial or rencontres numbers.

Perhaps a more well-known method of counting derangements uses the inclusion-exclusion principle.

Limit of ratio of derangement to permutation as n approaches ∞

Using this recurrence, it can be shown that, in the limit,

This is the limit of the probability pn = dn/n! that a randomly selected permutation is a derangement. The probability approaches this limit quite quickly. The above semi-log graph shows that the derangement graph lags the permutation graph by an almost constant value.

More information about this calculation and the above limit may be found on the page on the statistics of random permutations.

Generalizations

The problème des rencontres asks how many permutations of a size-n set have exactly k fixed points.

Derangements are an example of the wider field of constrained permutations. For example, the ménage problem asks if n married couples are seated boy-girl-boy-girl-... around a circular table, how many ways can they be seated so that no man is seated next to his wife?

More formally, given sets A and S, and some sets U and V of surjections AS, we often wish to know the number of pairs of functions (fg) such that f is in U and g is in V, and for all a in A, f(a) ≠ g(a); in other words, where for each f and g, there exists a derangement φ of S such that f(a) = φ(g(a)).

Another generalization is the following problem:

How many anagrams with no fixed letters of a given word are there?

For instance, for a word made of only two different letters, say n letters A and m letters B, the answer is, of course, 1 or 0 according whether n = m or not, for the only way to form an anagram without fixed letters is to exchange all the A with B, which is possible if and only if n = m. In the general case, for a word with n1 letters X1, n2 letters X2, ..., nr letters Xr it turns out (after a proper use of the inclusion-exclusion formula) that the answer has the form:

for a certain sequence of polynomials Pn, where Pn has degree n. But the above answer for the case r = 2 gives an orthogonality relation, whence the Pn's are the Laguerre polynomials (up to a sign that is easily decided).[5]

Implementation

The function 'random_derangement' in the following Python code implements takes a list and computes an in-place derangement:

   # Using the method from "Generating Random Derangements"
   # Conrado Martínez, Alois Panholzer, and Helmut Prodinger
   # http://www.siam.org/proceedings/analco/2008/anl08_022martinezc.pdf
   
   # Compute the nth derangement value (A000166 in OEIS)
   _D_values = [1, 0, 1]
   def D(i):
       n = len(_D_values)
       while i >= n:
           # Add new values to the cache until it's large enough
           _D_values.append((n-1)*(_D_values[n-1]+_D_values[n-2]))
           n += 1
       return _D_values[i]
   
   
   def random_derangement(arr):
       n = len(arr)
       mark = [False] * n   # marked elements may not be moved
       i = n-1   # swap from this position
       u = n     # number of unmarked elements
       while u >= 2:
           if not mark[i]:
               # find another unmarked element
               while 1:
                   j = random.randrange(0, i)
                   if not mark[j]:
                       break
               # swap elements at positions i and j
               arr[i], arr[j] = arr[j], arr[i]
               # can position j be swapped again?
               p = random.random()
               if D(u) * p < (u-1) * D(u-2):
                   mark[j] = True  # no
                   u -= 1
               u -= 1
           i -= 1


References

  1. ^ Ronald L. Graham, Donald E. Knuth, Oren Patashnik, Concrete Mathematics (1994), Addison–Wesley, Reading MA. ISBN 0-201-55802-5
  2. ^ de Montmort, P. R. (1708). Essay d'analyse sur les jeux de hazard. Paris: Jacque Quillau. Seconde Edition, Revue & augmentée de plusieurs Lettres. Paris: Jacque Quillau. 1713.
  3. ^ Hassani, M. "Derangements and Applications." J. Integer Seq. 6, No. 03.1.2, 1–8, 2003
  4. ^ See the notes for (sequence A000166 in the OEIS).
  5. ^ Even, S. (1976). "Derangements and Laguerre polynomials". Mathematical Proceedings of the Cambridge Philosophical Society. 79 (01): 135–143. doi:10.1017/S0305004100052154. Retrieved 27 December 2011. {{cite journal}}: Unknown parameter |coauthors= ignored (|author= suggested) (help)