MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Coding an inverse permutation

  • To: mathgroup at smc.vnet.net
  • Subject: [mg79112] Re: [mg79078] Coding an inverse permutation
  • From: "Carl K. Woll" <carlw at wolfram.com>
  • Date: Thu, 19 Jul 2007 03:24:17 -0400 (EDT)
  • References: <200707180652.CAA04270@smc.vnet.net>

Diana wrote:
> Folks,
> 
> I have the following list:
> 
> aa={1, 2, 5, 3, 4, 8, 9, 7, 11, 6, 13, 17, 10, 16, 19, 15, 14, 20, 21,
> 23, 25, 12, 29, 31, 18, 22,
>  37, 27, 26, 28, 33, 35, 32, 24, 41, 43, 30, 34, 47, 39, 38, 40, 45,
> 49, 44, 36, 53, 55, 46, 52,
>  59, 51, 50, 56, 57, 61, 62, 42, 67, 71, 48, 58, 65, 63, 64, 68, 69,
> 73, 74, 54, 77, 79, 60, 76,
>  83, 75, 80, 70, 81, 89, 85, 66, 95, 97, 72, 82, 91, 87}
> 
> I want to figure out a clean way to code its inverse permutation.
> 
> The inverse permutation list would start as follows:
> 
> bb={1,2,4,5,3,10,8,6, ...}
> 
> Since "3" is in position 4 of aa, position 3 of bb will be "4".
> Since "5" is in position 3 of aa, position 5 of bb will be "3".
> 
> Can someone give me a suggestion as to how to code this?
> 
> Thanks, Diana
> 

I don't think aa qualifies as a permutation, so finding the inverse 
permutation will be difficult. This is because the list aa only has 88 
elements, but it contains elements greater than 88. For example, aa 
contains 91 in position 87, so presumably 87->91. However, as there are 
only 88 elements in aa, we don't know where 91 goes to.

I think a permutation list of length n should contain the numbers 1 to n 
in some permuted order.

At any rate, if your list is a permutation list as I defined above, then 
the following is one way to find the inverse permutation:

invperm[p_] := Module[{t=p}, t[[p]]=Range[Length[p]]; t]

Carl Woll
Wolfram Research


  • Prev by Date: Re: fast way of appending x zeros to a list?
  • Next by Date: Re: Coding an inverse permutation
  • Previous by thread: Coding an inverse permutation
  • Next by thread: Re: Coding an inverse permutation