精华内容
下载资源
问答
  • matlab中只能够实现十进制整数转换为二进制,对于...下面是自己编写的实现十进制小数的二进制编码的matlab代码。 基本原理: 整数部分:除二取整,逆序排列 小数部分:乘二取整,顺序排列 `` 在这里插入代码片 ...

    matlab中只能够实现十进制整数转换为二进制,对于小数部分会直接忽略,这对于精确度很高的数据来说,非常不合理。
    下面是自己编写的实现十进制小数的二进制编码的matlab代码。

    基本原理:

    • 整数部分:除二取整,逆序排列
    • 小数部分:乘二取整,顺序排列

    代码:

    含小数的十进制数转二进制:dec2inderectBin()

    % d 十进制数(或数组)
    % down 十进制数取值范围的下界
    % up 十进制数取值范围的上界
    % esp 精度
    
    function [dec2inbin,intL,decL] = dec2inderectBin(d,down,up,esp)
    % dec2inbin 二进制数组。行数为输入的十进制数的个数,列数为m
    % intL 整数部分长度,个数为输入的十进制数的个数
    % decL 小数部分长度,个数为输入的十进制数的个数
    
    % 老师讲的公式,十进制数用几位二进制表示
    m = ceil(log2((up-down)/esp));
    
    dec2inbin=[];
    intL=[];
    decL=[];
    for i=1:size(d,2)
     dec=d(i);
        % 整数部分
        integer=floor(dec);
        integer2bin=dec2bin(dec);
        intL=[intL size(integer2bin,2)];
        % 小数部分
        decimal=dec-integer;
        decimal2bin=[];
            for j = 1 : m-size(integer2bin,2)
            decimal2bin = [decimal2bin num2str(floor(decimal*2))];
            decimal=decimal*2-floor(decimal*2);
        end
        decL=[decL size(decimal2bin,2)];
        % 整数和小数拼接
        dec2inbinS=[integer2bin decimal2bin];
        dec2inbin=[dec2inbin;dec2inbinS];
    end
    end

    二进制表示的小数转十进制数:inderectbin2dec()

    % b 二进制编码数组。行数为需要解码的二进制数个数,列数为二进制编码位数
    % down 十进制数取值范围的下界
    % up 十进制数取值范围的上界
    % intL 整数部分长度,个数为输入的十进制数的个数
    % decL 小数部分长度,个数为输入的十进制数的个数
    
    function dec=inderectbin2dec(b,down,up,intL,decL)
    % dec 十进制数
    
    dec=[];
    for i=1:size(b,1)
        bin=b(i,:);
        % 整数部分
        integer=bin2dec(bin(1:intL(i)));
        % 小数部分
        decimal=0;
        for j = intL(i)+1 : intL(i)+decL(i)
            decimal=decimal+str2num(bin(j))*2^(intL(i)-j);
        end
        dec=[dec;integer+decimal];
    end
    end
    展开全文
  • 哈夫曼编码和二进制编码_案例

    千次阅读 2020-12-31 19:59:11
    哈夫曼编码优于二进制编码案例: 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。试为这8个字母设计哈夫曼编码。使用0~7的二进制表示形式是另...

    哈夫曼编码优于二进制编码案例:
    假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。试为这8个字母设计哈夫曼编码。使用0~7的二进制表示形式是另一种编码方案。对于上述实例,比较两种方案的优缺点。

    解:
    先将概率放大100倍,以方便构造哈夫曼树。
    w={7,19,2,6,32,3,21,10},
    按哈夫曼规则建立哈夫曼树如图:
    在这里插入图片描述
    方案一(哈夫曼编码):
    在这里插入图片描述
    方案二(二进制编码):
    在这里插入图片描述
    方案一带权路径长度计算如下:
    WPL=2*(0.19+0.32+0.21)+4*(0.07+0.06+0.10)+5*(0.02+0.03)=2.61
    方案二带权路径长度计算如下:
    WPL=3*(0.07+0.19+0.02+0.06+0.32+0.03+0.21+0.10)=3
    结论:本案例哈夫曼编码优于等长二进制编码。

    展开全文
  • 字长是计算机信息处理中能同时处理的二进制数据的长度二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪...

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。

    字长是计算机信息处理中能同时处理的二进制数据的长度。二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统。

    在通信系统中,经常使用二进制格式对信息进行编码。二进制文件由数据产生模块(Data Supply,DS )产生后,经过存储或传输,由数据分析模块(Data Analysis, DA)进行分析处理。

    在一个二进制文件中,通常包括若干条记录,每条记录又包括若干个字段。字段可以是各种数据类型,由此导致记录也具有各种数据类型。数据类型的不同导致了数据在二进制文件中所占用的存储长度不同。由于在二进制文件中数据是连续存储的,为了保证DA能够正确识别记录和字段的起始点和终止点,在每个记录的数据开始的地方由固定长度的记录特征码表示这个记录的数据类型,又由固定长度的记录长度码来表示这个记录的长度。DA根据特征码在预先与DS约定好的索引表中索引到对应的记录数据类型,进一步根据记录的数据类型确定记录内所包含的字段的数据类型。

    展开全文
  • 遗传算法之二进制编码

    万次阅读 热门讨论 2017-09-05 19:33:43
    遗传算法的基本步骤遗传算法 GA 的流程如图所示:Created with Raphaël 2.1.0编码把所需要选择的特征进行编号,每一个特征就是一个基因,一个解就是一串基因的组合。为了减少组合数量,在图像中进行分块,然后把每...

    遗传算法的基本步骤

    遗传算法 GA 的流程如图所示:

    Created with Raphaël 2.2.0

    编码

    把所需要选择的特征进行编号,每一个特征就是一个基因,一个解就是一串基因的组合。为了减少组合数量,在图像中进行分块,然后把每一块看成一个基因进行组合优化的计算。每个解得基因数量是要通过实验确定的。

    遗传算法不能直接处理问题空间的参数,必须把它们转换成遗传空间的由基因按一定结构组成的染色体或个体。这一转换操作就叫做编码。评估编码策略常采用以下 3 个规范。
    (1) 完备性(Completeness): 问题空间中的所有点(候选解)都能作为 GA 空间中的点(染色体)表现。
    (2) 健全性(Soundness): GA 空间中的染色体能对应所有空间中的候选解。
    (3) 非冗余性(Nonredundancy): 染色体和候选解一一对应。

    目前几种常用的编码技术有二进制编码、浮点数编码、字符编码、编程编码等二进制编码是遗传算法中最常见的编码方法,即由二进制字符集 {0, 1} 产生通常的 0, 1 字符串来表示问题的候选解。它具有以下特点

    (1) 简单易行;
    (2) 符合最小字符集编码原则;
    (3) 便于用模式定理进行分析。

    染色体编码最常用的是二进制编码,对于离散性变量直接进行编码,对于连续性变量先离散化后再编码。

    科普1:SPSS常用的基础操作(2)——连续变量离散化
    (下面的这个地址中详细介绍了什么是连续变量离散化及其必要性)

    人人都是数据咖:http://www.ppvke.com/Blog/archives/44271
    

    科普2:连续特征的离散化:在什么情况下将连续的特征离散化后可以获得更好的效果?

    问答来源于知乎:https://www.zhihu.com/question/31989952
    

    举个例子

    已知一元函数:

    F(x) = xsin(10pi*x)+2 x∈[-1, 2]

    现在要求在既定的区间内找出函数的最大值。

    首先我们可以先用 MATLAB 把该函数的图像画出来:

    clc, clear;
    syms f(x); % 声明函数
    x = linspace(-1,2,3000); % 定义 x, x 属于 [-1, 2]
    f = x.*sin(10*pi.*x)+2; % 定义函数,因为 x 是向量,所以采用点乘
    plot(f); % 画图
    

    然后做出图形如下:

    这里写图片描述

    我们可以看到,该图形显示说明该函数具有多个局部最优解,所以适合用遗传算法进行求解。

    由遗传算法的基本步骤可知我们第一步应该是编码:

    二进制编码

    受到人类染色体结构的启发,我们可以设想一下,假设目前只有 0 和 1 两种碱基,我们也用一条链把它们有序的串连在一起,因为每一个单位都能表现出 1bit 的信息量,所以一条足够长的染色体就能为我们勾勒出一个个体特征的所有特征。这就是二进制编码

    下面将介绍如何建立二进制编码到一个实数的映射。

    明显地,一定长度的二进制编码序列,只能表示一定精度的浮点数。譬如我们要求小数点后精确到六位小数,由于区间长度为

    2 - (-1) = 3
    

    为了保证精度的要求,至少把区间 [-1, 2] 分为 3*10^6 等份。又因为

    2097152=2^21 < 3*10^6 < 2^22=4194304
    

    所以编码的二进制串至少有 22 位。
    把一个二进制串 (b1b2…bn) 转换为区间里面对应的实数值通过下面两个步骤。
    (1) 将一个二进制串代表的二进制转换为十进制数:

    这里写图片描述
    (2) 对应区间的实数:

    这里写图片描述

    或许有人并不知道是如何把数值转换到对应区间的实数的,为什么要这么做?我也是问了一下我的小伙伴才知晓的,下面我来简单的说一下:
    通常我们归一化到 [0, 1],有时候我们需要归一化到其它区间,这样算一下就可以找到数列的最小值 m 及最大值 M,如果指定的区间是 [a, b],即:

    m-->a, M-->b;
    

    系数为:

    k = (b-a)/(M-m)
    

    对任意项Xn:变成:

    X = a+k(Xn-m)
    

    (二进制编码, 很多朋友评论说代码有问题,各位可以帮忙检查一下问题所在,嘻嘻~)
    将十进制转换为二进制的 MATLAB 程序代码如下:

    %% 将十进制数转换为二进制数(二进制编码)
    % @params dec_num 十进制数
    % @params N       需保留的二进制小数位数
    function bin_num = encode(dec_num, N)
    	split = '.';
    	if rem(dec_num, 1) == 0
    		bin_num = dec2bin(dec_num);
    		float_num = zeros(1, N);
            bin_num = strcat(num2str(bin_num), split);
            bin_num = strcat(bin_num, num2str(float_num));
    	else
    		remainder = rem(dec_num, 1); % 小数部分
    		integer = floor(dec_num); % 整数部分
    		bin_num_int = dec2bin(integer);
    		i = 1;
    		flag = true;
    		while(flag == true)
                remainder = remainder*2;
    			if (i > N) % 是否满足精度
    				return;
    			end
    			if remainder > 1
    				record(i) = 1;
                    remainder = rem(remainder, 1);
    			else if remainder == 1
    				record(i) = 1;
    				remainder = rem(remainder, 1);
    			else
    				record(i) = 0;
    			end
    			i = i+1;
    		end
    		bin_num_flt = record;
    		bin_num = strcat(num2str(bin_num_int), split);
    		bin_num = strcat(bin_num, num2str(bin_num_flt));
            end
        end
    end
    

    未完…(有机会再出第二章)

    展开全文
  • 话题:计算机中采用二进制编码的原因是什么回答:计算机采用二进制的原因 (1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。 (2)简化运算...
  • 大家对哈弗曼编码应该很熟悉,哈弗曼编码最大的一个用处就是压缩存储,本文要讲的不是如何编码,而是求出对字符串编码后的二进制位的长度。 估计一般的同学都会有思路,最简单的思路就是先构建好哈弗曼树,然后编码...
  • 类别特征的独热编码和二进制编码

    千次阅读 2019-09-23 19:08:22
    无序变量:独热编码、二进制编码 下面为大家介绍独热编码和二进制编码之间的区别。 1)独热编码:独热编码会将变量的不同取值(N种取值)分别赋予一个只有1位为0的N维向量。例如星期,共有7个取值,独热编码会把它...
  • 二进制编码的乘法器VHDL实现,csd编码,booth编码!程序长度适中,很有技巧,对乘法器的深入理解并编程
  • 二进制香农编码过程如下: 1、将信源发出的N个消息符号按其概率的递减次序依次排列。 2、按下式计算第i个消息的二进制代码组的码长,并取整。 3、为了编成唯一可译码,首先计算第i个消息的累加概率 4、将累加概率Pi ...
  • 简单遗传算法(二进制编码

    万次阅读 2015-06-27 11:56:41
    #include #include #include #include #define M 80 //种群数量 #define LEN 20 //编码长度 #define xmin -1 //下限 ...#define MMAX (int)pow(2,LEN)//编码长度对应的最大二进制数 #define PI 3.1415926 #
  • 二进制编码-详细讲解

    千次阅读 2014-05-05 10:39:00
    以前学习二进制编码时,老师讲了一堆堆的什么原码啊反码啊补码啊xxxx转换啊,还有负数的表示方式啊 总是记不零清,终于从网上找到了一种比较好的讲解方式,保存再share一下,不过为了系统化讲解,又找来了一些编码的...
  • 遗传算法的二进制编码

    千次阅读 2020-06-01 20:08:34
    假设我们要用遗传算法求解某个函数的最大值,x的取值范围是[-3.0,12.1],那么我们现在就是要从这个取值范围内...首先一个直观的想法是直接找到十进制对应的二进制,但是如果是那样做就涉及到有符号的二进制数了。 所
  • 类似于,二进制数据以字符串的长度编码。 这个JavaScript模块base1是Base1编码的第一个实现。 空输入将成为空字符串。 单字节0x00变为“ A”。 0x01变为“ AA”。 0x02变为“ AAA”。 0xFF变为 ...
  • 一个字节八个比特,就是八个二进制位 四个二进制数最大表示为15,就是一个16进制数,所以八位可以表示成两个16进制的数! 因为一个字节中存在8个 bit可以表示256个字符,而 ASCII 码只能表示0-127种字符,为了能完整地...
  • 遗传算法求三元函数极值(python)-采用二进制编码 本文的遗传算法采用二进制编码求三元函数极值 所求函数为 要想使用遗传算法,首要任务是进行编码 传统的 GA 中, DNA 我们能用一串二进制来表示, 比如: DNA1 = [1...
  • C语言 编码:将文字转换为对应字符的8位二进制形式的ASCII码或内码 译码:将8位二进制编码转换为文字
  • 简单的二进制编码

    2020-04-20 16:08:05
    在这个疯狂的世界中,我们仍然看到大量使用ASCII编码的表示形式,例如FIX标签值,以及一些更合理的二进制编码的表示形式,例如FAST 。 有些市场甚至犯下了以XML发送市场数据的罪过! 好吧,我不能抱怨太多,因为...
  • 遗传算法 二进制编码方式

    千次阅读 2016-01-12 11:35:31
    转自: ... 用遗传算法求y=x*sin(10*pi*x)+2的最大值 -1= 精确到6位小数 pow(2,21)*1000000(2,22) 编码二进制长度为22 */ #include #in
  • 请设计一个算法,给一个字符串进行二进制编码,使得编码后字符串的长度最短。 输入描述: 每组数据一行,为待编码的字符串。保证字符串长度小于等于1000。 输出描述: 一行输出最短的编码后长度。 输入例子: MT...
  • 二进制编码--负数

    千次阅读 2010-08-02 22:16:00
    二进制编码--负数2010年07月25日 星期日 下午 03:25 原帖:http://hi.baidu.com/wy_51131/blog/item/3826821f7664fd1440341715.html 负数:
  • 先来统计每个字符的个数: H:1,I:2,_:1,K:1,W:1,A:1, 然后去看:
  • 二进制霍夫曼编码

    千次阅读 2019-02-22 15:26:02
    通过查看其他博客的内容,...二进制编码就是用0和1的组合来表示其他字符; 霍夫曼编码(Huffman Coding)是一种编码方式,是一种用于无损数据压缩的熵编码(权编码)算法,通常用于无损数据压缩。(详见维基百科:...
  • 二进制编码就是用0和1的组合来表示其他字符;霍夫曼编码(Huffman Coding)是一种编码方式,是一种用于无损数据压缩的熵编码(权编码)算法,通常用于无损数据压缩。(详见维基百科:https://en.wi...
  • 遗传算法的编码方法各种各样,但二进制编码方式是最经典的一种,那么它的编码和解码该如何进行呢?或许本博客能给你一个具有参考价值的答案。 编码 经典遗传算法中使用“染色体”来代指个体,它由二进制串组成,...
  • 晚上在读格式化字符串exploitation时发现,自己对符号数,无符号数和其对应的二进制编码已经混淆不清了。而在微软等的面试中,这些基础都是重点,只好浪费下时间在此回顾下。   故事是这样发生的...
  • 二进制哈夫曼编码

    千次阅读 2017-09-05 15:12:59
    现有一段文言文,要通过二进制哈夫曼编码进行压缩。假设这段文言文只由4个汉字“之”“乎”“者”“也”组成,它们出现的次数分别为700、600、300、200。那么,“也”字的编码长度是( )。   哈弗曼编码的...
  • 利用哈夫曼编码,字符出现的频率越大,则使用越短的二进制进行编码,构建最优二叉树。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 180,420
精华内容 72,168
关键字:

二进制编码长度