如何设计一个高效算法从N个正整数中,随机选取n个不同的随机数 n<=N
2015-03-09 09:11
369 查看
1、若N不算大,且N>>n。可以采用数组存储1-N个数,然后运用随机函数产生一个随机数m,以m为下标的数组索引值即为所找,同时将最后一个元素赋值到该索引所在地址,然后将数组大小减少1后,再次调用随机函数产生随机数,然后又将其元素与倒数第二个交换。依次类推。
2、若N较大,则方法1存在较大的不足就是需要耗费大量的存储空间。
2、若N较大,则方法1存在较大的不足就是需要耗费大量的存储空间。
相关文章推荐
- 算法:如何高效产生m个n范围内的不重复随机数(m<=n)
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。
- 如何高效产生m个n范围内的不重复随机数(m<=n)
- A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效
- 设计程序,单击【随机数】按钮,使用Math对象的random函数产生一个0-100之间(含0-100)的随机整数,并在对话框中显示,如下图。单击【计算】按钮,计算该随机数的平方、平方根和自然对数,保留两位小数,并在对话框中显示,如下图。
- 如何高效产生m个n范围内的不重复随机数(m<=n)
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10), 设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短
- 如何高效产生m个n范围内的不重复随机数(m<=n)
- A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效。
- A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效。
- 设计一个算法,要求在20个数字中(0到19)随机选取十个数字,但是这十个数字不能重复(用C语言或者OC实现)
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效
- 陈利人 面试题 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。
- A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效
- A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效
- A,B两个整数集合,设计一个算法求他们的交集,尽可能的高效
- 12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
- # include <errno.h >查看错误代码errno是调试程序的一个重要方法。当Linux C API函数发生异常时,一般会将errno变量赋值一个整数,不同的值表示不同的含义,可以通过查看
- 设n个不同的整数排好序后存于T[1..n]中,若存在一个下标i(1≤ i ≤ n),使得T[i]=i。试设计一个有效算法找到这个下标,要求算法在最坏情形下的计算时间为O(log n)