MathGroup Archive 2007

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

Search the Archive

Re: How to make a loop for this problem!

  • To: mathgroup at smc.vnet.net
  • Subject: [mg75366] Re: How to make a loop for this problem!
  • From: Peter Pein <petsie at dordos.net>
  • Date: Fri, 27 Apr 2007 05:19:12 -0400 (EDT)
  • References: <f0pkt5$28h$1@smc.vnet.net>

pskmaths at googlemail.com schrieb:
> Hi all,
> 
> This comand:
> A = Array[Random[Integer] &, {3, 3}]
> generates a 3x3 random matrix its terms between 0 and 1.
> 
> I need to make a loop that geerates a finite number of matrices, let's
> say 512 and this loop check that non of the matrices is equal to
> another one (no repeated matrices)
> 
> I can geerate thoses random, matrices with this command:
> Do[Print[Array[Random[Integer] &, {3, 3}]], {512}]
> but I may have two matrices that are equal and also as far as I know I
> cann't use the out put because of the command, Print.
> 
> 

Hi,

there are only 512 distinct 3x3 matrices with elements out of the set {0,1}.
Therefore you can shuffle the list {0,1,2,...,511} and convert each number n
of this list into a matrix. To do this, convert n into binary representation
with leading zeroes and partition this list of 9 digits into three parts:

In[1]:=
<< "DiscreteMath`Combinatorica`"
mats = (Partition[IntegerDigits[#1, 2, 9], 3] & ) /@
   RandomPermutation[Range[0, 511]];

the first two matrices:

In[3]:= Take[mats, 2]
Out[3]=
{{{1, 1, 0},
  {0, 1, 1},
  {1, 1, 0}},
 {{1, 1, 0},
  {0, 1, 0},
  {1, 0, 0}}}

To check for duplicates (impossible):
In[4]:= Sort[mats] === Union[mats]
Out[4]= True

I had to sort "mats" because Union gives a sorted output.


HTH,
Peter


  • Prev by Date: Re: How to make a loop for this problem!
  • Next by Date: Re: How to make a loop for this problem!
  • Previous by thread: Re: How to make a loop for this problem!
  • Next by thread: Re: How to make a loop for this problem!