从0到m-1这m个数中随机取出n个(n<=m) 要求每个数被取到的可能性相等。
第一个方法是把这m个数丢到一个List里面 然后用nextInt(list.size())来产生随机数 然后把list里面对应的元素丢到另一个数组或者list里面 这个方法本来是不错的 但要注意的是 为了保证每个元素取到的概率相等 需要每取出一个元素 就把它从list里面删除 原因就不解释了 简单的概率问题。但众所周知的是 list的remove(int index)方法 效率并不高 尤其是当m和n很大的时候 每一次调用remove ArrayList都需要进行数组的copy 而LinkedList需要进行链表的遍历。
所以再考虑这个问题,用数组来储存这m个数是很好的 而且其实我们并不需要知道到底哪些下标的元素被选中了 第一个方法的效率低下的原因在于 nextInt(int i)这个方法是从0 到i-1随机生成整数 这里要求0到i-1是连续的i个整数 而我们选取了一个数之后 为了满足连续整数的条件 就要把这个数删去 而频繁删除的效率是低下的 所以换一种思路 不采用删除 而采用交换
第二个方法 比如0-99这100个数字 从小到大放在一个数组里面 现在要选10个 我们只需要随机打乱这个数组 然后选取前10个元素就好 随机打乱的方法就是 从数组头元素开始 每次产生一个随机数n 然后交换这两个数 而且只需要交换十次就够了 因为我们并不取下标超过10后面的数字
import java.util.Random;
public class Rand {
public static void randSelect(int[] nums, int n) {
Random rand = new Random();
for(int i = 0; i < n; i ++){
swap(nums , i, rand.nextInt(nums.length-i)+i);
}
}
public static void swap(int[] nums, int m , int n){
int temp = nums[n];
nums[n] = nums[m];
nums[m] = temp;
}
public static void main(String[] args) {
int[] nums = new int[100];
for(int i = 0;i < 100;i++){
nums[i]=i;
}
randSelect(nums,10);
for(int i = 0;i < 10; i ++){
System.out.println(nums[i]);
}
}
}
/*output :
27
79
30
58
41
54
75
18
26
5
*/
分享到:
相关推荐
排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列的所有可能的方式;组合则是指不考虑元素的顺序,仅考虑元素的选取。在这个问题中,我们不仅要考虑元素的选取,还要考虑它们的顺序,因此属于...
2. 当每个样本有 M 个属性时,在决策树的每个节点需要分裂时,随机从这 M 个属性中选取出 m 个属性,满足条件 m << M。然后从这 m 个属性中采用某种策略(比如说信息增益)来选择 1 个属性作为该节点的分裂属性。 3....
组合是一个基本的数学问题,本程序的目标是输出从n个元素中取m个的所有组合。 例如从[1,2,3]中取出2个数,一共有3中组合:[1,2],[1,3],[2,3]。(组合不考虑顺序,即[1,2]和[2,1]属同一个组合) 本程序的思路(来自...
- 排列:从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列。 - 组合:从n个不同元素中取出m(m≤n)个元素,不考虑顺序,称为从n个不同元素中取出m个元素...
- 排列:从n个不同元素中取出m个元素的所有排列方式的数量。排列数Amn=n!/(n-m)!,全排列是m=n的情况。 - 组合:不考虑顺序,仅考虑选择的元素。组合数Cmn=n!/[(n-m)!m!],组合数的两个性质包括Cmn=Cnm以及Cmn+Cm-...
- 乘法原理:如果一个事件的发生需要两个步骤相继完成,且第一步有m种方法,第二步有n种方法,则总共的方法数为m×n种。 6. 概率的计算公式 - 加法公式:P(A∪B)=P(A)+P(B)-P(A∩B) - 减法公式:P(A-B)=P(A)-P(A∩B...
离散型随机变量是指可能取有限个或可数无限多个数值的随机变量,比如上面问题中的甲队得分X。在软件开发中,这类变量常常用于模拟和分析系统中的不确定性和风险,例如用户行为、网络延迟、系统故障等。 在第一个...
这里的P(X=k)的概率公式为P(X=k)=C(m,k) * C(n-m,M-k) / C(n,M),其中m是总体中成功类别的对象数,n是总体大小,M是样本大小,k是成功事件在样本中的数目。 2. 离散均匀分布:问题2中随机变量X的每个值出现的概率...
- Cmn=Cnm,从n个不同元素中取m个元素的组合数等于取n-m个元素的组合数。 4. 常用结论: - Cmn=Cn-mn,取出m个元素的方法数等于取出n-m个元素的方法数。 - Cmn+Cm-1n=Cmn+1,从n+1个元素中取m个元素的组合数等于不...
- 排列:考虑元素的顺序,比如从n个不同元素中取出m个元素的所有可能排列,表示为An,m。 - 组合:不考虑元素的顺序,只关心哪几个元素被选中,表示为Cn,m或nCm,其中n!表示n的阶乘。 2. 排列公式: An,m=n!(n-m)...
2. **离散型随机变量的分布列**:例如题目中的`ξ`,表示从5个球中取出3个球时,最小号码的可能取值及其对应的概率。分布列列出随机变量所有可能的值以及每个值发生的概率,要求所有概率之和为1。 3. **概率计算**...
4. **超几何分布**:在不放回抽样中,从含有M件次品和N-M件正品的总体中抽取n件产品,X表示抽到的次品数量,其概率公式为P(X=k) = CkMCn-kN-M/CnN,其中0≤k≤min{M, n}。 5. **计算概率的方法**: - 离散型随机...
离散型随机变量是指可能取有限个或可数无限多个不同值的随机变量,其概率分布列是一个列出随机变量所有可能取值以及对应概率的表格。 1. 分布列的性质:随机变量的每个取值对应的概率必须非负,且所有取值的概率之...
当m等于1时,C(n, 1) = n,代表从n个元素中选择1个的组合数;当m等于n时,C(n, n) = 1,因为只有一种方式选择所有元素。 3. **其他排列与组合公式** - 循环排列:从n个元素中取出r个元素进行循环排列的数目是A(n,...
在古典概型中,我们可以计算事件发生的概率,如果一个试验有n个等可能的基本事件,而事件A包含了其中的m个基本事件,那么事件A发生的概率P(A)就是m除以n,即P(A) = m/n。 对于概率的计算,我们有古典概型的概率公式...
**排列数**(Permutation)是指从m个不同元素中取出n(n≤m)个元素,并按照一定的顺序排成一列的方式。排列数的计算公式为: \[ A(m,n) = \frac{m!}{(m-n)!} \] 例如,在一个盒子中有10个完全相同的球,每个球上编有...
- 排列:从n个不同元素中取出m个元素进行排列的数目为P(n, m) = n! / (n-m)!。 - 组合:从n个不同元素中取出m个元素组成组合的数目为C(n, m) = n! / [m!(n-m)!]。 6. 泊松过程与泊松分布: - 泊松过程是一种离散...
- **平方取中法**:该方法的基本思想是将一个2s位的十进制随机数平方后得到一个4s位的数,然后从中取出中间的2s位作为新的随机数。 - **乘积取中法**:该方法是在平方取中法的基础上进行改进,通过两个初始随机数的...
排列考虑的是顺序,比如从n个不同元素中取出m个元素的排列数Amn,计算时要考虑到顺序的影响。而组合则不考虑顺序,如Cmn,是从n个不同元素中无序选取m个元素的方法数。 再者,数学归纳法是证明数学命题的有效方法,...
超几何分布的概率公式为P(X=k) = C(M,k) * C(N-M, n-k) / C(N,n),其中C(a,b)表示组合数,表示从a个不同元素中取b个元素的方法数。超几何分布列的特点是,每一行的和代表了在一定条件下抽取的n件产品中次品总数的...