V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alcoholpad
V2EX  ›  程序员

有没有什么算法可以将 16bit 压缩到 10bit 来存储?

  •  
  •   alcoholpad · 2019-08-21 11:42:30 +08:00 · 5809 次点击
    这是一个创建于 1904 天前的主题,其中的信息可能已经有所发展或是发生改变。

    业务场景:将 ip 地址,如 10.21.221.20 ,后两段( 221.20 )截取下来转成二进制。但是只能有 10bit 的存储空间可以存储,可行吗?有什么方式可以转换?保证唯一。避免如 22120 和 22121 转换后 10bit 是一样的。

    第 1 条附言  ·  2019-08-21 17:15:12 +08:00
    谢谢大家,我也是来 v2 找一下有没有爱因斯坦
    53 条回复    2019-08-22 11:57:30 +08:00
    Kagari
        1
    Kagari  
       2019-08-21 11:54:18 +08:00
    IPv4 本来就是 2 进制啊,也就是说后 2 段本来就是 8bit+8bit 的
    favourstreet
        2
    favourstreet  
       2019-08-21 12:00:56 +08:00 via Android
    为你的 ip 后两段分配 0~1023 的编号,查表。
    verbose
        3
    verbose  
       2019-08-21 12:01:22 +08:00
    @Kagari 有没有办法用 10bit 来存储,值是多少无所谓,保证 ip 不同对应的 10bit 值也不同就可以了
    ooxxcc
        4
    ooxxcc  
       2019-08-21 12:03:29 +08:00   ❤️ 1
    不可行
    zhzbql
        5
    zhzbql  
       2019-08-21 12:05:07 +08:00   ❤️ 3
    @verbose 10bit 只有 1024 个组合,16bit 有 65536 个组合,除非你们要存储的 ip 后两段不同组合小于等于 1024,不然怎么都会冲突。数学方面上的不可行
    psychoo
        6
    psychoo  
       2019-08-21 12:13:42 +08:00 via Android
    没有
    rrfeng
        7
    rrfeng  
       2019-08-21 12:15:35 +08:00 via Android
    。。。。。我被你逗笑了
    oxoxoxox
        8
    oxoxoxox  
       2019-08-21 12:21:37 +08:00
    本来是 65536 个不同的值,你现在要求用 1024 个数来做索引,你说能不能做到。。。
    Mistwave
        9
    Mistwave  
       2019-08-21 12:24:27 +08:00 via iPhone
    信息熵了解一下
    smdbh
        10
    smdbh  
       2019-08-21 12:29:41 +08:00
    需要配合掩码,有些是可以的
    lihongming
        11
    lihongming  
       2019-08-21 12:40:31 +08:00 via iPhone
    这是在研究压缩率高达 98.5%的无损压缩算法?
    whileFalse
        12
    whileFalse  
       2019-08-21 12:47:41 +08:00
    你的目的是什么?如果是为了哈希,那可以直接丢弃高 6 位,只取低 10 位。
    0ZXYDDu796nVCFxq
        13
    0ZXYDDu796nVCFxq  
       2019-08-21 12:48:22 +08:00 via Android
    IP 地址是稠密的,就是说你要完整表达那就是完全不可压缩的
    catcalse
        14
    catcalse  
       2019-08-21 12:48:28 +08:00
    拿个小本本,写上 a1 代表 10.21.221.20 , 然后把 a1 存起来
    msg7086
        15
    msg7086  
       2019-08-21 12:51:35 +08:00   ❤️ 1
    难听的话我就不多说了,说出来伤人。好好说一句,阁下能不能学习一下计算机科学?
    vjnjc
        16
    vjnjc  
       2019-08-21 12:52:43 +08:00
    你真要存也可以,就像#14 说的那样.
    当然无法存全部的 65536 个数字。
    YvesX
        17
    YvesX  
       2019-08-21 12:54:31 +08:00   ❤️ 8
    如此循环下去,能把宇宙压缩成一个比特。
    这很禅。
    will0404
        18
    will0404  
       2019-08-21 12:56:19 +08:00
    @catcalse
    @vjnjc
    你再仔细想想?
    vjnjc
        19
    vjnjc  
       2019-08-21 12:59:03 +08:00
    @will0404 #18

    0 - > 10.21.0.0
    1 - > 10.21.0.1
    ......
    依次类推会有问题吗?
    churchmice
        20
    churchmice  
       2019-08-21 13:03:40 +08:00 via Android
    @lihongming 你这算数水平
    Raymon111111
        21
    Raymon111111  
       2019-08-21 13:07:14 +08:00
    做不到, 5l 说的很清楚了.
    xiaopang132
        22
    xiaopang132  
       2019-08-21 13:07:32 +08:00
    @vjnjc

    1023 -> 10.21.3.254
    1024 -> 10.21.3.255

    10bit 就用完了.
    Mohanson
        23
    Mohanson  
       2019-08-21 13:08:31 +08:00 via Android
    @vjnjc 你再仔细想想
    vjnjc
        24
    vjnjc  
       2019-08-21 13:09:25 +08:00
    @xiaopang132 对啊,所以没法存全部的数啊。实际上从信息的角度来说 10bit 怎么存 16bit 的信息啊?
    uhian
        25
    uhian  
       2019-08-21 13:11:16 +08:00 via iPhone
    @Mohanson 你再仔细看看🐶
    littlewing
        26
    littlewing  
       2019-08-21 13:12:51 +08:00 via iPhone
    不可能
    tt0411
        27
    tt0411  
       2019-08-21 13:15:24 +08:00   ❤️ 2
    所以只招相关专业的意义就在于此
    pubby
        28
    pubby  
       2019-08-21 13:17:06 +08:00
    @churchmice 没算错吧
    liuminghao233
        29
    liuminghao233  
       2019-08-21 13:22:37 +08:00 via iPhone
    这要用魔法了吧
    catcalse
        30
    catcalse  
       2019-08-21 13:22:51 +08:00
    10bit 想存整个宇宙。那谁都没办法
    geelaw
        31
    geelaw  
       2019-08-21 13:35:39 +08:00 via iPhone   ❤️ 3
    @lihongming #11 压缩率是按位数变化计算的,不是按位数的指数函数。

    @YvesX #17 如此循环只能把宇宙压缩到 10 bits (逃

    ————

    用大学生的话来说是信息量的问题,用小学生的话来说这是非常简单的抽屉原理。
    loading
        32
    loading  
       2019-08-21 13:40:00 +08:00 via Android   ❤️ 1
    @geelaw 大哥,抽屉原理是啥,我好像没上过小学……
    reus
        33
    reus  
       2019-08-21 13:41:31 +08:00
    有倒是有,有损的,要不要?
    lights
        34
    lights  
       2019-08-21 14:01:34 +08:00 via iPhone
    上 32 进制吧,盲猜 32 进制的 10 位可以表示 16 进制的 16 位,233
    lights
        35
    lights  
       2019-08-21 14:07:12 +08:00 via iPhone
    算一下
    32 的 10 次方是 2 的 5×15 次方
    16 的 16 次方是 2 的 4×16 次方
    刚好可以哦
    skydev
        36
    skydev  
       2019-08-21 14:16:33 +08:00
    我们就当楼主一时糊涂吧 散了散了
    lights
        37
    lights  
       2019-08-21 14:18:50 +08:00 via iPhone
    算错了,32 位不行,64 位才可以……
    q8515620
        38
    q8515620  
       2019-08-21 14:28:11 +08:00 via Android
    @lights 多少进制有区别吗?
    shoco
        39
    shoco  
       2019-08-21 14:54:23 +08:00
    IP 地址可以用一个 Int 来表示,32 个字节,4 个 Byte
    cz5424
        40
    cz5424  
       2019-08-21 15:25:06 +08:00 via iPhone
    把 ip 扔到黑洞里面,就压缩了。...୧((〃•̀ꇴ•〃))૭⁺✧逃..
    douglas1997
        41
    douglas1997  
       2019-08-21 15:47:24 +08:00
    10bit 如果结构上不同的话可能可以吧,但其实本质上还是增大了信息空间
    qwerthhusn
        42
    qwerthhusn  
       2019-08-21 15:48:02 +08:00
    16 位有 65536 个组合
    10 位有 1024 个组合

    要用这 1024 个组合映射 65536 个组合。。。。。
    xiaopang132
        43
    xiaopang132  
       2019-08-21 16:04:05 +08:00   ❤️ 1
    @vjnjc 实际就是,没有办法..当然,在量子计算机面世的那一天就有办法了!
    hahiru
        44
    hahiru  
       2019-08-21 17:11:52 +08:00
    11111111🔪11111111 中间一刀切
    8 个 8 个存还不用 10bit 呢。
    最后再拼接呗。
    CrazyRundong
        45
    CrazyRundong  
       2019-08-21 17:13:09 +08:00
    没有,信息熵是固有特性,压不了的
    wssy
        46
    wssy  
       2019-08-21 18:50:27 +08:00 via Android
    结合你的业务场景分析下,如果还有一些可以预知的信息或许可以利用上去
    msg7086
        47
    msg7086  
       2019-08-22 04:44:08 +08:00
    @loading 或者叫鸽笼原理。
    xuanbg
        48
    xuanbg  
       2019-08-22 08:36:44 +08:00   ❤️ 1
    单个 16bit 信息没办法用 10bit 存储。除非你的 IP 有 6bit 都是一样一样的
    shyrock
        49
    shyrock  
       2019-08-22 09:41:21 +08:00
    这问题适合发在知乎,而不是 v2 程序员板块。。。
    zifangsky
        50
    zifangsky  
       2019-08-22 09:51:30 +08:00
    @lights #37 呃,你可以再好好想想这个问题……
    VictorJing94
        51
    VictorJing94  
       2019-08-22 10:44:26 +08:00
    做不到好像,,,也许可以试着按规律分开存放...最后用的时候拼接一下
    hu8245
        52
    hu8245  
       2019-08-22 10:47:04 +08:00
    压缩感知。不保证 100% OK
    zhzbql
        53
    zhzbql  
       2019-08-22 11:57:30 +08:00
    @lights 什么进制放到计算机底层存储都是 0 和 1,2 进制。占用的空间不会更小,只会更大
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1433 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:51 · PVG 07:51 · LAX 15:51 · JFK 18:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.