业务场景:将 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 47jm9ozp 2019-08-21 12:03:29 +08:00 ![]() 不可行 |
5 zhzbql 2019-08-21 12:05:07 +08:00 ![]() @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 ![]() 难听的话我就不多说了,说出来伤人。好好说一句,阁下能不能学习一下计算机科学? |
![]() | 16 vjnjc 2019-08-21 12:52:43 +08:00 你真要存也可以,就像#14 说的那样. 当然无法存全部的 65536 个数字。 |
![]() | 17 YvesX 2019-08-21 12:54:31 +08:00 ![]() 如此循环下去,能把宇宙压缩成一个比特。 这很禅。 |
![]() | 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 ![]() 所以只招相关专业的意义就在于此 |
![]() | 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 ![]() @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 ![]() @vjnjc 实际就是,没有办法..当然,在量子计算机面世的那一天就有办法了! |
![]() | 44 hahiru 2019-08-21 17:11:52 +08:00 111111111111111 中间一刀切 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 ![]() 单个 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 |