有没有一种根据预定义文字进行更高效的压缩方式

2020-08-05 14:06:13 +08:00
 shynome

我想预定义一些文字让压缩更为高效,有什么方法可以在浏览器里实现这个

我想让用户可以将分享数据带在链接中,我在浏览器这段收到后再重新展示出来 分享数据如:龙王+猴子+风女,我就预定义这些文字在压缩算法中,使得压缩后的字节尽可能小,最后就算带在链接里也不会太长,便于复制和分享

1380 次点击
所在节点    问与答
11 条回复
GeruzoniAnsasu
2020-08-05 14:54:08 +08:00
本来想说 gzip 压纯文本比替换关键字好多了
看了半天觉得不对劲
然后想说难到不是把关键字用枚举值表示就 ok 了吗
好像又不是这么回事
又想说短链接把内容放库里链接给个 hash 不就完了吗
好像也不是这么回事

一个 AB 问题让人猜 A 是什么真的很困难

到底要分享什么样的数据?结构化的吗?关键字组合?段落文本?纯前端无后端吗(不然为啥数据都要带在 url 里
misdake
2020-08-05 15:01:08 +08:00
如果需要在浏览器里解压,那么解压算法就必须知道这几个词。需要下载的应该一个定制的压缩算法和一个预定义字典。
我觉得和正常的压缩算法相比,压缩比提高不了多少,不可能抵消掉压缩算法+预定义字典的下载体积和时间。

另外根据你提供的例子,可能可以用二进制内容直接做。
misdake
2020-08-05 15:04:59 +08:00
我猜类似炉石分享套牌的方法可能比较合适,可以搜一下。
futou
2020-08-05 15:27:59 +08:00
你的问题太不明确了,使用场景不清晰。

更重要的是如何衡量“高效”。如果和用户间只传输少量特定关键字,提前约定几个枚举值就 ok 了,既简单又高效。然而这种方法的缺点非常明显:需要提前 or 同时传输你们的约定(我们一般叫码书)。你们的约定越多,码书规模就越大。

夸张点就是你提前送给用户一个词典,用户和你之间的对话翻译成每个字在字典中的页码和行数。如果你们用的字来来回回就几十个,那这个字典就很小,如果你们可能用到的字上万个,字典就会非常大,以至于每个字翻译成的页码和行数大大超过字本身的信息量。

在图像压缩里面有矢量量化、字典学习等方法可以实现对码书 /字典的设计与最优化。
不过事实证明,对于自然图像压缩(相当于你和用户可能用到的关键字无限多的情况),这些方法的压缩表现远不及用了几十年的预测变换量化熵编码。
shynome
2020-08-05 15:56:28 +08:00
@GeruzoniAnsasu
服务器太渣了,后端苦手
后端过于中心化,我想要分布式
xqdoo00o
2020-08-05 16:56:44 +08:00
zstd 应该 符合 你的需求。
字典对小文件的压缩比有很大的影响,所以 Zstandard 可以使用用户提供的压缩字典。它还提供了一种训练模式,能够从一组样本生成一个字典。[12][13] 特别是,可以加载一个字典来处理文件之间具有冗余的大型文件集,但不一定在每个文件(例如日志文件)内。 -- 摘自 wikipedia
hyperbin
2020-08-05 18:53:49 +08:00
就一个问题:谁维护关键字?
ysc3839
2020-08-06 02:29:56 +08:00
有点像 HTTP/2 的 HPACK 算法?这个就是预定义了一份常用的 HTTP 头。
https://tools.ietf.org/html/rfc7541#appendix-A
shynome
2020-08-06 08:37:47 +08:00
@ysc3839 额,这个好像不能在浏览器里调用
ysc3839
2020-08-06 08:39:24 +08:00
@shynome 当然不能调用浏览器内置的,但是你可以自己用 JavaScript 实现这个算法。
shynome
2020-08-06 08:47:39 +08:00
@ysc3839 这轮子已经有了,我看看能不能用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/695821

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX