忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: wenjun3000

[文本处理] 生成1亿个不重复的8位随机整数,请大神给代码! [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
发表于 2016-08-16 18:22 |显示全部楼层
请问如何运行?

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
发表于 2016-08-16 19:57 |显示全部楼层
那篇博文不是收录在C里面的吗 应该是C?

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
发表于 2016-08-17 12:08 |显示全部楼层
0-9:
$> perl -e '%a=map {$_=>""} (0..9); printf "%08d\n", $_ for(keys %a);'
00000009
00000000
00000008
00000006
00000007
00000003
00000001
00000005
00000004
00000002

论坛徽章:
0
发表于 2016-08-17 17:25 |显示全部楼层
符合位数要求的整数从00000000到99999999恰好有1亿个,如果依次放入二维数组的话,一个简单的循环语句就能完成主要功能了。如果想随机取出其中某个整数,再写一段随机数生成代码,去读取二维数组中某个下标的元素就行了。不用很复杂。几十行代码足够了。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
发表于 2016-08-17 17:37 |显示全部楼层
请大神给代码时,顺便写下如何使用啊

论坛徽章:
12
CU大牛徽章
日期:2013-04-17 11:20:3615-16赛季CBA联赛之福建
日期:2017-03-13 11:33:442017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:13:29IT运维版块每日发帖之星
日期:2016-03-15 06:20:01IT运维版块每日发帖之星
日期:2015-10-02 06:20:00CU十二周年纪念徽章
日期:2013-10-24 15:41:34CU大牛徽章
日期:2013-09-18 15:15:45CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-04-17 11:46:39CU大牛徽章
日期:2013-04-17 11:46:2815-16赛季CBA联赛之吉林
日期:2017-05-25 16:45:47
发表于 2016-08-18 09:05 |显示全部楼层
其实这是一个经典的洗牌算法啊。因为8位以内的10进制数刚好是1亿个,所以所谓的不重复只能是取所有的数而已,再者,所谓的随机只能是顺序是随机的。为了减少复杂度,其实可以构建这样一个算法来实现顺序的随机(同时保证唯一性,即每个元素只取1次)。
1. 构造出1亿的数组(顺序的)A,当前数组有效长度(记为L)为1亿
2.第N次取出数值时(N=0,1,2...99999999 )
    2.1 取一个范围为[0, L-N) 内的随机整数,计为R
    2.2 交换 A[N] 和  A[N+R]
    2.3 输出A[N]为第N次的取出的数

这个算法的优点时交换的步骤不多(如果只取2000个就只交换2000次),而且很容易保证数据取出的唯一性

而完整的洗牌算法则是直接随机交换N次再取出需要的数(可以再通过抽取原则进一步改变随机顺序)

论坛徽章:
26
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之青岛
日期:2016-11-26 17:00:4615-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:54
发表于 2016-08-18 16:49 |显示全部楼层
  1. seq -w 0 99999999|shuf > randomSeqFile
复制代码

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
发表于 2016-08-18 18:24 |显示全部楼层
回复 17# moperyblue

运行5分钟左右,出现以下错误
QQ截图20160818182328.jpg    

论坛徽章:
26
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之青岛
日期:2016-11-26 17:00:4615-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:54
发表于 2016-08-18 18:45 |显示全部楼层
回复 18# wenjun3000


    内存不足

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-17 06:20:00每日论坛发贴之星
日期:2016-08-17 06:20:00
发表于 2016-08-18 19:12 |显示全部楼层
回复 19# moperyblue


那只能放弃了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票6.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP