功能
1.鉴别 编码是鉴别信息分类对象的唯一标识。
2.分类 当分类对象按一定属性分类时,对每一类别设计一个编码
信息编码
信息编码
,这时编码可以作为区分对象类别的标识。这种标识要求结构清晰,毫不含糊。
3.排序 由于编码所有的符号都具有一定的顺序,因而可以方便地按此顺序进行排序。
4.专用含义 由于某种需要,当采用一些专用符号代表特定事物或概念时,编码就提供一定的专用含义,如某些分类对象的技术参数、性能指标等。
目的
信息编码的目的在于为计算机中的数据与实际处理的信息之间建立联系,提高信息处理的效率。
基本原则
信息编码的基本原则是在逻辑上要满足使用者的要求,又要适合于处理的需要;
结构易于理解和掌握;
要有广泛的适用性,易于扩充。
代码类型
一般应有的代码有两类,一类是有意义的代码,即赋予代码一定的实际意义,便于分类处理;一类是无意义的代码,仅仅是赋予信息元素唯一的代号,便于对信息的 *** 作。常用的代码类型有:
(1)顺序码,即接信息元素的顺序依次编码;
(2)区间码,即用一代码区间代表某一信息组;
(3)记忆码,即能帮助联想记忆的代码。
信息的表现形式多种多样,因而编码的方案也非常多。例如:我国制定的包括一、二级汉字和常用符号的图形字符代码(GB 5007-85),日文、韩文等其他文字与符号的“大5码”(BIG 5),英文字符的“ASCII码”(American Standard Code for Information Interchange) 。
系统设计
1、确定系统目标:根据系统的总目标确定PDM系统的信息内容,对企业与产品相关的数据与信息进行全面调查;分析各类信息的性质、特征;优化和重组信息分类;统一定义信息名称,提供系统设计数据。主要有以下方面的信息:物料、设计文件(方案、计算书等)、工艺文件(工艺路线、工艺过程卡片等)、产品图纸、更改单等。
2、数据调查分析:
初步调查:初步调查是对企业的基本情况进行调查,包括企业生产计划、生产类型、产品品种、产量、设备、工艺、生产能力、质量、成本、产品的稳定性、产品的发展趋势、库存、销售和服务情况等。
现状调查:根据初步调查所确定的信息范围对企业现行的信息分类、编码情况和产品结构数据等进行深入的调查,收集全部应有单据、报表、台帐明细表、各类文件等。
《信息编码》
《信息编码》
特征分析:对收集到的信息采用特征表的方法进行特征分析,对需要统一名称的或多名称的事物或概念、数据项和数据元统一定义。
3、确定清单:初步整理收集来的信息,列出清单或名称表,并尽可能使用文字、数字的代码进行描述。
4、制定编码规则 每个信息均应有独立的代码,信息代码一般是由分类码和识别码组成的复合码。分类码是表示信息类别的代码,识别码是表示信息特征(如结构形状、材料、工艺等)的代码。
信息分类编码系统的结构一般采用十进分类法系统。十进分类法系统中,层次是以树的结构形式表示,各码位数字的位置依前一位而定,并用0~9数字表示,每个码位表达一个固定的含义。
为了保证代码正确的输入,对较长的代码和那些关键性的代码,应加校验码,以检查其输入、传输等 *** 作而产生的错误。
不同类别的信息可以有不同的编码规则,对同一类信息采用等长编码。
5、建立编码系统:选用实际应用中已经成熟的编码系统,尽量采用企业已存在的各种不同内容的信息代码(物料代码、产品代码和工装代码等),予以试套、调整和修改以变为本企业的信息编码系统。
6、验证:编码系统形成后,应对编码系统进行试套验证、修改和补充,以确保编码系统的可靠性及适用性。
7、发布实施:全部分类系统、编码系统和各种代码应按企业标准
8、结论
产品信息编码是离散型制造企业实施信息化的基础工作,它是实施PDM的前提,更是实施ERP的必要条件,对一个集团企业,如果其子公司业务相关联,不管是单地点或是多地点公司,都应当采用统一的编码体系。科学设计一套编码体系是保障PDM/ERP成功的关键,在进行编码体系设计时,应当要有标准化人员、产品设计人员、采购人员、生产管理人员等人的共同参与,充分考虑好各独立子系统的需求,同时,更要考虑好各子系统编码的集成,以免产生新的系统孤岛。
/*********************************************************************** Name: 哈夫曼编码源代码
* 实现过程:着先通过 HuffmanTree() 函数构造哈夫曼树,然后在主函数 main()中
* 自底向上开始(也就是从数组序号为零的结点开始)向上层层判断,若在
* 父结点左侧,则置码为 0,若在右侧,则置码为 1。最后输出生成的编码。
************************************************************************/
#include <stdio.h>
#include<stdlib.h>
#define MAXBIT 100
#define MAXVALUE 10000
#define MAXLEAF 30
#define MAXNODE MAXLEAF*2 -1
typedef struct
{
int bit[MAXBIT]
int start
} HCodeType /* 编码结构体 */
typedef struct
{
int weight
int parent
int lchild
int rchild
int value
} HNodeType /* 结点结构体 */
/* 构造一颗哈夫曼树 */
void HuffmanTree (HNodeType HuffNode[MAXNODE], int n)
{
/* i、j: 循环变量,m1、m2:构造哈夫曼树不同过程中两个最小权值结点的权值,
x1、x2:构造哈夫曼树不同过程中两个最小权值结点在数组中的序号。*/
int i, j, m1, m2, x1, x2
/* 初始化存放哈夫曼树数组 HuffNode[] 中的结点 */
for (i=0 i<2*n-1 i++)
{
HuffNode[i].weight = 0//权值
HuffNode[i].parent =-1
HuffNode[i].lchild =-1
HuffNode[i].rchild =-1
HuffNode[i].value=i //实际值,可根据情况替换为字母
} /* end for */
/* 输入 n 个叶子结点的权值 */
for (i=0 i<n i++)
{
printf ("Please input weight of leaf node %d: \n", i)
scanf ("%d", &HuffNode[i].weight)
} /* end for */
/* 循环构造 Huffman 树 */
for (i=0 i<n-1 i++)
{
m1=m2=MAXVALUE /* m1、m2中存放两个无父结点且结点权值最小的两个结点 */
x1=x2=0
/* 找出所有结点中权值最小、无父结点的两个结点,并合并之为一颗二叉树 */
for (j=0 j<n+i j++)
{
if (HuffNode[j].weight < m1 && HuffNode[j].parent==-1)
{
m2=m1
x2=x1
m1=HuffNode[j].weight
x1=j
}
else if (HuffNode[j].weight < m2 && HuffNode[j].parent==-1)
{
m2=HuffNode[j].weight
x2=j
}
} /* end for */
/* 设置找到的两个子结点 x1、x2 的父结点信息 */
HuffNode[x1].parent = n+i
HuffNode[x2].parent = n+i
HuffNode[n+i].weight = HuffNode[x1].weight + HuffNode[x2].weight
HuffNode[n+i].lchild = x1
HuffNode[n+i].rchild = x2
printf ("x1.weight and x2.weight in round %d: %d, %d\n", i+1, HuffNode[x1].weight, HuffNode[x2].weight) /* 用于测试 */
printf ("\n")
} /* end for */
/* for(i=0i<n+2i++)
{
printf(" Parents:%d,lchild:%d,rchild:%d,value:%d,weight:%d\n",HuffNode[i].parent,HuffNode[i].lchild,HuffNode[i].rchild,HuffNode[i].value,HuffNode[i].weight)
}*///测试
} /* end HuffmanTree */
//解码
void decodeing(char string[],HNodeType Buf[],int Num)
{
int i,tmp=0,code[1024]
int m=2*Num-1
char *nump
char num[1024]
for(i=0i<strlen(string)i++)
{
if(string[i]=='0')
num[i]=0
else
num[i]=1
}
i=0
nump=&num[0]
while(nump<(&num[strlen(string)]))
{tmp=m-1
while((Buf[tmp].lchild!=-1)&&(Buf[tmp].rchild!=-1))
{
if(*nump==0)
{
tmp=Buf[tmp].lchild
}
else tmp=Buf[tmp].rchild
nump++
}
printf("%d",Buf[tmp].value)
}
}
int main(void)
{
HNodeType HuffNode[MAXNODE] /* 定义一个结点结构体数组 */
HCodeType HuffCode[MAXLEAF], cd /* 定义一个编码结构体数组, 同时定义一个临时变量来存放求解编码时的信息 */
int i, j, c, p, n
char pp[100]
printf ("Please input n:\n")
scanf ("%d", &n)
HuffmanTree (HuffNode, n)
for (i=0 i < n i++)
{
cd.start = n-1
c = i
p = HuffNode[c].parent
while (p != -1) /* 父结点存在 */
{
if (HuffNode[p].lchild == c)
cd.bit[cd.start] = 0
else
cd.bit[cd.start] = 1
cd.start-- /* 求编码的低一位 */
c=p
p=HuffNode[c].parent /* 设置下一循环条件 */
} /* end while */
/* 保存求出的每个叶结点的哈夫曼编码和编码的起始位 */
for (j=cd.start+1 j<n j++)
{ HuffCode[i].bit[j] = cd.bit[j]}
HuffCode[i].start = cd.start
} /* end for */
/* 输出已保存好的所有存在编码的哈夫曼编码 */
for (i=0 i<n i++)
{
printf ("%d 's Huffman code is: ", i)
for (j=HuffCode[i].start+1 j < n j++)
{
printf ("%d", HuffCode[i].bit[j])
}
printf(" start:%d",HuffCode[i].start)
printf ("\n")
}
printf("Decoding?Please Enter code:\n")
scanf("%s",&pp)
decodeing(pp,HuffNode,n)
getch()
return 0
}
编码方式有哪些_简述常用的编码方式1、ASCII码
学过计算机的人都知道ASCII码,总共有128个,用一个字节的低7位表示,0~31是控制字符如换行回车删除等;32~126是打印字符,可以通过键盘输入并且能够显示出来。
2、ISO-8859-1
128个字符显然是不够用的,于是ISO组织在ASCII码基础上又制定了一些列标准用来扩展ASCII编码,它们是ISO-8859-1~ISO-8859-15,其中ISO-8859-1涵盖了大多数西欧语言字符,所有应用的最广泛。ISO-8859-1仍然是单字节编码,它总共能表示256个字符。
3、GB2312
它的全称是《信息交换用汉字编码字符集基本集》,它是双字节编码,总的编码范围是A1-F7,其中从A1-A9是符号区,总共包含682个符号,从B0-F7是汉字区,包含6763个汉字。
4、GBK
全称叫《汉字内码扩展规范》,是国家技术监督局为windows95所制定的新的汉字内码规范,它的出现是为了扩展GB2312,加入更多的汉字,它的编码范围是8140~FEFE(去掉XX7F)总共有23940个码位,它能表示21003个汉字,它的编码是和GB2312兼容的,也就是说用GB2312编码的汉字可以用GBK来解码,并且不会有乱码。
5、GB18030
全称是《信息交换用汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与GB2312编码兼容,这个虽然是国家标准,但是实际应用系统中使用的并不广泛。
6、UTF-16
说到UTF必须要提到Unicode(UniversalCode统一码),ISO试图想创建一个全新的超语言字典,世界上所有的语言都可以通过这本字典来相互翻译。可想而知这个字典是多么的复杂,关于Unicode的详细规范可以参考相应文档。Unicode是Java和XML的基础,下面详细介绍Unicode在计算机中的存储形式。
UTF-16具体定义了Unicode字符在计算机中存取方法。UTF-16用两个字节来表示Unicode转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是16个bit,所以叫UTF-16。UTF-16表示字符非常方便,每两个字节表示一个字符,这个在字符串 *** 作时就大大简化了 *** 作,这也是Java以UTF-16作为内存的字符存储格式的一个很重要的原因。
7、UTF-8
UTF-16统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍,在现在的网络带宽还非常有限的今天,这样会增大网络传输的流量,而且也没必要。而UTF-8采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由1~6个字节组成。
UTF-8有以下编码规则:
如果一个字节,最高位(第8位)为0,表示这是一个ASCII字符(00-7F)。可见,所有ASCII编码已经是UTF-8了。
如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数,例如:110xxxxx代表它是双字节UTF-8字符的首字节。
如果一个字节,以10开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)