Re: UnrankPermutation newbie problem .. Combinatorica Package
- To: mathgroup at smc.vnet.net
- Subject: [mg49964] Re: UnrankPermutation newbie problem .. Combinatorica Package
- From: BV <dont at bug.me>
- Date: Sun, 8 Aug 2004 05:37:47 -0400 (EDT)
- References: <cf22sg$7tf$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
BV wrote:
> I found that calling NthPermutation via MathLink in C++ is rather costly
> for my purposes, therefore I'm inquiring to re-write the function
> entirely in C++. I hope by eliminating unnecessary calls to MathLink
> this would speed up my program significantly.
>
> As, I admit, I am not very versed in Mathematics itself can anyone point
> me in the direction where to start; how this function works; what
> formula is used, etc.
> Thank you
>
I found in the "combinatorica.m" file that this function is obsolete and
that UnrankPermutation[] function should be used instead. This is the
code as it should work (from the "combinatorica.m" file):
UnrankPermutation[r_Integer, {}] := {}
UnrankPermutation[r_Integer, l_List] :=
Module[{s = l, k, t, p = UP[Mod[r, Length[l]!], Length[l]]},
Table[k = s[[t = p[[i]] ]];
s = Delete[s, t];
k,
{i, Length[ p ]}
]
]
UnrankPermutation[r_Integer, n_Integer?Positive] :=
UnrankPermutation[r, Range[n]]
Can someone please write this as an algorithm or a formula as I don't
have any books on Mathematica and this looks complicated; a plain
formula for this would do!
- Follow-Ups:
- Re: Re: UnrankPermutation newbie problem .. Combinatorica Package
- From: DrBob <drbob@bigfoot.com>
- Re: Re: UnrankPermutation newbie problem .. Combinatorica Package