有没有什么算法可以将 16bit 压缩到 10bit 来存储? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
alcoholpad
V2EX    程序员

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

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

    业务场景:将 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 值也不同就可以了
    47jm9ozp
        4
    47jm9ozp  
       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
    111111111111111 中间一刀切
    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     Solana     5641 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 01:30 PVG 09:30 LAX 18:30 JFK 21:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86