首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >高尔夫球绳

高尔夫球绳
EN

Code Golf用户
提问于 2015-10-01 06:08:20
回答 3查看 862关注 0票数 22

对于需要字符串压缩的kolmogorov-复杂性挑战,我总是没有给出答案,主要原因是我不知道如何有效地使用字符串压缩工具。

由于这个原因,我张贴了这个问题。与我的其他提示问题不同,这并不是特定于语言的问题,这意味着如果您可以用自己的语言想出任何技巧,那么您可以发布它(前提是指定语言)。一般提示也是值得赞赏的。

那么,如何使用字符串压缩工具来达到最大的效果呢?

EN

回答 3

Code Golf用户

发布于 2015-10-01 06:27:26

碱基转换(CJam)

对不以空字节开头的ASCII字符串进行编码的一种简单方法是将基128转换为整数,然后转换为base 256:

代码语言:javascript
运行
复制
128b256b:c              e# Prints encoded string.
128b256b:c`"256b128b:c" e# Prints encoded string with decoder.

这使用7位来编码每个ASCII字符。

如果原始字符串仅由小写字母组成,并且不以a开头,我们可以从"a...z"映射到[0 ... 25]开始,然后按上面的方式进行:

代码语言:javascript
运行
复制
'afm26b256b:c               e# Prints encoded string.
'afm26b256b:c`"256b26b'af+" e# Prints encoded string with decoder.

最后,如果原始字符串只有几个唯一字符(在ASCII技术中很常见),那么通常最好显式地指定字母表。

例如:

代码语言:javascript
运行
复制
" +-/\|"f#6b256b:c                       e# Prints encoded string.
" +-/\|"f#6b256b:c`"256b6b"" +-/\|"`"f=" e# Prints encoded string with decoder.

根据经验,您希望原始字符串的第一个字符是字母表的第二个字符,原始字符串的下一个不同字符是字母表的第一个字符,原始字符串的下一个不同字符是字母表的第三个字符,原始字符串的下一个不同字符是字母表的第四个字符,等等。

最后一个示例的编码器工作如下:

代码语言:javascript
运行
复制
" +-/\|"f# e# Replace each character by its index in that string.
6b256b     e# Convert from base 6 (length of the alphabet) to base 256.
:c         e# Cast each digit to character.

最后一个示例的解码器工作如下:

代码语言:javascript
运行
复制
256b6b     e# Convert from base 256 to base 6.
" +-/\|"f= e# Replace each digit by the corresponding character of the alphabet.
票数 9
EN

Code Golf用户

发布于 2015-10-01 10:42:41

较大的Kolmogorov复杂问题有一定的结构,但没有简单的公式(如歌词),通常会受益于基于语法的方法。本质上,您可以提取重复的子字符串并以某种方式对它们进行编码。这就是Lempel-Ziv所做的,使用的语法类相当有限;如果您使用更通用的语法,那么您必须弄清楚如何对规则进行编码。例如,这里的一种方法是“偏移编码”,根据规则数(n)对每个源字节进行偏移,将字节1分配给规则n,使用0字节分隔规则,并反复用计算出的规则i替换字节i。最后,通过从每个字节中减去n来撤消偏移量。

实际上,我有编写Java程序,它实现了各种方法:

大多数方法都遵循两个阶段的过程。在第一阶段,字符串被转换为生成字符串的语法;在第二阶段,语法被转换为GolfScript程序。第一阶段实现主要基于Charikar,Lehman,Liu,Panigrahy,Prabhakaran,Sahai,& Shelat (2005年) 最小语法问题,信息论,implementations,51(7),2554-2576。

它还包括Lempel-Ziv方法、基编码方法和游程编码方法,并识别出最短程序。

票数 9
EN

Code Golf用户

发布于 2019-05-16 17:37:40

Stax

斯塔克斯代码中,有一个很有用的工具叫做字符串文本压缩器。我不知道它到底是怎么工作的,但还有一个地方我知道它是如何工作的。它将字符串转换为数字,然后转换为Base 256。它是CP437,将0x00和0xFF转换为复制。我是PackedStax。您可以使用字符串文本压缩器转换字符串,然后将其打包,以便进行一些良好的压缩。

使用此过程,字符串“这个字符串是32个字节”可以转换为v*“A]-|W4}3”%(压缩的字符串通常被背面包围,以区分Stax中普通字符串之间的区别),最后转换为üvμ![┴╩qJu←▓α,用于压缩/减少18个字节,超过一半。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/59238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档