Questions tagged «information-theory»

有关信息论,熵和各种来源的信息内容的问题

8
不含空格的摩尔斯电码是否可以唯一识别?
所有摩尔斯电码字符串都可以唯一识别吗?没有空格 ......-...-..---.-----.-..-..-.. 可能是,Hello World但第一个字母可能是5-实际上,它看起来不太可能任意点和破折号序列都具有唯一的翻译。 一个人可能会使用Kraft不等式,但这仅适用于前缀代码。 带空格的摩尔斯电码是前缀代码,在其中始终可以唯一地解码消息。一旦我们删除了空格,这将不再成立。 在我是对的情况下,不能完全解码所有摩尔斯电码消息的情况,有没有办法列出所有可能的消息?这是我在codegolf.SE上发现的一些相关练习 https://codegolf.stackexchange.com/questions/36735/morse-decode-golf https://codegolf.stackexchange.com/questions/131/morse-code-translator

7
PRNG可以用来魔术压缩东西吗?
这个想法是我小时候学习编程的想法,并且是第一次接触PRNG。我仍然不知道它有多现实,但是现在有了堆栈交换。 这是14岁的人使用的一种出色的压缩算法方案: 取一个PRNG并用种子s进行种子处理,以获得长序列的伪随机字节。要将序列发送给另一方,您只需要传达PRNG的说明,适当的种子和消息的长度。对于足够长的序列,该描述将比序列本身短得多。 现在,假设我可以反转该过程。如果有足够的时间和计算资源,我可以进行蛮力搜索,找到可以产生所需序列的种子(和PRNG,或者换句话说:一个程序)(比方说,一张有趣的猫调皮的照片)。 在生成足够多的比特之后,PRNG会重复,但是与“典型”周期相比,我的消息非常短,因此这似乎不是一个很大的问题。 Voila,一种有效的压缩数据方式(如果是rube-Goldbergian)。 因此,假设: 我希望压缩的序列是有限的,并且事先知道。 我的现金或时间并不短缺(只要两者都需要有限的金额) 我想知道: 该计划背后的推理是否存在根本缺陷? 分析这类思想实验的标准方法是什么? 摘要 通常,好的答案不仅可以弄清楚答案,而且可以弄清楚我真正要问的是什么。感谢大家的耐心配合和详细的答案。 这是我对答案的第n次尝试: PRNG /种子角度没有任何作用,只不过是生成所需序列作为输出的程序。 信鸽原理:长度大于k的消息比长度小于等于k的(消息生成)程序多。因此,某些序列根本不能成为比消息短的程序输出。 值得一提的是,程序(消息)的解释程序必须事先确定。它的设计确定了接收到长度为k的消息时可以生成的(小)消息子集。 至此,原始的PRNG想法已经死了,但是至少还有一个最后的问题需要解决: 问:我能幸运地发现我的长(但有限)消息恰好是长度小于k位的程序的输出吗? 严格来说,这不是偶然的问题,因为必须事先知道所有可能的消息(程序)的含义。要么是 <k位的一些信息的含义或它不是。 如果我随机选择一个随机消息,该消息>> k位(为什么?),无论如何我都将拥有使用少于k位发送消息的可能性,并且几乎可以肯定无法发送它完全使用不到k位。 OTOH,如果我从少于k位的程序输出中选择大于等于k位的特定消息(假设有这样的消息),那么实际上我是在利用已经传输到接收方(解释程序的设计),它被视为已传输消息的一部分。 最后: 问:熵 / kolmogorov复杂度业务到底是什么? 最终,两者都告诉我们与(简单的)信鸽原理告诉我们的一样,我们可以压缩的程度:也许一点也没有,也许有些,但是肯定不如我们想象的那么多(除非我们作弊)。

6
无损压缩算法会减少熵吗?
根据维基百科: 香农的熵衡量的是消息中包含的信息,而不是确定的(或可预测的)消息部分。后者的示例包括语言结构的冗余或与字母或单词对,三胞胎等的出现频率有关的统计属性。 因此,熵是对消息中包含的信息量的度量。熵编码器用于将此类消息无损压缩到表示该消息所需的最小位数(熵)。对我来说,这似乎是一个完美的熵编码器,它是尽可能无损压缩消息所需的全部。 然而,许多压缩算法在熵编码之前使用步骤以减少消息的熵。 根据德国维基百科 Entropiekodierer werdenhäufigmit anderen Kodierern kombiniert。大律师,大律师,大律师和大律师。 用英语: 熵编码器经常与其他编码器结合使用。前面的步骤用于减少数据的熵。 即bzip2在应用熵编码(在这种情况下为霍夫曼编码)之前先使用Burrows-Wheeler-Transform,然后再进行Move-To-Front-Transform。 这些步骤是否真的减少了消息的熵,这意味着减少了消息中包含的信息量?这在我看来是矛盾的,因为那将意味着在压缩过程中信息丢失,从而阻止了无损解压缩。还是仅转换消息以提高熵编码算法的效率?还是熵不直接对应于消息中的信息量?

2
用少于N个随机位来模拟2 ^ N中的1的概率
说我需要模拟以下离散分布: P(X=k)={12N,1−12N,if k=1if k=0P(X=k)={12N,if k=11−12N,if k=0 P(X = k) = \begin{cases} \frac{1}{2^N}, & \text{if $k = 1$} \\ 1 - \frac{1}{2^N}, & \text{if $k = 0$} \end{cases} 最明显的方法是绘制NNN随机位,并检查它们是否均等于000(或111)。但是,信息论说 S=−∑iPilogPi=−12Nlog12N−(1−12N)log(1−12N)=12Nlog2N+(1−12N)log2N2N−1→0S=−∑iPilog⁡Pi=−12Nlog⁡12N−(1−12N)log⁡(1−12N)=12Nlog⁡2N+(1−12N)log⁡2N2N−1→0 \begin{align} S & = - \sum_{i} P_i \log{P_i} \\ & = - \frac{1}{2^N} \log{\frac{1}{2^N}} - \left(1 - \frac{1}{2^N}\right) \log{\left(1 - \frac{1}{2^N}\right)} …

6
有效压缩简单的二进制数据
我有一个文件,其中包含从到有序二进制数字:2 n − 10002n−12n−12^n - 1 0000000000 0000000001 0000000010 0000000011 0000000100 ... 1111111111 7z不能非常有效地压缩该文件(对于n = 20,22 MB被压缩为300 kB)。 是否有可以识别非常简单的数据结构并将文件压缩到几个字节的算法?我也想知道CS或信息理论的哪个领域研究这种智能算法。“ AI”的范围太广,请提出更具体的关键字。 对称性概念应该在数据压缩中起基本作用,但是搜索查询“数据压缩中的对称性”和“数据压缩中的群论”令人惊讶地几乎没有任何相关性。

4
摩尔斯电码是二进制,三进制还是五进制的?
我正在阅读《代码:计算机硬件和软件的隐藏语言》这本书,在第二章中作者说: 莫尔斯电码被认为是二进制(字面意思是二乘二)代码,因为该代码的组成部分仅由两点组成-点和破折号。 另一方面,维基百科说: 严格来说,它不是二进制的,因为它有五个基本元素(请参阅quinary)。但是,这并不意味着摩尔斯电码不能表示为二进制代码。从抽象的意义上讲,这是电报运营商在传输消息时执行的功能(请参阅五进制)。 但话又说回来,另一个Wikipedia 页面在“二进制代码列表”中包含了摩尔斯电码。 我很困惑,因为我认为摩尔斯电码实际上是三元的。您有3种不同的“可能性”:静默,短蜂鸣或长蜂鸣。 用“搅拌二进制”表示莫尔斯电码是不可能的,不是吗? “严格二进制”是指二进制流:1010111101010 ..我应该如何表示静音,短蜂鸣和/或长蜂鸣? 我能想到的唯一方法是计算机实现的“字号”。如果我(和CPU /代码的解释器)知道每次将读取8位,那么我可以代表摩尔斯电码。我可以简单地用1表示一个短蜂鸣声,或用0表示一个长蜂鸣声,而沉默将由单词长度隐式表示。(假设是8位。)因此,我又有了这个第3个变量/第3个资产我的手:字号。 我的想法是这样的:在一个8位的字中,我可以为要读取的位保留前3位,为莫尔斯电码保留后5位。就像00110000代表'A'。而且我仍然处于“二进制”状态,但是我需要使它变为三进制的字长,不是吗?前3位表示:接下来的5位仅读取1位。 代替二进制,如果我们使用三进制,我们可以显示摩尔斯电码,例如:101021110102110222等。其中1是:dit 0是:dah,2是静默。通过使用222,我们可以对长时间的静音进行编码,因此,如果您具有*-* --- *-之类的信号,则可以显示为:102100022210,但是除非直接使用1和0,否则不可能直接使用就像我提到的“固定”字长一样,但这很好解释,而不是以二进制形式保存摩尔斯电码。想象一下像钢琴之类的东西,您只有钢琴按钮。您想用摩尔斯电码给某人留言,可以将按钮涂成黑色。您无法留下清晰的信息,不是吗?您还需要至少一种颜色,以便您可以设置静音(字符和单词之间的静音。这就是三叉戟的意思)。 我不是问您能否用57进制数或其他任何形式表示摩尔斯电码。 我已经通过电子邮件发送给作者(Charles Petzold);他说,他在“代码”的第9章中演示了摩尔斯电码可以解释为二进制代码。 我的想法哪里出问题了?我在读的书是摩尔斯电码是二进制吗?是否值得商bat?为什么在一个维基百科页面上将摩尔斯电码告诉成五进制,并且在“二进制码列表”页面中也列出了摩尔斯电码? 编辑:我已经通过电子邮件发送给作者并得到了回复: - - -原始信息 - - - 发件人:Koray Tugay [mailto:koray@tugay.biz] 发送:2015年3月3日,星期二,下午3:16 至:cp@charlespetzold.com 主题:莫尔斯电码真的是二进制的吗? 主席先生,您能否在这里看看我的问题:摩尔斯电码是二进制,三进制还是五进制的?五进制? 此致,Koray Tugay 来自:“查尔斯·皮佐尔德” 致:“'Koray Tugay'” 主题:RE:莫尔斯电码真的是二进制的吗?日期:3 2015年3月23:04:35 EET 在“代码”的第9章结尾处,我演示了莫尔斯电码可以解释为二进制代码。 - - -原始信息 - - - …

5
使用质数进行数据压缩
我最近偶然发现了以下有趣的文章,该文章声称无论数据的类型和格式如何,始终有效地将随机数据集压缩超过50%。 基本上,它使用质数唯一地构造4字节数据块的表示形式,由于每个数字都是质数的唯一乘积,因此易于解压缩。为了使这些序列与质数相关联,它利用字典。 我的问题是: 正如作者建议的那样,这真的可行吗?根据该论文,它们的结果非常有效,并且始终将数据压缩为较小的大小。字典的大小会不会很大? 难道不能使用同一算法来迭代地重新压缩压缩数据吗?很明显,并且已经证明,这种技术(压缩的数据被尽可能多地重新压缩,从而大大减小了文件的大小)是不可能的。实际上,在所有随机数据的集合和压缩数据之间不会存在双射。那么为什么会有这种感觉呢? 即使该技术尚不完善,也显然可以对其进行优化和大力改进。为什么没有对此进行更广泛的了解/研究?如果确实这些主张和实验结果是正确的,那么这将不会给计算带来革命性的变化?

4
压缩两个整数,不考虑顺序
将有序对(x,y)与无序对{x,y}(集合)进行比较,然后从理论上将信息相比较,差异仅是一位,因为x是第一个还是y都需要一个单独的位来表示。 因此,如果给定集合{x,y},其中x,y是两个不同的32位整数,是否可以将它们打包为63位(而不是64位)?应该可以从63位结果中恢复原始的32位整数,但不能恢复其顺序。

5
为什么用相同的一次性密码加密效果不好?
要使用一次性密钥加密消息,请执行 。 ķ Ë Ñ Ç (米1,ķ )= 米1 ⊕ ķm1米1个m_1kķkEnc(m1,k)=m1⊕kËñC(米1个,ķ)=米1个⊕ķEnc(m_1,k) = m_1 \oplus k 如果使用相同的加密不同的消息则会得到 ,如果对两个密文执行Xor,则将得到 米2 ë Ñ Ç (米2,ķ )= 米2 ⊕ ķ (米1 ⊕ ķ )⊕ (米2 ⊕ ķ )= 米1 ⊕ 米2kķkm2米2m_2Enc(m2,k)=m2⊕kËñC(米2,ķ)=米2⊕ķEnc(m_2,k) = m_2 \oplus k(m1⊕k)⊕(m2⊕k)=m1⊕m2(m1⊕k)⊕(m2⊕k)=m1⊕m2( m_1 \oplus k) \oplus ( m_2 \oplus k) = …

2
更难的是:对已排序的牌组进行混洗还是对经过改组的牌组进行分类?
您有不同元素组成的数组。您可以访问比较器(一个黑盒函数接受两个元素a和b并返回true iff a &lt; b)和一个真正随机的位源(一个黑盒函数不接受任何参数并返回一个独立的均匀随机位)。请考虑以下两个任务:nnnaaabbba&lt;ba&lt;ba < b 该数组当前已排序。产生均匀(或近似均匀)的随机选择排列。 该数组由自然而然随机选择的一些排列组成。产生一个排序的数组。 我的问题是 哪个任务需要渐近的能量? 我无法更精确地定义问题,因为我对信息论,热力学或其他任何需要回答此问题的知识都不了解。但是,我认为这个问题可以定义得很清楚(希望有人在回答这个问题时能帮助我!)。 现在,按照算法,我的直觉是它们相等。请注意,每种排序都是相反的顺序,反之亦然。排序需要比较,而洗牌,因为它从选取的随机排列ñ !选择,需要登录n !≈ ñ 日志ñ随机位。改组和排序都需要大约n次交换。logn!≈nlognlog⁡n!≈nlog⁡n\log n! \approx n \log nn!n!n!logn!≈nlognlog⁡n!≈nlog⁡n\log n! \approx n \log nnnn 但是,我觉得应该采用兰道尔原理来回答,该原理说需要一点能量来“擦除”。直觉上,我认为这意味着对数组进行排序更加困难,因为它需要“擦除” 位信息,从低能量,高熵的无序基态到高度有序的状态。但另一方面,对于任何给定的计算,排序只是将一个排列转换为另一个排列。由于我是一个完全的非专家,所以我希望了解物理学的人可以帮助“解决”这个问题!nlognnlog⁡nn \log n (该问题在math.se上没有得到任何答案,因此我将其重新张贴在这里。希望可以。)

4
可以将数据压缩到小于Shannon数据压缩限制的大小吗?
我正在阅读有关数据压缩算法和数据压缩的理论限制。最近,我遇到了一种称为“组合熵编码”的压缩方法,该方法的主要思想是将文件编码为文件中显示的字符,它们的频率以及文件代表的这些字符排列的索引。 这些文档可能有助于解释此方法: https://arxiv.org/pdf/1703.08127 http://www-video.eecs.berkeley.edu/papers/vdai/dcc2003.pdf https://www.thinkmind.org/download.php?articleid=ctrq_2014_2_10_70019 但是,在第一个文档中,我读到了通过使用这种方法,他们可以将某些文本压缩到小于Shannon限制(他们没有考虑节省字符频率所需的空间和节省元数据所需的空间。文件的数据)。我考虑了一下,发现这种方法对很小的文件不是很有效,但另一方面,它对于大文件可能很好用。实际上,我对这个算法或Shannon限制并不十分了解,我只知道它是每个字符的概率之和乘以概率的倒数的。log2log2log_2 所以我有一些问题: 这种压缩方法是否真的将文件压缩到小于Shannon限制? 是否有任何压缩算法将文件压缩到小于Shannon限制(据我所知,对这个问题的回答是“否”)? 是否存在将文件压缩到小于Shannon限制的压缩方法? 如果组合编码确实压缩了超出Shannon限制的文件,难道不能一次又一次地压缩文件,直到达到所需的文件大小?

3
算法信息论中“信息”与“有用信息”的区别
根据维基百科: 从算法信息理论的角度来看,非正式地,字符串的信息内容等于该字符串的最短自包含表示形式的长度。 “有用信息”的类似非正式严格定义是什么?为什么“有用信息”不被视为更自然或更基本的概念;天真地看似纯粹的随机字符串必须定义为包含零信息,因此我试图避免被标准定义认为具有最大信息的事实。

1
数独拼图的有效编码
指定任意9x9网格要求提供每个正方形的位置和值。单纯的编码可能会产生81个(x,y,值)三元组,每个x,y和值需要4位(1-9 = 9个值= 4位),总计81x4x3 = 972位。通过对每个方块编号,可以将位置信息减少到7位,每个方块减少1位,总共减少891位。通过指定一个预定的顺序,可以将这个顺序更彻底地减少到每个值只有4位,总共324位。但是,数独可能缺少数字。这为减少必须指定的数量提供了可能,但可能需要额外的位来指示位置。使用我们的(位置,值)的11位编码,我们可以指定线索的拼图nnn11n11n11n位,例如最小(17)拼图需要187位。到目前为止,我想到的最好的编码是对每个空格使用一位,以指示是否已填充,如果是,则接下来的4位对数字进行编码。这需要位,最小拼图需要149位()。是否有更有效的编码,最好没有每个有效数独设置的数据库?(用于解决一般的奖励积分从拼图)Ñ = 17 Ñ Ñ × Ñ81+4n81+4n81+4nn=17n=17n=17nnnN×NN×NN \times N 在我看来,许多难题将是另一个难题的旋转,或者是简单的数字排列。也许可以帮助减少所需的位数。 根据维基百科, 经典9×9 Sudoku解决方案网格的数量为6,670,903,752,021,072,936,960(OEIS中的序列A107739),或大约为。6.67×10216.67×10216.67×10^{21} 如果我做了我的数学权(),得出查询表的73(72.498)位信息。ln(6,670,903,752,021,072,936,960)ln(2)ln(6,670,903,752,021,072,936,960)ln(2)\frac{ln{(6,670,903,752,021,072,936,960)}}{ln{(2)}} 但: 当考虑到诸如旋转,反射,置换和重新标记之类的对称性时,本质上不同的解决方案的数量仅为5,472,730,538 [15](OEIS中的序列A109741)。 这给出了33(32.35)位,因此指示使用哪种排列的巧妙方法可能会低于全部73位。

3
香农熵为0.922,三个不同的值
给定一串值AAAAAAAABCAAAAAAAABCAAAAAAAABC,对数基数222的Shannon熵 为0.9220.9220.922。据我了解,在基数 222,向上舍入的Shannon熵是二进制中代表单个值之一的最小位数。 摘自此维基百科页面上的介绍: https://en.wikipedia.org/wiki/Entropy_%28information_theory%29 那么,如何用一位来表示三个值呢?AAA 可以是 111,BBB 可以是 000 ; 但是你怎么代表 CCC? 先感谢您。

4
PRNG用于精确生成n个设置位的数字
我目前正在编写一些代码来生成二进制数据。我特别需要生成具有给定数量的设置位的64位数字;更准确地说,该过程应取并返回一个伪随机的64位数字,其中恰好位设置为,其余设置为0。0&lt;n&lt;640&lt;n&lt;640 < n < 64nnn111 我当前的方法涉及以下内容: 生成一个伪随机数64。kkk 计算的位数,并将结果存储在。kkkbbb 如果,输出 ; 否则转到1。b=nb=nb = nkkk 这行得通,但看起来并不优雅。是否有某种PRNG算法可以比这更优雅地生成带有设置位的数字?nnn

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.