fix: update big-data solutions (#61)

See https://github.com/doocs/advanced-java/issues/61#issuecomment-757509594 for details.
This commit is contained in:
yanglbme
2021-01-11 10:25:58 +08:00
parent 85603e3620
commit f710d10712
2 changed files with 4 additions and 2 deletions

View File

@@ -12,7 +12,7 @@
#### 方法二:位图法
40 亿个不重复整数,我们用 40 亿个 bit 来表示初始位均为 0那么总共需要内存4, 000, 000, 000b≈512M。
由于 unsigned int 数字的范围是 `[0, 1 << 32)`,我们用 `1<<32=4,294,967,296` 个 bit 来表示每个数字。初始位均为 0那么总共需要内存4,294,967,296b≈512M。
我们读取这 40 亿个整数,将对应的 bit 设置为 1。接着读取要查询的数查看相应位是否为 1如果为 1 表示存在,如果为 0 表示不存在。

View File

@@ -56,6 +56,8 @@ for i in range(8):
遍历 2.5 亿个整数,查看位图中对应的位,如果是 00则变为 01如果是 01 则变为 10如果是 10 则保持不变。遍历结束后,查看位图,把对应位是 01 的整数输出即可。
当然,本题中特别说明:**内存不足以容纳这 2.5 亿个整数**2.5 亿个整数的内存大小为2.5e8/1024/1024/1024=0.93G,也即是说内存不足 1G而位图法所需要的内存大小为 1G因此本题并不适合用位图法解决。
### 方法总结
**判断数字是否重复的问题**,位图法是一种非常高效的方法。
**判断数字是否重复的问题**,位图法是一种非常高效的方法,当然前提是:内存要满足位图法所需要的存储空间