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

2022-05-19 01:12:57 +08:00
 hiugo

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

4910 次点击
所在节点    程序员
33 条回复
xiadong1994
2022-05-19 01:30:10 +08:00
读取预先在内存中生成好的一亿个数字。占用 400M*4Byte=400MB 内存。
westoy
2022-05-19 01:41:16 +08:00
mmap+seek+tell ?
yousabuk
2022-05-19 01:41:51 +08:00
@xiadong1994 算得好,你咋算的?
yousabuk
2022-05-19 01:50:12 +08:00
分配 100M 个 U32 (内存:100M * 4Byte = 400MB )

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/853822

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX