因为项目需要,需要写一个算法来获取在F范围内,获取N个不同的值的算法,因为random方法产生的值,是有可能存在相同的值,所以,选出来的值以后需要把相同的值去掉,因此根据这个思路,便有了以下的算法:
public static int[] randomInt(int n, int f) {
int intRet[] = new int[n];
int intRd = 0;
int count = 0;
while (count < n) {
Random rdm = new Random(System.currentTimeMillis());
intRd = rdm.nextInt(f);
int flag = 0;
for (int i = 0; i < count; i++) {
if (intRet[i] == intRd) {
flag=1;
break;
}
}
if(flag==0){
intRet[count]=intRd;
count++;
}
}
return intRet;
}
原理很简单,就是随机生成N个数,然后通过循环去掉相同的。但是这个算法效率很差,特别是要选取的数字的个数超过1000以后,这个算法几乎需要1、2秒。因此为了解决这个问题,我引入了HashSet。因为Set内是不允许存在相同的值的,于是利用这个特性,写出了这个算法。
public static int[] randomSet(int n, int f){
Random rdm = new Random(System.currentTimeMillis());
Set<Integer> intSet = new HashSet<Integer>();
while(intSet.size()<n){
intSet.add(rdm.nextInt(f));
}
int intRet[] = new int[n];
Iterator<Integer> it = intSet.iterator();
int i=0;
while(it.hasNext()&i<n){
intRet[i] = Integer.parseInt(it.next().toString());
i++;
}
return intRet;
}
其实这个算法就是利用了Set的特性,去除相同的数值,而且这个算法效率非常高,特别是选取的数超过1000个的时候,效率可以比前面的算法提高上百倍。
分享到:
相关推荐
`date +%s%N`会返回当前时间戳(纳秒级),通过截取不同的位数,我们可以获取不同长度的随机数。例如: ```bash date +%s%N | cut -c6-13 # 获取8位数字 ``` 或者通过`md5sum`进一步处理得到混合字母和数字的组合...
本文将深入探讨如何使用C++生成随机数,以及如何应用四种不同的排序算法——冒泡排序、快速排序、归并排序和希尔排序,并分析它们的执行时间。 首先,让我们关注如何在C++中生成随机数。C++标准库提供了`<random>`...
这个函数非常基础,但功能强大,因为它提供了一种快速生成随机数的方式,且默认生成的数字精度较高。例如,如果你需要在0到1之间得到一个随机数,只需要调用`Math.random()`。 如果需要生成一个特定范围内的随机...
1. 使用`Math.random()`函数:这个方法会返回一个0.0到1.0之间(不包括1.0)的double类型随机数。可以通过将其乘以一个范围并转换为整数来得到特定范围内的随机数。例如,如果范围是[0, max),则公式为`(int) Math....
纯线性同余随机数生成器(LCG)是一种经典的伪随机数生成算法,它的基本原理是基于数学上的线性同余方程。这个方程是:X(n+1) = (a * X(n) + c) % m,其中X(n)是第n个随机数,a、c和m是固定的系数,而X(0)是初始值,...
- 在数字电路板测试中,传统的测试方法往往不能适应高输入端数量(n较大)的情况,因而随机测试方法应运而生,成为一种有效的测试手段。 - 随机测试需要能够产生满足特定分布的随机数序列,以模拟数字电路板在随机...
在编程和数据分析中,随机数生成器是一种非常重要的工具,特别是在模拟、统计计算和机器学习等领域。本主题将深入探讨正态分布、均匀分布以及布尔值随机数的生成方法,这些概念都与C++编程语言中的随机数生成紧密...
这是一种简洁且实用的方法,适合快速获得指定范围内的随机数。 3. 随机数在实际应用中的例子: 生成随机数在很多方面都有应用,例如,随机显示特效、网页内容的随机选择、测试数据的生成、小游戏中的随机事件处理等...
本文探讨了一种利用数字信号处理器(DSP)生成任意长度伪随机序列的方法,这种方法基于线性同余算法,并结合了Analog Devices公司的TigerSHARC20XS DSP芯片的特性,为系统设计提供了更灵活的解决方案。 线性同余...
本示例代码提供了一种实现方法,通过递归和位运算来达到目的。以下是对这段代码的详细解析: 1. **伪随机数与随机数的不均匀分布**: 计算机生成的随机数实际上是基于某种确定性算法的,因此被称为伪随机数。这些...
`System.Random`类提供了几个方法用于生成不同类型的随机数: 1. `Next()`:返回一个大于或等于0且小于`int.MaxValue`(2,147,483,647)的随机整数。 ```csharp int randomInt = ra.Next(); ``` 2. `Next(int)`...
### 第一种:使用`randomString`函数生成随机字符串 该方法定义了一个名为`randomString`的函数,其中参数`e`表示生成的字符串长度,默认值为32位。它使用一个预定义的字符集`t`,通过循环和`Math.random()`来获取...
模拟是一种通过构建物理或数学模型来模拟现实世界中的系统行为的方法。这种方法能够帮助我们了解这些系统的工作原理及发展趋势。具体来说,模拟是通过构造出一个模型,该模型能够反映出被研究系统的特征和行为模式,...
3. **生成并使用随机数**:最后,在需要使用随机数的地方直接调用`randomNumber.Next`方法即可获取一个随机数。例如: ```vbscript Dim random_num random_num = randomNumber.Next WScript.Echo "生成的...
1. **冒泡排序**:这是一种简单的排序方法,通过不断交换相邻的不正确顺序的元素来逐步排序。时间复杂度为O(n^2)。 2. **选择排序**:每次遍历找到最小(或最大)的元素放到正确的位置,直到所有元素排序完毕。时间...
在进行工程风险分析时,蒙特卡罗模拟是一种常用的方法,其核心在于通过产生具有特定分布的随机数,模拟各种不确定性因素对项目的影响,从而得出风险评估的概率分布特征。Matlab作为一种强大的科学计算工具,其内置的...
1. **简单随机抽样**:在统计学中,简单随机抽样是一种基本的抽样方法,要求每个个体被选中的概率相等。题目的第一道选择题D选项描述了简单随机抽样的特点,即从10个手机中逐个不放回地随机抽取2个,符合这一原则。 ...
对于从指定范围内随机抽取不重复的n个数,有以下两种常见方法: 1. 两重循环去重法:这种方法直观但效率较低。外层循环控制抽取次数,内层循环检查新生成的随机数是否已经存在于结果数组中。如果不存在,则添加到...
总的来说,蒙特卡罗方法是一种实用的数值计算工具,尤其在处理复杂和不确定的问题时,其简单易懂和高效快速的特点使其成为数学建模的重要手段。尽管存在计算量大和精度有限的局限,但结合现代计算资源,它已经成为了...
易语言,作为我国自主研发的一种简单易学的编程语言,旨在降低编程难度,让普通人也能掌握编程技术。本文将深入解析名为“M选N模块”的源码,帮助读者理解其核心原理并学会应用。 首先,我们要了解“M选N”这一概念...