PART VIII 总结 Chapter 17 计算的限制

Chapter 17 计算的限制

17.1 硬件

硬件给计算的限制有:
    ·   数字是无限的,而计算机的数字表示确实有限的
    ·   硬件,是由易坏的机械部件和电子部件构成
    ·   在把数据从一个内部设备传递给另一个内部设备,
        或者从一台计算机传递给另一个计算机会发生问题

A.  算术运算的限制

    计算机的硬件决定了它能表示的数字(整数和实数)的限制 -- 溢出问题
    不过软件方法可以解决这种限制 -- 存储连接表示

    C3 -- 实数被存储为整数加说明小数点位置的信息
    精度(precision):  最多可以表示的有效位数
    有效位(significant digits):    从左边的第一个非零数位开始,到
                                右边的最后一个非零数位(或纯粹的零)结束的数字
    表示(舍入)误差(representational (round-off) error):
            由于算术运算结果的精度大于机器的精度造成的算术误差
    下溢(underflow):  当计算的结果太小以至于给定的计算机不能表示时发生的情况
    溢出(overflow ):  当计算的结果太大以至于给定的计算机不能表示时发生的情况
   *化零误差(cancellation error):   由于精度限制,当相加或相减的两个数的量级
                        相差太大时候发生的精确度损失

B.  部件的限制
    硬件故障确实会发生,解决方法是进行防御性维护
        -- 定期检测硬件的问题,替换损坏的零件
        -- 保证放置计算机的物理环境合适
        -- 前提是计算机硬件在设计和制造阶段都经过了全面的测试

C.  通信的限制

    保证数据流不被破坏的方法:

        ·   校验位

            校验位用于检测存储和读取或发送和接受一个字节的过程中发生的错误
            校验位是在使用这种模式的硬件中的每个字节附加了一个位。这个位用于
            确保9位数值(一个字节加一个校验位)中的1的个数是奇数(偶数)

        ·   校验数位

            求一个字节中的每个数位的和,然后把和的个位与字节中的数存储在一起

            *要检测的错误越重要,检测算法就越复杂

        ·   误差校正码

            可以推导出错的数位是什么
            -- 极端的冗余是对每个存储值都保留两个独立的副本,尽管可能都错
            -- 误差校正码主要用于硬盘驱动器或CD,CD表面的不完整性会破坏数据

17.2 软件

A.  软件的复杂度

    随着机器的功能越来越强大,计算机能够解决的问题也越来越复杂。
    以前一个问题由一个程序员解决,现在成一组程序员解决
    Bug不能被确定是否完全消除,合适停止测试 -- 构成风险问题

B.  当前提高软件质量的方法

    1.  软件工程

        软件需求(software requirement): 说明计算机系统或软件产品提供的功能的语句
        软件规约(software specification):   软件产品的功能、输入、处理、输出和特性的详细说明。
                                            它提供了设计和实现软件所必需的信息

        软件生命周期:
            ·   需求分析
            ·   制定规约
            ·   设计(高层和底层)
            ·   实现
            ·   维护
        所以阶段都执行验证操作 :
            需求是否准确反映需要的功能?
            规约是否精准反映了满足需求所需的功能?
            高层设计是否精准反映规约中的功能?
            设计中的每个后继层是否精准实现上一层的功能?
            代码实现是否与设计相符?
            维护阶段实现的改变是否精准反映了想要的改变?
            这些改变的实现是否正确

        大型软件产品是有程序员组制作的。使用两种有效的验证方法 -- 走查和审查(C6)

    2.  正式验证

            开发验证技术来验证软件的正确性
           *程序的正确性验证独立于数据测试

    3.  开源运动

17.3 问题

A.  算法比较

    大O分析:
    大O符号(Big-O notation): 以函数中随着问题的大小增长得最快的项来表示计算时间(复杂度)的符号
    O(1):有界时间,即工作量是个常数,不受问题大小影响
    多项式时间算法(polynomial-time algorithms):    复杂度能用问题大小的多项式表示的算法
        -- (C2) 多项式是两个或多个代数项的和,每个代数项是一个常量乘一个或多个变量的非负整数次幂
    P类(class P):    由所有多项式时间算法构成的类

B.  图灵机

    Church-Turing 理论 : 任何能直观计算的问题都能被图灵机计算
    该理论的结论: 如果证明了一个问题的图灵机解决方案不存在,那么这个问题就是不可解决的

C.  停机问题

    停机问题(halting problem):  确定对于指定的输入一个程序最终是否能停止的问题,是不可解决的
    证明是 "没有图灵机程序可以确定一个程序是否在指定的输入下会停止"

D.  算法分类

    算法分为三类:
        P | NP类算法
        指数算法/阶乘算法  称为难处理的算法
        不可解决的算法

        P类问题(class P problems): 用一个处理器能在多项式时间内解决的问题
        NP类问题(class NP problems):   用足够多的处理器能在多项式时间内解决的问题
        NP完全问题(NP-complete problems):   NP类问题的自己,如果发现了其中任何一个问题的
                      单处理器多项式时间的解决方案,那么其他所有问题都存在这样的解决方案

        P类问题显然是NP类问题,但是只有用多个处理器才能解决的NP问题是否是P类问题,即这些问题
        是否具有多项式算法,而我们还没有发现/发明

你可能感兴趣的:(计算机)