Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2002
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2002

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

Search the Archive

Re: Combination/Permutation questions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg37450] Re: [mg37436] Combination/Permutation questions
  • From: Tomas Garza <tgarza01 at prodigy.net.mx>
  • Date: Wed, 30 Oct 2002 00:51:00 -0500 (EST)
  • References: <200210290509.AAA27962@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

I think your problem may be solved like this. I consider only the case with
2 out of 4 elements. Then

In[1]:=
Needs["DiscreteMath`Combinatorica`"];
cset = KSubsets[{a, b, c, d}, 2]
Out[2]=
{{a, b}, {a, c}, {a, d}, {b, c}, {b, d}, {c, d}}

Define the function f (a simpler version of what you had already surmised):

In[3]:=
f[{x_, y_}] := Flatten[Outer[Plus, {-x, x}, {-y, y}]]

so that, for example,

In[4]:=
f[a, b]
Out[4]=
{-a - b, -a + b, a - b, a + b}

Then, map f over cset and Flatten:

In[5]:=
newSet = Flatten[f /@ cset]
Out[5]=
{-a - b, -a + b, a - b, a + b, -a - c, -a + c, a - c,
  a + c, -a - d, -a + d, a - d, a + d, -b - c, -b + c,
  b - c, b + c, -b - d, -b + d, b - d, b + d, -c - d,
  -c + d, c - d, c + d}

You now get all the elements where the first term comes with a minus sign:

In[6]:=
Cases[newSet, -x_ + y_]
Out[6]=
{-a - b, -a + b, a - b, -a - c, -a + c, a - c, -a - d,
  -a + d, a - d, -b - c, -b + c, b - c, -b - d, -b + d,
  b - d, -c - d, -c + d, c - d}

and filter out those elements which have a second minus sign:

In[7]:=
DeleteCases[Cases[newSet, -x_ + y_], -x_ - y_]
Out[7]=
{-a + b, a - b, -a + c, a - c, -a + d, a - d, -b + c,
  b - c, -b + d, b - d, -c + d, c - d}

I guess this is what you were looking for. The logic may be extended to
cover more general cases.

Tomas Garza
Mexico City
----- Original Message -----
From: "Michael Chang" <michael_chang86 at hotmail.com>
To: mathgroup at smc.vnet.net
Subject: [mg37450] [mg37436] Combination/Permutation questions


> Hi everyone,
>
> I'm running Mathematica 4.1 on Windoze XP, and have some newbie
> combination/permutation questions, and am hoping that the collective
> wisdom of this newsgroup can help/guide me out!  ;)
>
> First, suppose that I have 4 objects, a, b, c, and d, respectively.
> How can I generate the permutation set when chosing, say, only *2*
> elements.
>
> In[1]:=  Permutations[{a,b,c,d}]
>
> gives me the permutation set when choosing *all* 4 objects ... :(
>
> Second, for the same four objects (a,b,c,d), to generate the
> *combination* set (with 2 elements), I use:
>
> In[2]:=  Needs["DiscreteMath`Combinatorica`"];
> In[3]:=  cset=KSubsets[{a,b,c,d},2]
>
> and this generates the expected 6 combinatorial pairs
> ({{a,b},{a,c},{a,d},{b,c},{b,d},{c,d}}).
>
> What I'd like to do next is add each combinatorial set, and I am able
> to do this correctly via:
>
> In[4]:=  Plus@@Transpose[cset]
>
> to obtain {a+b,a+c,a+d,b+c,b+d,c+d}.
>
> My problem lies in the fact that now, I'd like to be able to allow
> *each* (a,b,c,d) element to be either plus, or minus (in reality, I'm
> trying to generate combinatorial adds/minuses for *functions*
> (a,b,c,d)), and to still generate the 'sum' of the cominatorial set.
> So for instance, in my current example, for the *first* {a,b}
> combinatorial pair, I'd like to be able to generate
>
> In[5]:=  Plus@@Transpose[Partition[Flatten[Outer[List,{a,-a},{b,-b}]],2]]
>
> (which generates {a+b,a-b,-a+b,-a-b}) ... only I'd like this to be
> somehow done automatically for *each* combinatorial pair (and, for the
> more general case when I generate combinatorial sets involving only
> 'k' elements).  I've struggled with this for a while, and am only able
> to generate such a list *manually* for each of my six original
> combinatorial pairs ... a tedious, and somewhat tiresome procedure! :(
>  Is there a way of 'easily' doing this?!?
>
> With my newly generated list (having 4*6 'elements'), how can I also
> go about finding which expressions involve/use only, say, 1 Minus?  Is
> there an 'easy' way of doing this too?  (For instance, I'd like to
> then 'filter' for (a-b) and (b-a) ...)  (Perhaps the count of 1 Minus
> is a little contrived for this example here, but for the more general
> case I'll probably be considering, I might need to filter for, say,
> (longer) expressions involving 2 Minuses (say).)
>
> My apologies in advance for my rather long email, but as always, any
> feedback and help would be most welcome and appreciated!
>
> Thanks,
>
> Michael
>
>




  • Prev by Date: Re: Not quite a Swell FLOOP?
  • Next by Date: Commutative Algebra Group
  • Previous by thread: Combination/Permutation questions
  • Next by thread: Re: Combination/Permutation questions