Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2001
*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 2001

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

Search the Archive

Re: Random Sampling Without Replacement?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg26604] Re: [mg26586] Random Sampling Without Replacement?
  • From: Daniel Lichtblau <danl at wolfram.com>
  • Date: Thu, 11 Jan 2001 10:39:14 -0500 (EST)
  • References: <200101090652.BAA00242@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

"A. E. Siegman" wrote:
> 
> Looking for neat compact way to extract three distinct (i.e., nonequal)
> randomly selected integers k1, k2, k3 from the range 1 to N (N > 3) --
> in other words, random sampling without replacement -- ???

A general efficient way to sample without replacement may be implemented
as a shuffling algorithm that iteratively swaps first element with a
random element between start and end, then swaps second with a random
element between second and end, and so on. In essence we shuffle as we
deal (don't try this in Las Vegas).

SetAttributes[deal, HoldFirst]
deal[deck_, start_, end_] := Module[
	{len=Length[deck], rand},
	Do [
		rand = Random[Integer,{j,len}];
		deck[[{j,rand}]] = deck[[{rand,j}]],
		{j,start,end}];
	Take[deck, {start,end}]
	]

deck = Range[52];

Let's pick four.

In[178]:= deal[deck, 1, 4]
Out[178]= {44, 18, 7, 9}

Now we can pick some more, say seven.

In[179]:= deal[deck, 5, 11]
Out[179]= {36, 34, 11, 45, 8, 2, 46}


Daniel Lichtblau
Wolfram Research


  • Prev by Date: Re: Expansion Coefficients in Multivariable Series Expansions?
  • Next by Date: RE: Expansion Coefficients in Multivariate Series Expansions?
  • Previous by thread: Re: Random Sampling Without Replacement?
  • Next by thread: Re: Random Sampling Without Replacement?