代码
在通信和資訊處理中,代码(code)是指一套转换信息的规则系统,例如将一个字母、單詞、声音、图像或手势转换为另一种形式或表达,有时还会缩短或加密以便通过某种信道或存储媒体通信。一个最早的例子是語言的发明,它使人可以通过说话将他看到、听到、感受到或想到的事情表达给其他人。但是,说话的通信范围局限于声音可以有效传播、辨识的范围,并且发言只能传达给现有的听众。将言谈转化为视觉符号的寫作扩大了跨越时间、空间的通信表达。代码有时亦称代号等。
而编码(encoding)能将源头的信息转化为便于通信或存储的符号。解码(Decoding)则是将其逆向还原的过程,将代码符号转化回收件人可以理解的形式。
编码的其中一个原因是在平实语言、口语或写作难以实现实现的情况下进行通信。例如,旗语可以用特定标记表达特定信息,站在远处的另一个人可以解读标识来重现该信息。
理论
在信息论和计算机科学中,代码通常被认为是一个独特的从一个源字母表表示成符号的算法,通过编码的字符串,这些字符串可能在一些其他的目标字母表中。通过连接编码字符串获得在源字母表上表示符号序列的扩展代码。
在给出一个数学上精确的定义之前,这是一个简短的例子。映射
是一个代码,其源字母表是集合 ,其目标字母表是集合 。使用扩展代码,编码后的字符串0011001可以被分组成代码字0 011 0 01,这些代码又可以解码为源符号序列 acab。
使用形式语言理论中的术语,这个概念的精确数学定义如下:让 S 和 T 是两个有限集,分别称为源字母表和目标字母表。 代码 是将每个符号从 S 映射到 T 上的符号序列的总函数。 的扩展 是 到 的同态,它自然地把每个源符号的序列映射到目标符号序列。
可变长度编码
在本节中,我们考虑从某个字典中的代码字对每个源(明文)字符进行编码的代码,这些代码字的连接为我们提供了已编码的字符串。当明文字符具有不同的概率时,可变长度代码特别有用;另见熵编码。
前缀代码是具有“前缀属性”的代码:系统中不存在作为集合中任何其他有效代码字的前缀(开始)的有效代码字。霍夫曼编码是最知名的用于导出前缀码的算法。即使代码不是由霍夫曼算法产生的,前缀代码也被广泛称为“霍夫曼代码”。前缀代码的其他示例是国家呼叫代码、ISBN 的国家和出版商部分,以及 UMTS WCDMA 3G 无线标准中使用的辅助同步代码。
卡夫不等式给出了前缀码中可能存在的码字长度集。实际上,任何唯一可解码的一对多代码,不一定是前缀代码,都必须满足卡夫不等式。
例子
其他例子
编码的其他例子包括:
- 编码 (認知中) 是解释传入刺激的基本感知过程; 从技术上讲,它是一个复杂的、多阶段的过程,将相对客观的感官输入(如光、声)转化为主观上有意义的体验。
- 内容格式 是一种为了将一种特定类型的数据转换成信息的特定编码格式。
- 文本编码使用置标语言来标记结构和其他文字的特性以方便计算机处理。(另见文本编码规范。)
- 正式语言 A 的语义编码非正式语言 B 是一种使用语言 B 表示语言 A 的所有术语(例如程序或描述)的方法。
- 数据压缩,将信号转换为针对传输或存储优化的代码,通常使用编解码器完成。
- 神经编码是信息在神经元中表达的方式。
- 记忆编码,将感觉转化为记忆的过程。
- 电视编码:NTSC, PAL 和 SECAM
解码的其他例子包括: