《软件可靠性方法》笔记(一)---第二章 预备知识

  时间:2016.11.12; 地点:南京江宁实验室; 状态:迷茫的研一;

  为什么会读到这本书?导师推荐的。可以说第一开始听到这本书名时完全是一脸蒙蔽,就像选本科毕设题目时是一样的。。。就是在上半年当老师告诉我他是做形式化的,我一度以为我特么的难道联系到自动化学院了?我可是一门心思向计算机的。后来直到暑假在家闲的发慌翻翻本科时候的软件课本书时,居然看到了一章讲形式化的。。。蜜汁尴尬,毕竟当年这门课最后我得了优。咳咳,扯远了。这本书还是蛮适合刚接触形式化的人看的,但是得有一定的数学功底(所以说我一开始完全看不懂)。

  写这系列博客的目的,第一遍读完这本书后感觉还是有很多知识点没吃透,而且老师一再提到这本书的重要性,所以现在打算利用一周的时间再次回顾下这本书。老师例会时曾经要求我能脱离书去讲看到了什么,所以利用这系列博文让自己对这本书也是对形式化有一个基本的认识以便后期看相关的论文。

  这本书的第一章没什么好说的,就是介绍形式化方法,自己看看就可以了。第二章离散、数据结构的知识考研的时候都看过了,所以略讲。重点是第三章,这是整本书的基础。

第二章 预备知识

  本章中的集合表示法(离散数学)、图(数据结构)、字符串(编译原理)的知识,都是本科时候学过的,包括计算复杂性在算法设计中也学过。所以基本就是复习以前的知识。这里我想介绍的只有可计算性和计算复杂性。

1.可计算性

  我们如何知道一个问题是可以计算的?所有的问题都可以计算吗?存不存在通用的计算模型?这些都是理论计算机科学中的问题。在理论计算科学中利用一种只有四条语句的程序语言将其与可计算等价。如此可计算问题就可以等价为能否用这种语言写出来。理论计算机科学已经证明了可计算的问题的规模是等价于自然数集,可是全部的问题是实数集的,这就意味着存在不可以被计算机计算的问题。图灵提出的Turing机,可以与上面提到的程序等价,也就说明图灵机是解决所有的可计算问题的通用机。

  本章介绍了图灵机,但是在后面完全没用到啊,它只是问了后面的计算复杂度做引子,所以可以简单看下,如果想深入学习可以看《可计算性与计算复杂性导引》这本书。

2.计算复杂度

  算法:求解一个问题需要遵循的、被清楚指定的简单指令集合。

  算法的复杂度:估计一个算法所需要消耗的时间或者空间的度量标准。

  算法的复杂性包括:时间复杂度和空间复杂度,确定或不确定的执行模型。利用图灵机可以讲时间复杂度等价为图灵机的执行步数(图灵机每次执行只消耗一个时间单位)。而空间复杂度则是图灵机纸条的长度。

  复杂度中的定义:

  ① O(f(N))如果存在两个正常数c,c0使得当 N>=c 时有T( n ) <= O(f(N))

  ②Ω(f(N))  如果存在两个正常数c,c0使得当 N>=c 时有T(n)<= Ω(f(N))

  ③theta(f(N))  T(N) = theta(f(N)) 当且仅当T(N) = O(f(N))  和 T(n)= Ω(f(N))

  ④o(f(N)) T( n ) 的增长率小于 o(f(N))

  

   其中O(f(N))表示最坏情况下的复杂度,注意O(f(N))不确定,例如N^2 = O(N^2) 而N^2 = O(N^3)也是正确的。因为O这是定义了T(n)的复杂度小于O(f(n));在复杂度中,最重要的是最高阶指数形式,并且一般舍去系数。

  

  主要的复杂度类:

  log --- 复杂度为O(logn)的问题

  polylog----复杂度为O(P(logn))的问题

  线性---复杂度为O(n)的问题

  多项式---复杂度为O(P(n))的问题

  指数---复杂度为O(2^P(n))的问题

  二重指数-----复杂度为O(2^2^P(n))的问题

 

  确定性与非确定性:确定性复杂度是指执行模型中每个状态只有一个后继选择。而非确定的模型运行在继续执行的路径中作出非确定选择,就是说在一个状态上可以有多个后继路径选择。

  好了接下来就是比较重要(好用来装逼)的定义了,考虑了上述三种元素的复杂度类:

  ①NL 非确定对数空间,很高效的算法;

  ②P 确定多项式时间,这是一种高效的算法,特别是多项式次数较低时;

  ③NP 非确定多项式时间,这类问题存在的问题是当将非确定转换为确定的时候会引起时间上的指数级爆炸,但是很多这类问题可以使用启发式的解决方法,其中机器学习中的很多技术就是解决NP问题的;

  ④PSPACE 多项式空间;

  ⑤EXPTIME 确定性指数时间,只能用到小规模问题上;

  ⑥NONELEMENTARY 这一类的问题被认为非常非常之难解。但是这还是可计算的问题,在可计算理论中存在不可解的问题。

  

  

时间: 2024-08-02 11:01:30

《软件可靠性方法》笔记(一)---第二章 预备知识的相关文章

(连载)边喝咖啡边学Unity——第二章 预备知识体系

第二章 预备知识体系 --本章涉及空间数学.解析几何.线性代数.计算机图形学.算法.数据结构等众多基础学科.同上一章相比,虽然枯燥,但是绝不能称为废话之章,即使粗略的看一遍,也比直接跳过来的好,详细地读完,会让读者以后的开发之路走的更加平坦. 并且本章的知识不仅仅对您的Unity游戏开发有帮助,对于大部分软件开发人员都是大有作用的. 作为传统3D游戏编程来讲,需要运用到的知识面非常之广,涉及到的学科特别之多.而通常讲编程的书籍,会弱化数学知识,讲数学的书籍,会弱化编程方面的知识.这就是我在第一章

C++ primer plus读书笔记——第1章 预备知识

第1章 预备知识 1. Ritchie希望有一种语言能将低级语言的效率.硬件访问能力和高级语言的通用性.可移植性融合在一起,于是他在旧语言的基础上开发了C语言. 2. 在C++获得一定程度的成功后,Stroustrup才添加了模版,这使得进行泛型编程成为可能. 3. Linux中要支持C++11,编译源文件时要使用-std = c++0x选项: g++ -std = c++0x use_auto.cpp 4. 程序执行完毕后,有些IDE自动关闭窗口,而有些IDE不关闭.为查看输出,可以在程序的最

《C++ Primer Plus》学习笔记 第1章 预备知识

第一章 预备知识C++在C语言的基础上添加了对"面向对象编程"的支持和对"泛型编程"的支持.类 —— 面向对象模板 —— 泛型编程1.1 C++简介1.2 C++简史1.3 可移植性和标准1.4 程序创建的技巧http://www.cnblogs.com/moonlightpoet/p/5611668.html1.5 总结

(连载)边喝咖啡边学Unity——第二章 预备知识体系(2)

什么是矩阵? mn个数排成m行n列形成的矩形表称作一个mxn矩阵. 行向量与列向量 由于向量我们可以看做是一种特殊的矩阵,即只有一行或者只有一列的特殊矩阵.因此我们把只有一行的向量称为行向量,只有一列的向量称为列向量. 注意我们的程序在存储矩阵的时候其实是将mn个数存放在一个线性表中,因此获取一个矩阵中的第几行第几列的元素有一个优先原则.这里特别提出,Unity在Matrix4x4这个类的手册中有这样一句话: Matrices in unity are column major. Data is

学习笔记:第二章——物理层

学习笔记:第二章--物理层 (物理层只看懂了一部分,将就着把自己懂的一点随便写写,不懂的那部分以后看懂了再做补充) 2.1  物理层的基本概念: 首先强调:物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输比特流的,而不是具体的的传输媒体. 物理层也有自己的协议称为物理规程: 可以将物理层主要的任务描述为确定与传输媒体的接口有关的一些特性, 即: 1)机械特性:    2)电气特性:   3)功能特性:   4)过程特性. 2.2  数据通信的基础知识: 数据通信的模型: 源点:源点设备产生

Stealth视频教程学习笔记(第二章)

Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提炼出其中的知识点和思路思想. 视频地址在(http://www.youku.com/playlist_show/id_23389553.html),是一个Stealth的专辑,这里只放上本章第一个视频,其它的大家在上面的链接中慢慢看吧. 第二章有一个视频是FLV格式的,我没法把字幕嵌入其中,所以优酷

APUE学习笔记:第二章 UNIX标准化及实现

2.2UNIX标准化 2.2.1 ISO C 国际标准化组织(International Organization for Standardization,ISO) 国际电子技术委员会(International Electrotechnical Commission,IEC) ISO C标准的意图是提供C程序的可移植性,使其能适合于大量不同的操作系统,而不只是UNIX系统.此标准不仅定义了C程序设计语言的语法和语义,还定义了其标准库.因为所有现今的UNIX系统都提供C标准中定义的库例程,所以该

最大熵学习笔记(一)预备知识

  生活中我们经常听到人们说"不要把鸡蛋放到一个篮子里",这样可以降低风险.深究一下,这是为什么呢?其实,这里边包含了所谓的最大熵原理(The Maximum Entropy Principle).本文为一则读书笔记,将对最大熵原理以及由此导出的最大熵模型进行介绍,重点给出其中所涉及数学公式的理解和详细推导. 相关链接 最大熵学习笔记(零)目录和引言 最大熵学习笔记(一)预备知识 最大熵学习笔记(二)最大熵原理 最大熵学习笔记(三)最大熵模型 最大熵学习笔记(四)模型求解 最大熵学习笔

2014年软考程序员-常考知识点复习笔记【第二章】

51CTO学院,在软考备考季特别整理了"2014年软考程序员-常考知识点复习笔记[汇总篇]",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年软考程序员-常考知识点复习笔记[汇总篇]  二叉树三种遍历的非递归算法(背诵版) 1.先序遍历非递归算法 #define maxsize 100 typedef struct { Bitree Elem[maxsize]; int top; }SqStack; void PreOrderU