本篇是学习编码理论时写的杂记,内容可能枯燥。

二维码笔记系列(原文地址):

唠唠闲话

二维码是一种存储二进制数据的矩阵条码,其使用 RS(Reed-Solomon) 编码进行纠错。RS 码是一种线性码(Linear code),其在现实生活中应用广泛,且存在高效的编解码算法。

本篇介绍编码原理,纠错算法以及拓展知识,跳转目录:

  • 分组码
  • 线性码
  • 信息率

分组码

本节介绍分组码的定义例子,以及汉明距离等重要概念。

概述

在信息传输中,因传输通道噪音的干扰,接收端收到的信息与发送端发出的信息可能有误差。纠错码的引入,通过增加额外数据位,使传输的数据抵抗干扰的能力更加鲁棒(robust)。

编码理论中,分组码(block code)是一大类重要的纠错码,它以块的形式对数据进行编码。分组码的抽象定义在概念上很有用,因为它允许编码理论家、数学家和计算机科学家以统一的方式研究所有分组码的局限性。这种局限性通常对编码界限进行研究,研究其与分组码不同参数的联系,例如信息率与检测纠正错误能力。

定义及例子

纠错码用于在受信道噪声影响的不可靠通信信道上可靠地传输数字数据。当发送者想要使用分组码传输长数据流时,发送者将流分成一些固定大小的片段,每个这样的片段称为消息(message)。分组码过程中,将每 message 单独编码成块(block)。然后,发送者将所有 block 传输给接收者,接收者又可以使用某种解码机制(希望)从可能损坏的接收 block 中恢复原始消息。整体传输的性能和成功取决于信道和分组码的参数。

定义,记号和例子:

  1. rxroom 配合rxjava rxcode_算法 为长度为 rxroom 配合rxjava rxcode_rxroom 配合rxjava_02 的字符集,记 rxroom 配合rxjava rxcode_学习_03
  2. 子集 rxroom 配合rxjava rxcode_rxroom 配合rxjava_04 称为块长(block length)为 rxroom 配合rxjava rxcode_学习_05分组码(注:编码=嵌入映射=子集)
  3. rxroom 配合rxjava rxcode_学习_06消息长度或维数定义为 rxroom 配合rxjava rxcode_算法_07(形式定义,可能非整数)
  4. 编码 rxroom 配合rxjava rxcode_学习_06编码率或信息率(code rate/information rate) 定义为
    rxroom 配合rxjava rxcode_rxroom 配合rxjava_09
    注:rxroom 配合rxjava rxcode_学习_10
  5. rxroom 配合rxjava rxcode_学习_06 的元素 rxroom 配合rxjava rxcode_julia_12 称为码字(codeword)
  6. 设分组码 rxroom 配合rxjava rxcode_学习_06 的距离为 rxroom 配合rxjava rxcode_julia_14,将 rxroom 配合rxjava rxcode_学习_06 简称为 rxroom 配合rxjava rxcode_学习_16,距离的定义在下边给出
  7. 分组码可以看成嵌入映射 rxroom 配合rxjava rxcode_julia_17,映射左侧为原始信息,右侧为加密后的信息
  8. 例1:rxroom 配合rxjava rxcode_julia_18 是以 rxroom 配合rxjava rxcode_julia_19 为字符集的,块长为 2, 维数为 rxroom 配合rxjava rxcode_算法_20
  9. 例2:rxroom 配合rxjava rxcode_julia_21 是以 rxroom 配合rxjava rxcode_抽象代数_22 为字符集的,块长 3 ,维数 1 的分组码,写成映射形式
    rxroom 配合rxjava rxcode_学习_23
  10. 用大空间 rxroom 配合rxjava rxcode_julia_24 表示小空间 rxroom 配合rxjava rxcode_学习_25
  • 察觉错误(detect error):用 rxroom 配合rxjava rxcode_julia_26 传输信息 0 时,若发生了至多 2 个错误,比如
    rxroom 配合rxjava rxcode_rxroom 配合rxjava_27
    接收端收到 rxroom 配合rxjava rxcode_抽象代数_28
  • 填补缺失(correct erasure):用 rxroom 配合rxjava rxcode_julia_26 传输信息 0 时,若丢失了至多 2 个位置的数据(且丢失位置已知),比如
    rxroom 配合rxjava rxcode_学习_30
    接收端通过余下数据仍能还原初始数据
  • 纠错能力(correct error):假设传输 rxroom 配合rxjava rxcode_julia_26 时,有至多 1 个位置的数据错误,比如
    rxroom 配合rxjava rxcode_学习_32
    由于错误位置至多一个,初始数据只可能是 rxroom 配合rxjava rxcode_julia_26
  1. 显然,编码的纠错能力是有上限的,假设数据 rxroom 配合rxjava rxcode_julia_26 传送时发生 2 个位置的错误,比如变成 rxroom 配合rxjava rxcode_rxroom 配合rxjava_35,接收端并不能确定原数据是 rxroom 配合rxjava rxcode_julia_26 还是 rxroom 配合rxjava rxcode_抽象代数_37。类似地,检测错误和填补缺失的能力也是有限的,假设传送时发生 3 个位置的错误,这种错误显然不能被检测出来。

汉明距离

汉明距离衡量编码处理错误能力的关键指标,下边给出具体定义,总不妨设字符集 rxroom 配合rxjava rxcode_抽象代数_38

  1. 设码字 rxroom 配合rxjava rxcode_julia_39,定义权重(weight) rxroom 配合rxjava rxcode_抽象代数_40rxroom 配合rxjava rxcode_算法_41
  2. rxroom 配合rxjava rxcode_julia_42,定义 rxroom 配合rxjava rxcode_算法_41rxroom 配合rxjava rxcode_rxroom 配合rxjava_44汉明距离(Hamming distance)
    rxroom 配合rxjava rxcode_学习_45
    注:容易验证 rxroom 配合rxjava rxcode_学习_03 关于 rxroom 配合rxjava rxcode_学习_47
  3. 编码 rxroom 配合rxjava rxcode_学习_06 的(最小)距离定义为
    rxroom 配合rxjava rxcode_学习_49
    注:距离 rxroom 配合rxjava rxcode_抽象代数_50 描述了码字 rxroom 配合rxjava rxcode_算法_41 转变为另一码字 rxroom 配合rxjava rxcode_rxroom 配合rxjava_44最少修改数
  4. 定理)容易证明,分组码 rxroom 配合rxjava rxcode_julia_53
  • 编码 rxroom 配合rxjava rxcode_算法_54 能检测至多 rxroom 配合rxjava rxcode_julia_55
  • 编码 rxroom 配合rxjava rxcode_算法_54 能填补至多 rxroom 配合rxjava rxcode_julia_55
  • 编码 rxroom 配合rxjava rxcode_算法_54 能纠正至多 rxroom 配合rxjava rxcode_julia_59 个错误,即 rxroom 配合rxjava rxcode_抽象代数_60
  1. 用图像理解第三条性质:根据定义,以码字为圆心,半径 rxroom 配合rxjava rxcode_julia_61 的“小球”互不相交,当错误数目 rxroom 配合rxjava rxcode_julia_61 时,错误数据仍在小球范围内,因此能被纠正
  2. rxroom 配合rxjava rxcode_算法_63

衡量指标

编码在设计上有几个重要目标,或者说衡量指标:

  • 处理错误的能力,比如检测错误,纠正错误
  • 尽量小的冗余信息(minimize overhead)
  • 计算效率,比如编码,解码和纠错等操作的执行效率

在分组码 rxroom 配合rxjava rxcode_学习_64 中,错误处理能力用距离 rxroom 配合rxjava rxcode_抽象代数_65相对距离 rxroom 配合rxjava rxcode_julia_66 描述,冗余信息用编码率/信息率 rxroom 配合rxjava rxcode_抽象代数_67

一般地,编码距离 rxroom 配合rxjava rxcode_抽象代数_65 越大,错误处理能力越强,但相应地,冗余信息将越多,这导致了信息率 rxroom 配合rxjava rxcode_抽象代数_67 的减小。因此,协调错误处理能力 rxroom 配合rxjava rxcode_抽象代数_65 与信息率 rxroom 配合rxjava rxcode_抽象代数_67

尽管如此,有不少研究在某些方面给出了解答,例如下边要介绍的汉明界。

有时也用相对距离 rxroom 配合rxjava rxcode_julia_72

汉明界

在编码理论领域,汉明界(Hamming Bound) 是对分组码参数的限制,它对编码空间的利用率提出了重要限制。汉明界也被称为球包装界体积界,这可以从推导过程看出来。

  1. rxroom 配合rxjava rxcode_学习_73,如下定义 rxroom 配合rxjava rxcode_学习_74 ,并称为 rxroom 配合rxjava rxcode_julia_12 的以 rxroom 配合rxjava rxcode_rxroom 配合rxjava_76 为半径的 Hamming Ball。
    rxroom 配合rxjava rxcode_算法_77
  2. 将汉明球 rxroom 配合rxjava rxcode_学习_74 包含的 rxroom 配合rxjava rxcode_学习_03 元素个数称为球的体积(Volume) ,记为
    rxroom 配合rxjava rxcode_学习_80
    由于对称性,球体积与 rxroom 配合rxjava rxcode_julia_12 的选取无关,因而体积定义中不含参数 rxroom 配合rxjava rxcode_julia_12
  3. 推导易得下边公式
    rxroom 配合rxjava rxcode_抽象代数_83
    其中加项 rxroom 配合rxjava rxcode_学习_84 代表与 rxroom 配合rxjava rxcode_julia_12 的汉明距离为 rxroom 配合rxjava rxcode_学习_86rxroom 配合rxjava rxcode_抽象代数_87。换言之,这些元素可通过 rxroom 配合rxjava rxcode_julia_12
  4. rxroom 配合rxjava rxcode_julia_14rxroom 配合rxjava rxcode_学习_06 的距离,同前边示意图易知,汉明球 rxroom 配合rxjava rxcode_抽象代数_91 之间两两不交,继而有
    rxroom 配合rxjava rxcode_算法_92
    取等当且仅当这些汉明球覆盖了整个空间;整理可得
    rxroom 配合rxjava rxcode_学习_93
    上式表明,当编码块长 rxroom 配合rxjava rxcode_学习_05,字符集长 rxroom 配合rxjava rxcode_rxroom 配合rxjava_02 以及编码距离 rxroom 配合rxjava rxcode_julia_14 确定时,信息率 rxroom 配合rxjava rxcode_学习_10 存在不等式右侧给出的上界,这一上界便称为汉明界
  5. 汉明界在某些角度上回答了编码距离与信息率的关系,假设编码块长 rxroom 配合rxjava rxcode_学习_05 和字符集 rxroom 配合rxjava rxcode_算法 确定,汉明界表明:当编码距离 rxroom 配合rxjava rxcode_julia_14 确定时,信息率 rxroom 配合rxjava rxcode_学习_10 不会超过某个数值。而取到边界当且仅当所构造编码的半径为 rxroom 配合rxjava rxcode_算法_102 的汉明球覆盖了整个空间。达到汉明界的编码被称为完美编码(perfect code)汉明码(Hamming code)
  6. 举个例子,考虑二进制字符集 rxroom 配合rxjava rxcode_抽象代数_22,设编码的块长为 rxroom 配合rxjava rxcode_学习_104,距离为 rxroom 配合rxjava rxcode_学习_105,维数为 rxroom 配合rxjava rxcode_学习_106,计算汉明界
    rxroom 配合rxjava rxcode_算法_107
    根据汉明界,编码维数 rxroom 配合rxjava rxcode_算法_108,如下编码可以取到等号
    rxroom 配合rxjava rxcode_抽象代数_109

例中,编码用线性变换定义,这种编码方式称为线性码,Reed Solomon 编码便是一类特殊的线性码。


线性码

线性码是一种纠错码,任何码字的线性组合也是一个码字。线性码传统上分为分组码和卷积码,以下仅讨论分组码。

下设 rxroom 配合rxjava rxcode_抽象代数_110rxroom 配合rxjava rxcode_抽象代数_111

基本概念

  1. (定义) 编码空间 rxroom 配合rxjava rxcode_rxroom 配合rxjava_112 的真子空间 rxroom 配合rxjava rxcode_抽象代数_113 称为 rxroom 配合rxjava rxcode_算法_114 上的维数为 rxroom 配合rxjava rxcode_学习_106,块长为 rxroom 配合rxjava rxcode_学习_05线性码(Linear Code)。将矩阵 rxroom 配合rxjava rxcode_学习_117 称为 rxroom 配合rxjava rxcode_学习_06生成元矩阵(Generator Matrix),若
    rxroom 配合rxjava rxcode_算法_119
    借助生成矩阵 rxroom 配合rxjava rxcode_学习_120,线性码 rxroom 配合rxjava rxcode_学习_06 可写为映射形式
    rxroom 配合rxjava rxcode_julia_122
  2. 生成元矩阵不唯一:任意可逆矩阵左乘生成元矩阵,仍得到生成元矩阵。特别地,通过调整 rxroom 配合rxjava rxcode_rxroom 配合rxjava_112 的索引,总能左乘得到上分块为单位阵的生成元矩阵:
    rxroom 配合rxjava rxcode_学习_124
    容易发现,初始信息 rxroom 配合rxjava rxcode_julia_125 嵌在编码后的信息中。我们将满足这一性质的编码称为系统码(Systematic Code)
  3. rxroom 配合rxjava rxcode_julia_126 为线性码 rxroom 配合rxjava rxcode_学习_06奇偶检验矩阵(Parity Check Matrix),若
    rxroom 配合rxjava rxcode_抽象代数_128
    由线性代数知识,易见 rxroom 配合rxjava rxcode_算法_129,即矩阵 rxroom 配合rxjava rxcode_学习_120 为列满秩,矩阵rxroom 配合rxjava rxcode_rxroom 配合rxjava_131
  4. rxroom 配合rxjava rxcode_julia_132 为一组线性码,则 rxroom 配合rxjava rxcode_算法_133 也为一组线性码,称为 rxroom 配合rxjava rxcode_学习_06对偶码(Dual Code),其中
    rxroom 配合rxjava rxcode_算法_135

注:编码可以理解为信息空间到表示空间的单射,线性码则是通过列满秩矩阵给出这个单射。

编码距离

相比分组码,线性码的编码距离可以用矩阵 rxroom 配合rxjava rxcode_学习_136rxroom 配合rxjava rxcode_抽象代数_137

  1. 以下命题等价
  1. 编码 rxroom 配合rxjava rxcode_算法_54 的汉明距离为 rxroom 配合rxjava rxcode_julia_139
  2. rxroom 配合rxjava rxcode_抽象代数_140 列空间非零向量最小权重,即
    rxroom 配合rxjava rxcode_算法_141
  3. rxroom 配合rxjava rxcode_抽象代数_142 的任意 rxroom 配合rxjava rxcode_julia_143 个列向量线性无关,且存在长为 rxroom 配合rxjava rxcode_julia_139 的线性相关列向量组;换言之,rxroom 配合rxjava rxcode_抽象代数_142 的线性相关列向量组的最小长度为 rxroom 配合rxjava rxcode_julia_139
  4. rxroom 配合rxjava rxcode_抽象代数_140 的任意 rxroom 配合rxjava rxcode_学习_148 个行向量构成的向量组中,存在 rxroom 配合rxjava rxcode_rxroom 配合rxjava_149 个线性无关向量;换言之,rxroom 配合rxjava rxcode_抽象代数_140 的任意 rxroom 配合rxjava rxcode_学习_148
  1. 我们依次证明这几个命题
  • rxroom 配合rxjava rxcode_算法_152
    根据线性性:
    rxroom 配合rxjava rxcode_抽象代数_153
  • rxroom 配合rxjava rxcode_julia_154
    先将 rxroom 配合rxjava rxcode_rxroom 配合rxjava_155 列分块化,并由 rxroom 配合rxjava rxcode_julia_156
    rxroom 配合rxjava rxcode_rxroom 配合rxjava_157
    rxroom 配合rxjava rxcode_julia_158rxroom 配合rxjava rxcode_rxroom 配合rxjava_159 个非零元数目对应得到 rxroom 配合rxjava rxcode_rxroom 配合rxjava_155rxroom 配合rxjava rxcode_rxroom 配合rxjava_159
  • rxroom 配合rxjava rxcode_julia_162
    根据定义:rxroom 配合rxjava rxcode_学习_163 的编码距离为 rxroom 配合rxjava rxcode_rxroom 配合rxjava_164 等价于 rxroom 配合rxjava rxcode_julia_165rxroom 配合rxjava rxcode_julia_166 的任意 rxroom 配合rxjava rxcode_学习_167 项出错不会得到另一个码字;等价于方程组 rxroom 配合rxjava rxcode_抽象代数_168 中,将 rxroom 配合rxjava rxcode_学习_169 的任意 rxroom 配合rxjava rxcode_学习_167 个行向量丢弃得到的方程 rxroom 配合rxjava rxcode_rxroom 配合rxjava_171,其只有唯一解 rxroom 配合rxjava rxcode_学习_172;等价于 rxroom 配合rxjava rxcode_rxroom 配合rxjava_173 去掉任意 rxroom 配合rxjava rxcode_学习_167
  1. 一般地,选取列向量 rxroom 配合rxjava rxcode_julia_175 得距离上界 rxroom 配合rxjava rxcode_抽象代数_176,选取 rxroom 配合rxjava rxcode_rxroom 配合rxjava_131rxroom 配合rxjava rxcode_抽象代数_178 个线性相关向量得到距离下界 rxroom 配合rxjava rxcode_julia_179,比如前边例子
    rxroom 配合rxjava rxcode_抽象代数_180
    rxroom 配合rxjava rxcode_学习_120 的第一列非零数得 rxroom 配合rxjava rxcode_julia_182,由 rxroom 配合rxjava rxcode_rxroom 配合rxjava_131 前三列向量线性相关性 rxroom 配合rxjava rxcode_学习_184,于是 rxroom 配合rxjava rxcode_学习_105

信息率

前边提到衡量编码的三个重要指标:处理错误能力尽量小的冗余信息,以及计算效率。关于错误处理能力,我们用编码距离 rxroom 配合rxjava rxcode_抽象代数_65 来衡量,对于线性码还可以借助生成元矩阵 rxroom 配合rxjava rxcode_学习_136 和奇偶检验矩阵 rxroom 配合rxjava rxcode_抽象代数_137 做相关计算;对于冗余信息,Hamming Bound 给出了某些方面的回答,本节将对信息率的边界做更深入的探讨。

本节侧重介绍辛格尔顿界,其与 Reed Solomon 纠错直接关联,其他作为拓展兴趣只做科普性地介绍,不讨论证明。

辛格尔顿界

在编码理论中,辛格尔顿界(Singleton Bound) 以 Richard Collom Singleton 命名,其表明 rxroom 配合rxjava rxcode_学习_189 分组码中,信息长满足 rxroom 配合rxjava rxcode_julia_190,继而
rxroom 配合rxjava rxcode_算法_191

这个定理的证明非常简单,考虑复合映射 rxroom 配合rxjava rxcode_学习_192 为单射
rxroom 配合rxjava rxcode_学习_193
rxroom 配合rxjava rxcode_学习_192 必为单射,由于 rxroom 配合rxjava rxcode_算法_195rxroom 配合rxjava rxcode_算法_196 至多前 d-1 个位置不同,即
rxroom 配合rxjava rxcode_抽象代数_197

rxroom 配合rxjava rxcode_学习_192 为单射,比较集合立得 rxroom 配合rxjava rxcode_julia_190

对于线性码,从上一节编码距离的刻画(4) 立知,rxroom 配合rxjava rxcode_julia_200

GV 界

在编码理论中,GV Bound(Gilbert–Varshamov Bound) 是由 Edgar Gilbert 和 Rom Varshamov 分别独立提出的,关于编码(未必线性)参数的边界,Varshamov 通过使用线性码的概率方法证明了这一界限。有关该证明的更多信息请参阅这里

定理 (Gilbert–Varshamov) 设 rxroom 配合rxjava rxcode_抽象代数_111 为素数幂次,rxroom 配合rxjava rxcode_julia_202,则存在线性码 rxroom 配合rxjava rxcode_算法_203

  • rxroom 配合rxjava rxcode_抽象代数_204 的块长为 rxroom 配合rxjava rxcode_julia_205,字符集数目为 rxroom 配合rxjava rxcode_算法_206, 汉明边界为 rxroom 配合rxjava rxcode_学习_207
  • rxroom 配合rxjava rxcode_抽象代数_204 的信息率 rxroom 配合rxjava rxcode_julia_209 满足下边性质
    rxroom 配合rxjava rxcode_rxroom 配合rxjava_210

定理证明过程并不复杂,但使用了分析概率的方法,属于非构造性证明,感性趣看这个视频

渐进分析(Asymptotics)

GV Bound 给出了 rxroom 配合rxjava rxcode_抽象代数_67 的下界,结合 Hamming Bound 得到
rxroom 配合rxjava rxcode_rxroom 配合rxjava_212

这个不等式中,信息率 rxroom 配合rxjava rxcode_抽象代数_67 与参数 rxroom 配合rxjava rxcode_rxroom 配合rxjava_214 均有关,且形式复杂,不利于理解 rxroom 配合rxjava rxcode_抽象代数_67 的性质。为此,我们使用渐进分析的方式,通过取极限去除某些参数,以研究 rxroom 配合rxjava rxcode_抽象代数_67

信息率与距离

  1. rxroom 配合rxjava rxcode_julia_217 为编码构成的序列,其中 rxroom 配合rxjava rxcode_rxroom 配合rxjava_218rxroom 配合rxjava rxcode_抽象代数_219 分组码,定义序列 rxroom 配合rxjava rxcode_学习_220
    rxroom 配合rxjava rxcode_算法_221
    定义 rxroom 配合rxjava rxcode_julia_222相对距离(简称距离) rxroom 配合rxjava rxcode_算法_223
    rxroom 配合rxjava rxcode_学习_224
  2. 前边讨论汉明界时,举了 rxroom 配合rxjava rxcode_算法_225-汉明码的例子,类似地,容易构造编码序列 rxroom 配合rxjava rxcode_抽象代数_226,其中 rxroom 配合rxjava rxcode_rxroom 配合rxjava_218rxroom 配合rxjava rxcode_算法_228 汉明码,此时
    rxroom 配合rxjava rxcode_抽象代数_229
    rxroom 配合rxjava rxcode_学习_06 的信息率趋近于 rxroom 配合rxjava rxcode_算法_231,但距离趋近于 0,即纠错能力趋于没有。
  3. 我们希望在 rxroom 配合rxjava rxcode_rxroom 配合rxjava_232rxroom 配合rxjava rxcode_rxroom 配合rxjava_233 中找到最佳的协调方式,特别地,将满足 rxroom 配合rxjava rxcode_抽象代数_234 的编码序列称为渐进好的(Asymptotically Good)

边界分析

  1. GV Bound 和 Hamming Bound 公式中的体积球 rxroom 配合rxjava rxcode_julia_235 不利于讨论,为此先定义 q-ary 熵函数(q-ary entropy function),用于化简公式
    rxroom 配合rxjava rxcode_抽象代数_236
  • rxroom 配合rxjava rxcode_抽象代数_237
  • rxroom 配合rxjava rxcode_抽象代数_238 时,上式趋 rxroom 配合rxjava rxcode_抽象代数_239
  • rxroom 配合rxjava rxcode_julia_240 时,rxroom 配合rxjava rxcode_julia_241
  • 图像整体开口朝下
  1. rxroom 配合rxjava rxcode_学习_242,则(略去证明)
    rxroom 配合rxjava rxcode_julia_243
  2. 根据 Hamming Bound,对任意编码序列 rxroom 配合rxjava rxcode_julia_222,有
    rxroom 配合rxjava rxcode_学习_245
    根据 GV Bound,存在编码序列 rxroom 配合rxjava rxcode_julia_222,使得
    rxroom 配合rxjava rxcode_rxroom 配合rxjava_247
  3. 综上,有
    rxroom 配合rxjava rxcode_学习_248
    我们将这两个边界分别称为编码序列 rxroom 配合rxjava rxcode_julia_222渐进 GV Bound渐进 Hamming Bound。当 rxroom 配合rxjava rxcode_抽象代数_250 时,图像表现为
  4. rxroom 配合rxjava rxcode_rxroom 配合rxjava_251

  5. 延伸
  • Q1:是否存在编码序列,满足渐进 GV Bound,即落在黄色区域
  • rxroom 配合rxjava rxcode_julia_252
  • rxroom 配合rxjava rxcode_julia_253
  • 能否构造编码序列,满足渐进 GV Bound,同样地,这个问题也仅在 rxroom 配合rxjava rxcode_学习_254
  • 渐进 GV Bound 给出蓝线以下的存在性,继而说明了存在“渐近好的”编码序列
  • 关于边界分析,还有 Plotkin Bound 等,将图像进一步细化,这些都描述了比率 rxroom 配合rxjava rxcode_学习_255 与距离 rxroom 配合rxjava rxcode_julia_256 之间的关系
  • rxroom 配合rxjava rxcode_rxroom 配合rxjava_257

  • 特别注意,本节讨论对编码序列的渐进分析,从图像上看 Singleton Bound 始终在 Plotkin Bound 上方,但这是在 rxroom 配合rxjava rxcode_学习_254