业务场景:将 ip 地址,如 10.21.221.20 ,后两段( 221.20 )截取下来转成二进制。但是只能有 10bit 的存储空间可以存储,可行吗?有什么方式可以转换?保证唯一。避免如 22120 和 22121 转换后 10bit 是一样的。
1
Kagari 2019-08-21 11:54:18 +08:00
IPv4 本来就是 2 进制啊,也就是说后 2 段本来就是 8bit+8bit 的
|
2
favourstreet 2019-08-21 12:00:56 +08:00 via Android
为你的 ip 后两段分配 0~1023 的编号,查表。
|
4
ooxxcc 2019-08-21 12:03:29 +08:00 1
不可行
|
5
zhzbql 2019-08-21 12:05:07 +08:00 3
@verbose 10bit 只有 1024 个组合,16bit 有 65536 个组合,除非你们要存储的 ip 后两段不同组合小于等于 1024,不然怎么都会冲突。数学方面上的不可行
|
6
psychoo 2019-08-21 12:13:42 +08:00 via Android
没有
|
7
rrfeng 2019-08-21 12:15:35 +08:00 via Android
。。。。。我被你逗笑了
|
8
oxoxoxox 2019-08-21 12:21:37 +08:00
本来是 65536 个不同的值,你现在要求用 1024 个数来做索引,你说能不能做到。。。
|
9
Mistwave 2019-08-21 12:24:27 +08:00 via iPhone
信息熵了解一下
|
10
smdbh 2019-08-21 12:29:41 +08:00
需要配合掩码,有些是可以的
|
11
lihongming 2019-08-21 12:40:31 +08:00 via iPhone
这是在研究压缩率高达 98.5%的无损压缩算法?
|
12
whileFalse 2019-08-21 12:47:41 +08:00
你的目的是什么?如果是为了哈希,那可以直接丢弃高 6 位,只取低 10 位。
|
13
0ZXYDDu796nVCFxq 2019-08-21 12:48:22 +08:00 via Android
IP 地址是稠密的,就是说你要完整表达那就是完全不可压缩的
|
14
catcalse 2019-08-21 12:48:28 +08:00
拿个小本本,写上 a1 代表 10.21.221.20 , 然后把 a1 存起来
|
15
msg7086 2019-08-21 12:51:35 +08:00 1
难听的话我就不多说了,说出来伤人。好好说一句,阁下能不能学习一下计算机科学?
|
16
vjnjc 2019-08-21 12:52:43 +08:00
你真要存也可以,就像#14 说的那样.
当然无法存全部的 65536 个数字。 |
17
YvesX 2019-08-21 12:54:31 +08:00 8
如此循环下去,能把宇宙压缩成一个比特。
这很禅。 |
20
churchmice 2019-08-21 13:03:40 +08:00 via Android
@lihongming 你这算数水平
|
21
Raymon111111 2019-08-21 13:07:14 +08:00
做不到, 5l 说的很清楚了.
|
22
xiaopang132 2019-08-21 13:07:32 +08:00
|
24
vjnjc 2019-08-21 13:09:25 +08:00
@xiaopang132 对啊,所以没法存全部的数啊。实际上从信息的角度来说 10bit 怎么存 16bit 的信息啊?
|
26
littlewing 2019-08-21 13:12:51 +08:00 via iPhone
不可能
|
27
tt0411 2019-08-21 13:15:24 +08:00 2
所以只招相关专业的意义就在于此
|
28
pubby 2019-08-21 13:17:06 +08:00
@churchmice 没算错吧
|
29
liuminghao233 2019-08-21 13:22:37 +08:00 via iPhone
这要用魔法了吧
|
30
catcalse 2019-08-21 13:22:51 +08:00
10bit 想存整个宇宙。那谁都没办法
|
31
geelaw 2019-08-21 13:35:39 +08:00 via iPhone 3
@lihongming #11 压缩率是按位数变化计算的,不是按位数的指数函数。
@YvesX #17 如此循环只能把宇宙压缩到 10 bits (逃 ———— 用大学生的话来说是信息量的问题,用小学生的话来说这是非常简单的抽屉原理。 |
33
reus 2019-08-21 13:41:31 +08:00
有倒是有,有损的,要不要?
|
34
lights 2019-08-21 14:01:34 +08:00 via iPhone
上 32 进制吧,盲猜 32 进制的 10 位可以表示 16 进制的 16 位,233
|
35
lights 2019-08-21 14:07:12 +08:00 via iPhone
算一下
32 的 10 次方是 2 的 5×15 次方 16 的 16 次方是 2 的 4×16 次方 刚好可以哦 |
36
skydev 2019-08-21 14:16:33 +08:00
我们就当楼主一时糊涂吧 散了散了
|
37
lights 2019-08-21 14:18:50 +08:00 via iPhone
算错了,32 位不行,64 位才可以……
|
39
shoco 2019-08-21 14:54:23 +08:00
IP 地址可以用一个 Int 来表示,32 个字节,4 个 Byte
|
40
cz5424 2019-08-21 15:25:06 +08:00 via iPhone
把 ip 扔到黑洞里面,就压缩了。...୧((〃•̀ꇴ•〃))૭⁺✧逃..
|
41
douglas1997 2019-08-21 15:47:24 +08:00
10bit 如果结构上不同的话可能可以吧,但其实本质上还是增大了信息空间
|
42
qwerthhusn 2019-08-21 15:48:02 +08:00
16 位有 65536 个组合
10 位有 1024 个组合 要用这 1024 个组合映射 65536 个组合。。。。。 |
43
xiaopang132 2019-08-21 16:04:05 +08:00 1
@vjnjc 实际就是,没有办法..当然,在量子计算机面世的那一天就有办法了!
|
44
hahiru 2019-08-21 17:11:52 +08:00
11111111🔪11111111 中间一刀切
8 个 8 个存还不用 10bit 呢。 最后再拼接呗。 |
45
CrazyRundong 2019-08-21 17:13:09 +08:00
没有,信息熵是固有特性,压不了的
|
46
wssy 2019-08-21 18:50:27 +08:00 via Android
结合你的业务场景分析下,如果还有一些可以预知的信息或许可以利用上去
|
48
xuanbg 2019-08-22 08:36:44 +08:00 1
单个 16bit 信息没办法用 10bit 存储。除非你的 IP 有 6bit 都是一样一样的
|
49
shyrock 2019-08-22 09:41:21 +08:00
这问题适合发在知乎,而不是 v2 程序员板块。。。
|
51
VictorJing94 2019-08-22 10:44:26 +08:00
做不到好像,,,也许可以试着按规律分开存放...最后用的时候拼接一下
|
52
hu8245 2019-08-22 10:47:04 +08:00
压缩感知。不保证 100% OK
|