1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 The GSL Team.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "GNU General Public License" and "Free Software
Needs Free Documentation", the Front-Cover text being "A GNU Manual",
and with the Back-Cover Text being (a) (see below). A copy of the
license is included in the section entitled "GNU Free Documentation
License".
(a) The Back-Cover Text is: "You have the freedom to copy and modify this
GNU Manual." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Scientific Library – Reference Manual: Shuffling and Sampling</title>
<meta name="description" content="GNU Scientific Library – Reference Manual: Shuffling and Sampling">
<meta name="keywords" content="GNU Scientific Library – Reference Manual: Shuffling and Sampling">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Function-Index.html#Function-Index" rel="index" title="Function Index">
<link href="Random-Number-Distributions.html#Random-Number-Distributions" rel="up" title="Random Number Distributions">
<link href="Random-Number-Distribution-Examples.html#Random-Number-Distribution-Examples" rel="next" title="Random Number Distribution Examples">
<link href="The-Logarithmic-Distribution.html#The-Logarithmic-Distribution" rel="previous" title="The Logarithmic Distribution">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Shuffling-and-Sampling"></a>
<div class="header">
<p>
Next: <a href="Random-Number-Distribution-Examples.html#Random-Number-Distribution-Examples" accesskey="n" rel="next">Random Number Distribution Examples</a>, Previous: <a href="The-Logarithmic-Distribution.html#The-Logarithmic-Distribution" accesskey="p" rel="previous">The Logarithmic Distribution</a>, Up: <a href="Random-Number-Distributions.html#Random-Number-Distributions" accesskey="u" rel="up">Random Number Distributions</a> [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Shuffling-and-Sampling-1"></a>
<h3 class="section">20.39 Shuffling and Sampling</h3>
<p>The following functions allow the shuffling and sampling of a set of
objects. The algorithms rely on a random number generator as a source of
randomness and a poor quality generator can lead to correlations in the
output. In particular it is important to avoid generators with a short
period. For more information see Knuth, v2, 3rd ed, Section 3.4.2,
“Random Sampling and Shuffling”.
</p>
<dl>
<dt><a name="index-gsl_005fran_005fshuffle"></a>Function: <em>void</em> <strong>gsl_ran_shuffle</strong> <em>(const gsl_rng * <var>r</var>, void * <var>base</var>, size_t <var>n</var>, size_t <var>size</var>)</em></dt>
<dd>
<p>This function randomly shuffles the order of <var>n</var> objects, each of
size <var>size</var>, stored in the array <var>base</var>[0..<var>n</var>-1]. The
output of the random number generator <var>r</var> is used to produce the
permutation. The algorithm generates all possible <em>n!</em>
permutations with equal probability, assuming a perfect source of random
numbers.
</p>
<p>The following code shows how to shuffle the numbers from 0 to 51,
</p>
<div class="example">
<pre class="example">int a[52];
for (i = 0; i < 52; i++)
{
a[i] = i;
}
gsl_ran_shuffle (r, a, 52, sizeof (int));
</pre></div>
</dd></dl>
<dl>
<dt><a name="index-gsl_005fran_005fchoose"></a>Function: <em>int</em> <strong>gsl_ran_choose</strong> <em>(const gsl_rng * <var>r</var>, void * <var>dest</var>, size_t <var>k</var>, void * <var>src</var>, size_t <var>n</var>, size_t <var>size</var>)</em></dt>
<dd><p>This function fills the array <var>dest</var>[k] with <var>k</var> objects taken
randomly from the <var>n</var> elements of the array
<var>src</var>[0..<var>n</var>-1]. The objects are each of size <var>size</var>. The
output of the random number generator <var>r</var> is used to make the
selection. The algorithm ensures all possible samples are equally
likely, assuming a perfect source of randomness.
</p>
<p>The objects are sampled <em>without</em> replacement, thus each object can
only appear once in <var>dest</var>[k]. It is required that <var>k</var> be less
than or equal to <code>n</code>. The objects in <var>dest</var> will be in the
same relative order as those in <var>src</var>. You will need to call
<code>gsl_ran_shuffle(r, dest, n, size)</code> if you want to randomize the
order.
</p>
<p>The following code shows how to select a random sample of three unique
numbers from the set 0 to 99,
</p>
<div class="example">
<pre class="example">double a[3], b[100];
for (i = 0; i < 100; i++)
{
b[i] = (double) i;
}
gsl_ran_choose (r, a, 3, b, 100, sizeof (double));
</pre></div>
</dd></dl>
<dl>
<dt><a name="index-gsl_005fran_005fsample"></a>Function: <em>void</em> <strong>gsl_ran_sample</strong> <em>(const gsl_rng * <var>r</var>, void * <var>dest</var>, size_t <var>k</var>, void * <var>src</var>, size_t <var>n</var>, size_t <var>size</var>)</em></dt>
<dd><p>This function is like <code>gsl_ran_choose</code> but samples <var>k</var> items
from the original array of <var>n</var> items <var>src</var> with replacement, so
the same object can appear more than once in the output sequence
<var>dest</var>. There is no requirement that <var>k</var> be less than <var>n</var>
in this case.
</p></dd></dl>
<hr>
<div class="header">
<p>
Next: <a href="Random-Number-Distribution-Examples.html#Random-Number-Distribution-Examples" accesskey="n" rel="next">Random Number Distribution Examples</a>, Previous: <a href="The-Logarithmic-Distribution.html#The-Logarithmic-Distribution" accesskey="p" rel="previous">The Logarithmic Distribution</a>, Up: <a href="Random-Number-Distributions.html#Random-Number-Distributions" accesskey="u" rel="up">Random Number Distributions</a> [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|