如何快速顺序生成一亿个数字 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hiugo
V2EX    程序员

如何快速顺序生成一亿个数字

  •  
  •   hiugo 2022-05-19 01:12:57 +08:00 5653 次点击
    这是一个创建于 1247 天前的主题,其中的信息可能已经有所发展或是发生改变。

    rt , 从一顺序生成数字,直到一亿

    33 条回复    2022-05-20 08:17:46 +08:00
    trn4
        1
    trn4  
       2022-05-19 01:30:10 +08:00
    读取预先在内存中生成好的一亿个数字。占用 400M*4Byte=400MB 内存。
    westoy
        2
    westoy  
       2022-05-19 01:41:16 +08:00 via Android
    mmap+seek+tell ?
    yousabuk
        3
    yousabuk  
       2022-05-19 01:41:51 +08:00 via iPhone   1
    @xiadong1994 算得好,你咋算的?
    yousabuk
        4
    yousabuk  
       2022-05-19 01:50:12 +08:00 via iPhone
    分配 100M 个 U32 (内存:100M * 4Byte = 400MB )

    分成 10 个并行循环赋值各自的内存地址,应该挺快的。
    trn4
        5
    trn4  
       2022-05-19 02:08:31 +08:00
    @yousabuk #3 For 循环写一个呀。哈哈其实我的意思是这个提问没头没尾的,要快一律按可以预处理理解。
    thedrwu
        6
    thedrwu  
       2022-05-19 03:38:15 +08:00 via Android   1
    冷知识:普通 PC 单线程不到 10 分钟就能 print 出所有浮点数。
    Rocketer
        7
    Rocketer  
       2022-05-19 04:45:05 +08:00 via iPhone   1
    你的场景是什么?
    msg7086
        8
    msg7086  
       2022-05-19 07:56:59 +08:00 via Android
    for 循环直接写,然后编译的时候打开 simd 矢量化优化和 unroll loop 优化。再上去的话搞个多线程。
    deep89381
        9
    deep89381  
       2022-05-19 08:48:54 +08:00   5
    是不是问题太简单了,不知有啥应有场景
    seq 1 100000000 > seq.txt
    whenov
        10
    whenov  
       2022-05-19 08:49:21 +08:00 via Android   2
    什么叫生成?打印到屏幕?写入到硬盘?保存到内存?

    如果允许惰性求值的话,时间接近 0 秒
    luozic
        11
    luozic  
       2022-05-19 09:09:01 +08:00
    这个数字是什么进制的? 需要输出到哪里?
    AV1
        12
    AV1  
       2022-05-19 09:23:17 +08:00
    一击脱离?
    xuanbg
        13
    xuanbg  
       2022-05-19 09:27:19 +08:00
    看你用什么存储了,如果是数组、链表、栈、位图这些有序的数据结构,那就压根不需要生成。用的时候根据数据结构直接就算出来了。
    coolmenu
        14
    coolmenu  
       2022-05-19 11:34:28 +08:00   1
    刚看完房子那个帖子,看到这个标题,脑补成了如何快速弄到 1 亿,赶快点进一看看。。。。
    ipwx
        15
    ipwx  
       2022-05-19 11:37:56 +08:00   1
    time seq 1 100000000 > /dev/null
    seq 1 100000000 > /dev/null 15.53s user 0.02s system 99% cpu 15.553 total
    Kinnice
        16
    Kinnice  
       2022-05-19 11:39:36 +08:00
    @coolmenu 真看到相关帖子 @我一下,我也想
    ispinfx
        17
    ispinfx  
       2022-05-19 12:27:59 +08:00
    `list(range(100000000))` -> 2 秒
    yfugibr
        18
    yfugibr  
       2022-05-19 12:38:59 +08:00
    jaysonmac
        19
    jaysonmac  
       2022-05-19 12:57:15 +08:00 via Android
    @yousabuk 100M 个 4Byte 不等于 400MB 哦,除非按 1000 进制算。按 1024 算大概 381.5MB
    ffxrqyzby
        20
    ffxrqyzby  
       2022-05-19 13:09:26 +08:00
    @jaysonmac #19 算的挺好, 下次别算了
    Chaconne
        21
    Chaconne  
       2022-05-19 13:18:20 +08:00
    crunch 0123456789 0 9 -o test.txt
    BeautifulSoap
        22
    BeautifulSoap  
       2022-05-19 13:19:09 +08:00
    lz 简直是一击脱离的典范

    也不说这一亿个数字是拿来干嘛的,如果只是放内存里需要的时候用一下,连计算都不需要计算,直接按照规律要的时候自动计算出指定位置的数就行了。这样连空间分配都不需要了

    如果要存到文件的话,一亿个 64 位整数需要 763MB 来存储,瓶颈不会在 cpu 或内存上,而在你硬盘上
    jessun1990
        23
    jessun1990  
       2022-05-19 14:19:06 +08:00
    time seq 1 100000000 > /dev/null

    ________________________________________________________
    Executed in 612.18 millis fish external
    usr time 588.62 millis 125.00 micros 588.50 millis
    sys time 23.32 millis 50.00 micros 23.27 millis

    @ipwx 请问你用的是 mac 吗? 我的输出格式与你的不一样,我用的是 manjaro 。
    ipwx
        24
    ipwx  
       2022-05-19 15:04:25 +08:00
    @jessun1990 是 mac 。看起来 Linux 做了优化,>/dev/null 不用过系统调用。mac 实打实系统调用花了 17 秒
    suyuyu
        25
    suyuyu  
       2022-05-19 15:11:10 +08:00
    我想看看阿 3 的想法
    084
        26
    084  
       2022-05-19 15:45:55 +08:00
    (base) ~/ time seq 1 100000000 > /dev/null
    seq 1 100000000 > /dev/null 19.66s user 0.06s system 99% cpu 19.807 total
    084
        27
    084  
       2022-05-19 15:46:19 +08:00
    @084 #26 黑果请求一战
    ipwx
        28
    ipwx  
       2022-05-19 15:54:57 +08:00
    @jessun1990 顺便我的 Linux Mint 主机:

    $ time seq 1 100000000 > /dev/null

    real 0m0.544s
    user 0m0.536s
    sys 0m0.008s
    sunmker
        29
    sunmker  
       2022-05-19 15:58:17 +08:00
    ubuntu@VM-16-14-ubuntu:~$ time seq 1 100000000 > /dev/null

    real 0m0.860s
    user 0m0.812s
    sys 0m0.048s
    dangyuluo
        30
    dangyuluo  
       2022-05-19 16:08:25 +08:00
    定义快速
    wangweiggsn
        31
    wangweiggsn  
       2022-05-19 17:22:25 +08:00
    我来个 Excel 版本的吧,2007 及以上版本都 ok 。
    左上角地址栏写 A:EA ,回车,这片区域被选中,编辑栏写公式:=ROW()+1048576*(COLUMN()-1) 然后按 ctrl+Enter ,我 i5-10210U+16G 内存配置,等 30 秒左右 OK ,1.37 亿个数据纵向整齐排列了。要横向的改下公式就行,很容易。需要的话保存文件为自己需要的格式即可。过程中电脑内存和 cpu 会基本占满,建议 公式-计算选项,选手动,否则算完后 CPU 占用率仍然较高。
    tramm
        32
    tramm  
       2022-05-19 17:38:17 +08:00
    我也来一个:
    申请 1 亿个长度的 char 数组.
    其每个元素的内存地址就是你要的.
    documentzhangx66
        33
    documentzhangx66  
       2022-05-20 08:17:46 +08:00
    time seq 1 100000000 > x.log

    real 0m25.580s
    user 0m2.975s
    sys 0m4.955s
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1104 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 58ms UTC 23:23 PVG 07:23 LAX 16:23 JFK 19:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86