• 请不要在回答技术问题时复制粘贴 AI 生成的内容
alcoholpad
V2EX  ›  程序员

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

  •  
  •   alcoholpad · Aug 21, 2019 · 7114 views
    This topic created in 2639 days ago, the information mentioned may be changed or developed.

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

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

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

    1023 -> 10.21.3.254
    1024 -> 10.21.3.255

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

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

    ————

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

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