Re: Lists and rules
- To: mathgroup at smc.vnet.net
- Subject: [mg66490] Re: [mg66485] Lists and rules
- From: Adriano Pascoletti <pascolet at dimi.uniud.it>
- Date: Wed, 17 May 2006 03:29:16 -0400 (EDT)
- References: <200605160349.XAA01113@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Thomas,
this creates a random list of m integers between 1 and k:
In[2]:=
k=3;m=15;SeedRandom[6516];
T=Table[Random[Integer,{1,k}],{m}]
Out[2]=
{3,1,1,3,3,2,3,3,2,1,3,2,3,1,1}
and this assigns to S[i] the flattened list of positions of i in T
(1²i²k)
In[7]:=
Scan[(S[#]=Flatten@Position[T,#])&,Range[k]]
The sets are
In[8]:= S[1]
Out[8]= {2,3,10,14,15}
In[9]:= S[2]
Out[9]= {6,9,12}
In[10]:= S[3]
Out[10]= {1,4,5,7,8,11,13}
This approach requires linear (i.e. O(m)) time and space.
Hope it helps
Adriano Pascoletti
On 16 mag 2006, at 05:49, Thomas Schmelzer wrote:
> Experts,
> I would like to produce a decent piece of code for one of my projects.
> I am constructing a list of sets
>
> S_1, S_2 and S_3
>
> where S_j = { m , T[[1,m]] == j, m running from 1 to 100}
>
> T[[1,*]] is a row vector containing only 1, 2 and 3.
>
> I could setup a for loop and work with append. I have done that, but I
> believe this approach is neither efficient nor elegant. Any hints
> for a
> newbie?
>
> Best,
> Thomas
>
>
>
- References:
- Lists and rules
- From: "Thomas Schmelzer" <thomas.???@balliol.ox.ac.uk>
- Lists and rules