精华内容
下载资源
问答
  • 12.选择计算机数据表示时要考虑哪些因素? 数据类型 :包括数值数据和非数值数据,常见的数值数据类型包括小数、整数、实数,非数值数据包括ASCII和汉字。 数据表示范围和精确度 :这与计算机的字长有关。 ...

    1.进位计数制表示的要素有哪些?

    • 数码:一组用来表示某种数制的符号。例如,十进制的数码是0、1、2、3、4、5、6、7、8、9;二进制的数码是0、1 。
    • 基数:某数制可以使用的数码个数。例如,十进制的基数是10;二进制的基数是2 。
    • 数位:数码在一个数中所处的位置。
    • :权是基数的幂,表示数码在不同位置上的数值。

    2.二进制、八进制、十进制、十六进制之间如何相互转换?

    二进制、八进制、十进制、十六进制的转换

    3.什么是真值,什么是机器数,机器数的常用码制有哪些?

    • 真值:一般书写时表示的数。
    • 机器数:在机器中进行编码表示的数。
    • 机器数常用的码制为二进制(通常为八位二进制)。

    4.什么是定点数?什么是浮点数?

    定点表示法约定机器中所有数据的小数点位置固定。其中,将小数点的位置固定在数据的最高数位之前(或者符号位之后)的数据表示称为定点小数(例如:0.2333),而将小数点固定在最低数位之后的数据表示被称为定点整数(例如:2333)。
    浮点表示法是小数点在数据中不固定,即小数点在数中可以浮动的一种数据表示方法,它由阶码尾码两部分组成,其中阶码的位数决定数据的范围,尾数的位数决定数据的精确度

    5.浮点数的规格化是如何规定的?

    在浮点运算过程中,为了保证数据的精度要求尾数的最高位为非0数码,即当尾数的值不为0时,其绝对值应大于或等于(1/2)₁₀。
    对于非规格化浮点数,通过将尾数左移或右移,并修改阶码的值以满足规格化要求。
    以补码表示为例,正数规格化后,尾数的形式为

    0.1XXXX…XX

    负数规格化后,尾数的形式为

    1.0XXXX…XX

    记号“X”可任取0或1。

    正数规格化后,尾数的最大值为

    0.11111…11

    尾数的最小值为

    0.10000…00

    即(1/2)=<m<1。
    负数规格化后,尾数的最大值为

    1.01111…11

    尾数的最小值为

    1.00000…00

    即-1<m=<(1/2)。

    6.IEEE754如何规定的?阶码和尾数如何规定?举个例子进行计算。

    • 32位IEEE754浮点数据格式:由符号位S,阶码部分E和尾数部分M组成,具体形式如下:
    数符S 阶码E 尾数M
    S占一位 E占8位 M占23位
    • 关于阶码字段E,在IEEE754标准中,阶码部分采用偏移值为127(01111111)的移码表示。

    • 关于尾数字段,在IEEE754标准中,约定小数点左边隐含一位1,即尾数的实际有效位数为24位,完整的尾数形式为1.M,但在进行浮点数数据表示时只保存M。这也解释正是因为位数变成1.M,阶码的偏移值才为127而不是128(即2⁷)。

    • 例子:题目:试将(-0.1101)₂用IEEE短浮点数格式表示出来
      答案:(BF500000 )ᴴ
      解析:
      -0.1101=1.101 x 2 ^(-1)x (-1) ^1
      数符为1
      阶码=-1+127=126=(01111110)₂

      因此(-0.1101)₂可表示为:

    数符 阶码 尾数
    1 01111110 10100000000000000000000

    1 01111110 10100000000000000000000
    转换为16进制有:

    1011 1111 0101 0000 0000 0000 0000 0000
    B F 5 0 0 0 0 0

    即BF500000 H

    7.计算机中字符数据如何表示?汉字如何在计算机中表示?

    • 非数值数据是一种没有数值大小之分的数据,也称为字符数据,如符号、文字等。
    • 字符的表示方法:国际上广泛采用美国国家信息交换标准代码,简称ASCII码表示字符。它选用了常用的128个符号,并用7位二进制对它们进行编码,即用0000000~11111111,如果加上一个校验位,可正好用一个字节(8位)表示一个字符。
    • 汉字编码:计算机要对汉字信息进行处理,首先要将汉字转换为计算机可以识别的二进制形式并输入到计算机,这是由汉字输入码(汉字的输入) 完成的;汉字输入到计算机后,还需要转换成内码(计算机内存储和处理汉字时使用的编码) 才能被计算机处理,如果要显示或者打印汉字,还需要将汉字的内码转换成 字形码(汉字的输出码)
    • 一个汉字由2个字节(16位)表示。

    8.如何判断定点数补码加法和减法运算中有否溢出?

    溢出检测主要有三种方法:

    • 根据操作数和运算结果的符号位是否一致进行检测:显然,只有两个符号相同的数相加才有可能产生溢出。
      设Xₘ和Yₘ为参加运算数的符号位,Sₘ为结果的符号位,V为溢出标志位,当V取1时表示发生溢出:
      在这里插入图片描述
    • 根据运算过程中最高数据位的进位与符号位的进位位是否一致进行检测
      设运算时有效数据位产生的进位信号为Cₘ,符号位产生的进位信号为Cₙ,当Cₘ和Cₙ同步的情况下,才会发生溢出:
      在这里插入图片描述
    • 利用变形补码进行检测:变形补码,即用两个二进制位来表示数据的符号位,其余与补码相同。采用变形补码后,正数的符号以“00”表示,负数的符号以“11”表示。若运算结果的符号位为“01”或“10”,则表示分别产生了上溢和下溢。

    9.算术移位和逻辑移位有什么不同?它们分别左移和右移要注意什么?

    • 不同点算术左移和算术右移主要用来进行有符号数的倍增、减半逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半
    • 逻辑移位

    左移:左边一位移出,右边空出位补0;

    	移位前的数据:11101110 
    	移位后的数据:11011100
    

    右移:右边一位移出,左边空出位补0;

    	移位前的数据:11101110 
    	移位后的数据:01110111
    
    • 算术移位

    左移:各位依次左移,右边空出位补0,一次移位相当于乘以2,当符号位改变表明溢出

    	移位前的数据:11101110
    	移位后的数据:11011100
    

    右移:符号位保持不变,其余各位依次左移,最右边移位移出,将符号位复制到左边空出的位,一次移位相当于除以2

    	移位前的数据:11101110
    	移位后的数据:11110111
    

    10.两个浮点数是如何实现加减的?举例说明加减法的步骤。

    设x=2⁻⁰¹¹x(-0.101100),y=2⁻⁰¹⁰ x0.011110,又假定数的阶码为3位,尾数为6位(均不含符号位),且都用补码表示,按照补码浮点数运算步骤计算x+y。

    • 先用补码形式表示x和y(设符号位均取2位):
      [x]补=11 101 11.010100(101为-011取补码,010100为101100取补码)
      [y]补=11 110 00.011110(110为-010取补码,011110为011110取补码)

    • 对阶
      [△E]补=[Ex]补+[-Ey]补=11 101+00 010=11 111
      所以△E=-1
      所以x的阶码比y的阶码小1。
      根据对阶的原则(小的阶码向大的阶码看齐),将x的尾数向右移动1位,同时阶码加1,对阶后的x为:
      [x]补=11 110 11.101010

    • 尾数的运算

         11.101010
        +00.011110
         ̄ ̄ ̄ ̄ ̄ ̄
         00.001000
      
    • 尾数规格化处理
      尾数的形式为00.01X…X,故要左移规格化,将结果的尾数向左移动两位,同时阶码减2。
      规格化处理的结果为[x+y]补=11100 00.100000

    • 舍入
      最后没有丢掉有效数字,所以不需要舍入。

    • 溢出判断
      由于阶码的双符号位相同,故没有发生溢出。
      最后的结果为:

        	x+y=2⁻¹⁰⁰x0.100000 
      

    11.简述奇偶校验

    • 偶校验时,若有效信息中有偶数个1,则校验位取值为0;若有效信息中有奇数个1,则校验位取值为1。
    • 奇校验时,若有效信息中有偶数个1,则校验位取值为1;若有效信息中有奇数个1,则校验位取值为0。
    • 奇偶校验提供的有错信息可靠。

    12.选择计算机数据表示时要考虑哪些因素?

    • 数据类型:包括数值数据和非数值数据,常见的数值数据类型包括小数、整数、实数,非数值数据包括ASCII和汉字。
    • 数据表示范围和精确度:这与计算机的字长有关。
    • 存储和处理的代价:设计的数据格式要便于存储和处理,这不仅有利于降低数据存储和处理过程中对硬件资源的消耗,而且能提高数据处理的速度。
    • 软件的可移植性
    展开全文
  • 第二,手机与手机之间处理速度也不一样 第三,第三方数据库比原生sqlite快,比如greendao什么的 第四,可以使用放弃原生sqlite,使用mapdb存储 我们今天就说说第一点,硬件差距大的问题。 一、架构差异 架构只相当于...

    我们从一个问题说起
    在这里插入图片描述
    那天有个哥们问了这样一个问题。群里给出的回答就是;

    第一,硬件差距太大
    第二,手机与手机之间处理速度也不一样
    第三,第三方数据库比原生sqlite快,比如greendao什么的
    第四,可以使用放弃原生sqlite,使用mapdb存储

    我们今天就说说第一点,硬件差距大的问题。
    一、架构差异
    架构只相当于一座建筑的框架,是最基本也是极为重要的部分。电脑CPU的架构有X86、X64等,而手机CPU主流是ARM架构,从ARM7、ARM9发展到Cortex-A7、A8、A9、A12、A15。
    PC机是冯、诺依曼结构体系的计算机,而ARM是哈佛结构的计算机,指令结构也不一样,PC(指常见的X86CPU)用复杂指令系统(CISC),而ARM用精简指令系统(RISC)。
    由于定位的不同,手机CPU要功耗低、廉价。所以采用ARM架构的CPU,运算能力大大低于电脑CPU的运算能力,同等频率CPU浮点运算能力相差在几千到上万倍。
    二、工艺&主频
    另外顺便谈谈工艺制程,手机CPU主流28nm,电脑主流22nm。虽然电脑略高,但是手机CPI的发展速度很快,正在朝着14nm迈进。
    再来说说主频,CPU的主频与CPU实际的运算能力存在一定的关系,但并没有直接关系。决定CPU的运算速度还要看CPU的的综合指标,有缓存、指令集,CPU的位数等因素。
    因为CPU的位数很重要,这也就是搭载了64位的CPU的手机比32位快的多的原因。手机CPU和电脑CPU架构由于不同,相同主频下电脑CPU要比手机CPU的运算能力高几十到几百倍。
    三、核心的影响
    手机多核其实应该叫多CPU,将多个CPU芯片封装起来处理不同的事情,你甚至可以戏称为“胶水核心”,也就是被强行粘在一起的意思。在待机或者空闲的时候,八核的手机也只能用到一到两个核心。
    而电脑则不同,PC的多核处理器是指在一个处理器上集成了多个运算核心,通过相互配合、相互协作可以处理同一件事情,是多个并行的个体封装在了一起。用一句话概括,就是并行处理,双核就是单车道变多车道。
    在处理同一件事情时候,核心的增多并没有手机CPU运算能力并没有实际性的增强,可以想象八辆车挤在单车道上的场景。这也就是为什么Intel的atom手机处理器和苹果的处理器只有双核,却要比大多同频率四核处理器都强。
    四、GPU核心
    一般来说,手机GPU是与CPU封装在一起的在同一快SoC上,相当intel的核芯显卡。而电脑则不同,早期电脑的CPU通常都是助攻运算,视频和图形处理都交给显卡,显卡集成在北桥中。
    后来有了独立显卡,而集显慢慢的集成到了CPU中,而现在核心显卡正在慢慢替代集显了。值得一提的是,Intel最新的核芯显卡功耗、性能都相当优秀,大有取代独立显卡的趋势。

    更新于20190724 15:51
    上面这段是我当时从百度知道copy的。然后想根据他分析一下,但是其实当时看的不是很懂,结果过了这么久,还是没时间。把自己的生活搞得一团糟。最近学习了系统结构,很多东西就豁然开朗了,知识之间的互补效应哈哈哈。

    展开全文
  • 一、计算机组成原理 1、半加器 ● 功能 ● 特性 2、全加器 ● 功能 ● 特性 3、串行加法器 ● 组成 ● 原理 ● 功能 4、超前进位加法器 ● 组成 ● 原理 ● 功能 ...

    一、加法运算器

    1、半加器

    ● 功能特性

    半加器是在加法中不考虑进位的一种加法器。
    一位半加器有两个输入端X和Y,一个输出端S。
    输出方程为:S = X ⊕ Y
    真值表如下:
    半加器真值表

    2、全加器

    ● 功能特性

    全加器是在半加器基础上,考虑进位的加法器。
    一位全加器有三个输入端X,Y和Ci-1,两个输出端S和Ci
    输出方程为:S = X ⊕ Y ⊕ Ci-1Ci=!Ci-1·X·Y + !X·Y·Ci-1 + !Y·X·Ci-1 + X·Y·Ci-1
    真值表如下:
    全加器真值表

    3、串行进位加法器

    ● 组成

    通过将n个全加器相连,可以得到串行进位加法器

    ● 功能

    串行进位加法器可以进行n位数字的算术加运算。

    ● 特点

    本位全加的结果需要等待低位进位Ci-1的到来后才能进行,运算时间受位数影响。

    4、超前进位加法器

    ● 原理

    若想加快加法器的运算速度,需要改变逐位进位的传送路径。解决办法之一是采用超前进位电路
    设Gn进位产生函数Gn=Xn·Yn,代表当X和Y均为1时,无论Cn-1是否为1,都必定产生进位;
    设Pn进位传递函数Pn=Xn+Yn,代表当X和Y有一个为1时,若低位有进位,则本位也会产生进位,相当于将进位传递至高位。
    对于4位加法器,其进位Cn有如下关系方程:
    C1 = G1 + P1C0
    C2 = G2 + P2C1 = G2 + P2G1 + P2P1C0
    C3 = G3 + P3C2 = G3 + P3G2 + P3P2G1 + P3P2P1C0
    C4 = G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0

    由此可以发现,所有的进位信号Cn均可以转化成仅关于C0和XnYn的表达式。可以由此设计额外的电路,达到超前进位的目的。

    ● 组成

    超前进位加法器由四个全加器外加一个超前进位电路组成。
    超前进位加法器

    ● 功能

    超前进位加法器可以在级间、组间做到并行加法运算。影响运算速度的因素不再是数字位数,而是进位信号的产生和传递问题

    5、74SL181ALU

    算术逻辑运算单元是计算机中组成运算器的核心部件。其不仅需要执行大量算术运算,同时也要执行逻辑运算。

    74LS181是一个4位超前进位的ALU。它能够进行16种逻辑运算和16种算术运算,输入端M是状态控制端,控制进行的运算类型;S3S2S1S0运算选择控制端,控制具体进行的运算。其具体功能表如下:
    74SL181功能表
    其中H表示高电平,等效为1;L表示低电平,等效为0;符号 + 表示逻辑或运算,汉字表示算术加运算。

    ● 16位快速ALU

    使用4片74LS181算术逻辑运算器,并采用类似4位超前运算加法器的方法将这4片运算器连接,就可以得到一个16位快速ALU
    由一位进位产生函数和进位传递函数的概念,可以得到四位一组的进位产生函数进位传递函数如下:
    Gn = G3 + P3G2 + P3P2G1 + P3P2P1G0
    Pn = P3P2P1P0

    通过此逻辑关系式,可以设计电路,达到4组超前进位的目的。
    74LS182是专门与74SL181配套使用的超前进位扩展器。它是实现上述逻辑关系式的集成电路。74LS182可以为4片74LS181提供超前进位支持,实现16位快速ALU
    16位快速ALU

    二、其它运算部件

    1、译码器

    译码器有n个输入端,2n及以内个输出端。每个根据输入端的输入组合,只有一个输出端被选通

    译码器将二进制数字转为十进制,下标等于输入数字的输出端被选通。这么理解虽然不准确,但比较易懂。

    下图是一个两输入四输出译码器,译码器常设置一个使能端E,设置译码器是否处于工作状态。
    两输入四输出译码器
    使能端可以用于扩展译码器。下图是使用两片三输入八输出译码器组成的四输入十六输出译码器:
    四输入十六输出译码器

    2、数据选择器

    数据选择器又称多路开关,是以与或门与或非门为主的电路。他在选择信号的作用下,从多个输入信号中选择一个作为输出信号。
    下图是双四通道选一数据选择器的逻辑电路与真值表。使能端的功能与译码器相似。
    双四通道选一数据选择器

    3、寄存器

    ● 寄存器

    寄存器是计算机的一个重要部件,用于暂存数据、指令等。它由触发器和一些控制门组成。在寄存器中,常用的是正边沿触发D触发器和锁存器。
    下图是一个正沿触发的D触发器组成的四位寄存器。在CP正沿作用下,外部数据才能进入寄存器。
    四位寄存器

    ● 移位寄存器

    为适应计算机的乘除操作,计算机中的寄存器需要移位功能,称为移位寄存器
    下图是一个双向四位移位寄存器。它有左移、右移、并行输入及保持功能,采用主-从R-S触发器作寄存元件。
    双向四位移位寄存器

    展开全文
  • 算法速度影响因素的本质 一

    千次阅读 2005-02-08 14:25:00
    算法速度影响因素的本质表面上,算法速度影响因素繁多,但事实上,如果我们穷根究底的话,也会在这个看似繁乱无序的世界里找出一些本质的东西。先考虑这么一个问题:如果b地在a地正东方,一个人要从a地去b地,那他...

    算法速度影响因素的本质
    表面上,算法速度的影响因素繁多,但事实上,如果我们穷根究底的话,也会在这个看似繁乱无序的世界里找出一些本质的东西。
    先考虑这么一个问题:
    如果b地在a地正东方,一个人要从a地去b地,那他可以有什么方法来缩短所花的时间?
    第一当然是交通工具。选择汽车和步行自然不可能是相同的效果,这对应与下文的第一部分:函数存储
    第二是不走弯路,若他向东南方向走了,那他就在南北方向上有了向南的偏移,之后他就必须向东北方向走来抵消刚才的偏移,这对应与下文的部分:计算冗余。
    现在让他的行进速度和其经验相关,比如,翻过第一座山后由于有了经验,今后翻山的速度会有很大的提升,这对应于下文的第二部分:过程存储

    1 函数存储
    计算机能以最快速度实现的操作,我们将称之为基本操作。比如简单的加减、逻辑运算,存储器读取写入,if...then语句等等。
    显然,计算机能进行的基本操作越多,算法速度就越容易提升。图灵机可进行的基本操作是很少的,一个简单的加法都要计算上很多步,因此没人会去试图造台图灵机作电脑用^_^。
    对输入为有限种可能的情况,我们可以建立一个散列表,将输入直接映射到内存地址上,而存储的内容为相应输入的输出结果,这样便产生了一个运行时间几乎和一次基本操作相当的算法。这样其实就是相当于把所要计算的函数直接存储到了内存里,使计算机又多了一个基本操作。可以看出这样对算法的速度提升会是惊人的(虽然是牺牲空间得到的)。这样方法其实我们在作算术中就应用到了:小学生背乘法表是为了什么?存储一系列函数,等计算更复杂的乘法时便可以将它分解成这些函数,然后快速得到结果。相必没人作乘法是先拆成加法,再一个个加起来吧?
    综上所述,当算法中出现对一个函数的频繁调用,而这个函数又是定义域有限且元素不多的,我们就可以把该函数存储到内存里,做成一个基本操作,这样就会对算法效率有质的影响。

    但基本操作少了也有它的好处,这样各种操作容易各司其职,功能互不交叉,要用操作a完成的功能b肯定不能替代,比如说变量值加1操作和goto语句。这样以来,要实现某个功能时就不需在各个可行的基本操作中进行孰优孰劣选择了。所以想用函数存储优化算法是很困难的,如果有一天计算机可以自己生成算法了,它是基本上不可能掌握上面所说的这种方法的,除非依赖人工智能。它可以轻松掌握的方法或许应该是下面这个:

    2 过程存储
    下文中将出现的“过程”不同于一般编程语言中“过程”的概念,它是指函数的一次特定调用,包括输入值和被调用函数。调用一个过程所返回的值即该输入值经该函数计算后的结果。在一次计算的某个时刻,访问任一个变量都相当于调用了一个过程,那是向前访问过去的计算结果,而调用函数是向后将数据或控制权传给未来的函数;反过来也成立,向过去只可能出现过程调用,而向未来只可能出现函数调用。

    数据结构对算法速度的影响是和电子计算机提供的两个基本操作相关的,就是内存的读/写。和他们相关的其实还有建立中间变量之类一切和存储/读取相关的操作。
    建立合适的数据结构,建立合适的中间变量都有可能大幅度提高算法效率,那它们的本质是什么呢?
    一个量的存储便意味着今后可随时以一个单位时间的运算速度调用计算出该量的过程,这样,如果一个过程在一次计算中出现多次,那么将其第一次运行所得结果存储从而替代后来的多次运算无疑是高效的,这正是变量存读问题的关键所在:将计算过的结果存储,之后免除了计算过程,我们暂且称之为过程存储。
    显然,过程存储是不同于函数存储的。后者是算法设计时就将函数“存储”了,它是运行中“存储”的;后者是通过增加基本操作来提高速度,而前者只是避免了重复计算,并未增加基本操作。
    过程存储和函数存储一样,也是适用于当算法中出现对一个函数的频繁调用,而这个函数又是定义域有限且元素不多的时候。当然,它的效率会稍低。

    过程存储还有另一个优美的描述,就是跨时间的信息传递。我们不妨把存储和读取的概念从视野中完全抹掉,一个量的存储只是将其传递给了未来的一个或多个函数,而读取只是接受了过去某个过程传来的输入。这样,过程的调用概念就更广了,成为了跨时间的概念。
    这样我们不难理解中间变量和数据结构对算法影响的实质了,前者充当了调用过去过程的桥梁,避免了同一过程的重复计算,而后者是前者更复杂的形式,而且与指针关系紧密,所以我们暂且只举例说明。
    例:
    某算法的输入中包含一字符串s,算法运行中将对s进行大量的查找工作。
    如果仅靠以上信息而且不考虑空间复杂度的话,我们知道散列表是存储s的最佳选择。
    S中出现的所有字符通过散列函数f映射到不同的内存地址,而内存中的数据则为相应各字母在字符串中的位置。这样要比不改变S的数据结构而每次查找都用遍历S的方法好的多。
    我们来分析它和过程存储的关系:建立散列表时,若在内存地址为A(值为f(K))的项中写入了一个数组,它存储了K出现在S中的所有位置。那么,这就相当于向未来的函数提供了这样一个过程的调用:
    遍历S,记录所有值等于K的元素在S中的位置并将其放入一个数组中,返回这个数组。
    当然,这个调用花费的时间是很短的,而远非遍历一遍S的时间。


    数据结构和过程存储的关系至此还是不甚清楚,再作进一步的分析。
    数据结构就是信息组织在计算机中的形式。这个概念其实也是很模糊的,什么是信息?什么是组织形式?为什么组织形式对算法速度影响如此之大?
    信息是可以用函数来表示的。比如,一个字符串可用一个以字符在其中的位置为自变量,字符为函数值的函数,即:
    f:位置-->字符
    信息即若干量的值之间的关系。但在实际中将其以某种形式表示出来时,往往只能表示出该关系的一个单向的形式,如上例中的字符串存入一个数组后,该数组就包含了字符串的全部信息,但它却只能提供一个单向的访问,即由位置得到字符,若要由字符得到其对应的地址,哦,sorry,本数组不提供该项服务,请自己您写代码遍历查找。遍历自然意味着低效。
    这是和计算机内存的先天不足有关的:它只能由地址找到对应内容,却不能由内容找到对应地址。
    为了提高算法速度,当然应尽量避免算法执行过程中出现这样的情况。比如,如果算法只需要由字符得到对应地址,就不能用 位置-->字符 的形式存储了,要换成 字符-->位置,这就是散列表了。如果需要,还可以构造 位置<-->字符 的形式,那样数据结构会更复杂。
    可见,信息的组织形式就是在内存中,信息所包含的各量之间的可访问关系。
    有一点是不能忽略的,那就是信息最初输入计算机的形式未必就是算法的最适结构,因此需先把这种结构转换成最适合算法的结构,这个转换正是过程存储的过程。


    3 计算冗余

    下面我们只考虑数值计算中的情况。
    且看这一段代码:

    a++
    a--

    恐怕天下没比这更弱智的代码了吧?可它确实是代表了一类的影响因素,也就是我们要称之为计算冗余的东西。
    看这个函数:

    f(x)=5x-3x

    我们可以马上写出两种计算它的算法,一个按部就班的算(算法a)而另一个直接算2x的值(算法b)。然而二者在运行时间上是有不小差异的,影响二者运行时间的因素,正是计算冗余。
    对算法a,如果用一个变量Y来存储结果的话,它是先被循环加x加5次,再被循环减x减3次,中间经过了先增大后减小的过程;而对算法b,却只是个增大的过程。它可以看成是a中增大x和减小x一对操作互相抵消的结果。
    显然,计算冗余是由一对效果相反的操作同时出现在算法中造成的不必要的计算。但是否算法只要出现了相反操作就意味着还可以化简呢?显然不是,比如这个函数:

    g(x,y)=1+x-y

    直接计算它的算法我们可以马上写出来,计算中必然会出现相反的操作,但是它已经是最简单的形式了,我们不可能靠抵消相反操作来化简它。
    这二者的区别其实在于:前者计算中的一对相反操作(增大x和减小x)所进行的次数(5次和3次)是不决定于输入变量的,是仅靠算法本身就能确定的,它是算法本身所具有的一个属性,故我们可以依据它来进行算法的化简;而对于后者,一对相反操作(加1和减1)的次数(y次和z次)是不决定于算法本身的,它随着输入变量不同的值而改变,因而是不可化简的。
    我们可作如下总结:
    一个算法中若出现了效果相反的操作且二者的次数都不是由输入变量决定的,那这个算法可以用抵消的方法化简。
    虽然是在数值计算的实例中推出来的,可这个思想并不只适用于数值计算,它应该是对任何数据类型都有效的。

    4 信息利用
    先看这个问题:
    折半查找的高效来自何处?
    显然这里不关过程存储的事,必然是其他因素的缘故。
    它的高效是因为利用了输入字串的有序。从信息的角度看,我们编写算法时并非对输入信息是一无所知的,它至少包含这一点,即:字串是有序的,且该序是由小到大(或反之)的。
    这就是编程者对信息的利用充分与否的问题了。设计程序前必然会掌握关于该程序的一系列信息,主要包括输入数据的相关信息和功能描述。功能描述决定了程序的功能(或者说它所实现的函数),而数据相关信息则是预先知道的程序输入(函数定义域)信息的特征的描述。
    类似的例子在实际应用中是很常见的,比如统计关键词被搜索的频率来调整算法,优先搜索频率高者。

    展开全文
  • 计算机硬件性能指标

    千次阅读 2019-09-25 19:36:29
    衡量计算机硬件性能的指标常有机器字长、存储器容量、运算速度、浮点运算能力等。 机器字长 我们经常听到32位CPU或者64位CPU。这里的32位或者64位指的就是机器字长,也成机器字长。机器字长是指计算机进行一次整数...
  • 计算机组成原理期末复习【超实用】

    万次阅读 多人点赞 2019-08-14 00:07:42
    计算机组成原理(第二版)唐朔飞 编著(课本有些地方还不错,可以下载电子版看看) ...1. 影响流水线性能的因素主要有哪几种?请简要加以说明。P348 结构相关:是当多条指令进入流水线后,硬件资源满足不了指令...
  • 计算机主要性能指标(二)

    千次阅读 2010-01-25 12:32:00
    对于不同的指令,计算机执行的速度快慢差异很大,一般取计算机每秒执行最基本的指令(一般指加法命令)的数目作为衡量计算机运算速度的性能指标,单位常用MIPS表示。但对于微机而言,一般用主频MF来衡量计算机的运算...
  • 运算方法与运算

    千次阅读 2020-05-26 10:04:10
    计算机组成:运算方法与运算
  • CPU性能的影响因素:主频和架构

    千次阅读 2017-06-07 08:32:53
    主频和架构对CPU性能的影响同样重要,不能够割裂这两个因素来评估CPU的性能。 主频很容易理解,类似于速度,对于同一种架构的CPU,当然是主频越高CPU的速度就越快。 但是,如果CPU的架构不一样,只看主频,基本上...
  • 计算机内存模型概念

    万次阅读 多人点赞 2017-10-27 14:38:39
    由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的...
  • 计算机性能指标

    千次阅读 热门讨论 2015-09-13 15:20:00
    计算机功能的强弱或性能的好坏,不是由某项指标决定的,而是由它的系统结构、指令系统、硬件组成、软件配置等多方面的因素综合决定的。...3.主频:主频f:是描述计算机运算速度最重要的一个指标。通常所说的计算机运算
  • 计算机并行计算考试重点总结

    千次阅读 2016-12-06 22:21:28
    **计算机体系结构由程序设计者看到的计算机系统的属性,抽象的概念性的结构和功能属性。 计算机组成:是计算机体系结构的逻辑实现。 计算机实现:是计算机组成的物理实现。 重点内容 计算机系统的层次结构 现代...
  • 数学算法对计算机编程的优化

    千次阅读 2019-02-27 10:47:45
    下面来探讨一下数学算法对计算机编程的优化过程,具体如下: 1、数学算法和计算机编程的关系 数学算法就是把数学的数字和几何两种数学逻辑关系进行合理的组合,形成一个全新的数字模型运行动作,同时进行数学算法...
  • 计算机发展极简入门

    千次阅读 2020-07-30 11:09:07
    计算机技术的进步几乎影响着社会的方方面面,硬件的进步使得程序员可以编写出各种各样优秀的应用软件。也许不久的将来虚拟现实、无人驾驶、无现金支付就会成为现实。 计算应用分类 计算机从用途上来讲主要分为三种:...
  • 【计组学习笔记】计算机系统概述

    千次阅读 2020-02-03 17:29:45
    目录 一、计算机硬件发展 计算机的迭代 常见的计算机语言处理程序 ...运算速度 专业术语 四、计算机软件的组成 一、计算机硬件发展 计算机的迭代 电子管计算机:使用机器语言,逻辑元件采用...
  • 计算机组成原理

    万次阅读 多人点赞 2019-06-02 14:13:55
    知识改变命运,储备成就未来。 计算机组成原理 1.第一台电子计算机何时何地诞生?英文全称? 1946年2月14日 美国宾夕法尼亚大学 ...ENIAC:电子数字积分...运算器、控制器、存储器、输入设备、输出设备。 思想...
  • 计算机基础】01计算机基础知识

    千次阅读 2020-04-01 22:31:33
    1.1 概述 1.1.1 计算机的发展史 1942年2月,美国宾夕法尼亚大学研制出世界上第一台电子多用途...体积大、运算速度低、存储容量小、可靠性差,采用机器语言或汇编语言编程,主要用于科学计算 2. 第二代计算机 ...
  • 计算机文化基础—计算机硬件系统

    千次阅读 2017-03-16 17:12:00
    第2章 计算机硬件系统 本章内容 信息工具——计算机 计算机的工作原理 微机系统及其主要指标 嵌入式计算机系统 计算机应用 2.1 信息工具——计算机 人类所使用的计算工具从简单到复杂、从低级到高级的...
  • Matlab并行运算

    千次阅读 2014-06-06 17:14:31
    、为了能够使用matlab提供的交互式工具,你需要首先打开matlabpool,这个组件可以运行在你的本地计算机上,也可以运行在多个远程计算机上      matlabpool open local 3 3 、在matlabpool上...
  • 计算机组成原理题库(唐朔飞)

    万次阅读 多人点赞 2019-04-13 16:51:32
    计算机组成原理题库 ...A、所用电子器件 B、运算速度 C、计算机结构 D、所用语言 ^^A ~~02|01|1|2|A0400047_010_2|872 ^^能够被计算机硬件直接识别的语言是( )。 A、符号语言 B、机器语言 C、汇编语言 D、机...
  • 生物计算机

    千次阅读 2016-09-30 20:11:31
    生物计算机也称仿生计算机...运算速度要比当今最新一代计算机快10万倍,它具有很强的抗电磁干扰能力,并能彻底消除电路间的干扰。能量消耗仅相当于普通计算机的十亿分之一,且具有巨大的存储能力。生物计算机具有生物体
  • 计算机体系结构.计算机发展历史

    千次阅读 2019-05-25 16:50:04
    计算机体系结构.计算机发展历史 两大定律与两种结构 既是要回顾计算机的发展,那必然绕不开著名的摩尔定律。当然摩尔定律想必已是闻名天下,但除此之外在体系结构领域内,还有一个定律叫Dennard Scaling,相对而言...
  • 基本知识点:计算机的发展,计算机组成,计算机硬件中各部件的功能,冯·诺依曼计算机的特点,计算机系统的层次结构,软件与硬件的逻辑等效性,计算机的各种性能指标及其含义。 重 点:计算机系统的层次结构,...
  • 一切生产工具都是人类器官功能的延伸,智力活动弥补体力劳动的不足:一切交通工具都是腿力的延伸;...计算机是一种可进行快速运算的可存储设备。存储的程序保证了运算的自动性,从而减轻脑力劳作。
  • 衡量一台计算机的性能是由多项技术指标综合确定的,既...机器的字长,也会影响机器的运算速度。倘若CPU字长较短,又要运算位数较多的数据,那么需要经过两次或多次的运算才能完成,这样势必影响整机的运行速度。 ...
  • 计算机组成原理(哈工大)学习笔记

    万次阅读 多人点赞 2020-07-08 08:10:46
    文章目录计算机组成原理一、计算机系统概论1.1计算机系统简介一、计算机的软硬件概念二、计算机系统的层次结构三、计算机体系结构和计算机组成1.2计算机的基本组成1.3计算机硬件的主要技术指标一、机器字长二、运算...
  • 定点运算,浮点运算,算术逻辑单元

    千次阅读 多人点赞 2018-12-16 04:31:22
    定点运算 (一)移位运算 1、移位运算的数学意义 先举一个例子:15m = 1500 ...但是这样的说法在计算机中并不合适,在计算机中,小数点是以约定的方式给出的,在计算机中没有任何硬件用于表示小数点,所以在计算...
  • 计算机网络》谢希仁第七版课后答案完整版

    万次阅读 多人点赞 2020-07-07 15:16:35
    计算机网络》谢希仁第七版课后答案完整版
  • 计算机系统中所存在的瓶颈

    千次阅读 2012-01-05 21:54:09
    。。大家都知道CPU是计算机的...影响计算机速度因素是很多的,几乎组成计算机的每个环节都在影响计算机速度! 。。 如果一台计算机的配置不合理就会产生“瓶颈”影响整个系统的速度。这就是著名的“木桶效应”
  • 一、计算机系统结构的概念1.1 计算机系统的层次结构划分为多级层次结构的优点: (1)便于理解计算机的整体工作概念及目前软硬件的作用和地位; (2)便于认识语言的实质和实现方法; (3)便于搜索虚拟机的新的实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,913
精华内容 12,365
关键字:

影响计算机运算速度的因素