File: Shuffling-and-Sampling.html

package info (click to toggle)
gsl-ref-html 2.3-1
  • links: PTS
  • area: non-free
  • in suites: bullseye, buster, sid
  • size: 6,876 kB
  • ctags: 4,574
  • sloc: makefile: 35
file content (156 lines) | stat: -rw-r--r-- 7,676 bytes parent folder | download
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 &ndash; Reference Manual: Shuffling and Sampling</title>

<meta name="description" content="GNU Scientific Library &ndash; Reference Manual: Shuffling and Sampling">
<meta name="keywords" content="GNU Scientific Library &ndash; 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> &nbsp; [<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,
&ldquo;Random Sampling and Shuffling&rdquo;.
</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 &lt; 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 &lt; 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> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>