Introduction to Algorithm(chapter 3 and 4)

来源:互联网 发布:pa数据 编辑:程序博客网 时间:2024/05/16 09:30

    第三章主要介绍了三种记号,即上下确界、上确界和下确界,这三种记号的主要目的就是隐藏一些不必要的细节(即一些常数因子和低阶项)而让我关注于主要部分(即高阶项),通过这样的处理,可以提供给我们一种标准的方式来进行纵向的对比,这样复杂度分析也就被简化了。

     第四章主要介绍了递归方法的几种求取方法:代换法、递归树和主方法。首先谈谈递归,递归就是将一个大问题不断分解成性质相似的小问题通过这种从大到小的划分进而求解出大问题,而迭代主要是从小问题着手,通过不断解决小问题进入逐渐逼近到大问题的解,递归和迭代相似于对一棵树的自上而下访问和自下而上访问一样,而迭代更具体地应用在动态规划中,动态规划和递归的对比更直接。

    代换法类似于数学归纳法,而递归树主要是通过对每层节点的开销分析总结出所有层的开销为代换法提供一种渐进时间的猜测。主方法主要是记住三种情况,注意这里是要多项式地对比。

 

对于课后习题,主要有4-2的思考题,先谈谈异或这个操作吧,异或是个比较有趣的操作,两个二进制位异或相同则为0,不同则为1,即1^0=1,0^0=0,而且x^0=x,x^x=0,而且异或满足交换律和结合律,由于异或满足的这两个律因此一个数对另一个数的两次异得到的结果将仍是这个数例如:y^x^y = x^y^y=x^(y^y)=x^0=x。这样针对这个问题:

有一个含有n个元素的序列,里面的数据是1~n,不重复的随机排列着,如果去掉里面的一个元素成为n-1的序列,请找出去掉的那个元素。不借助辅助空间

.将1~n所有数的异或结果记为T(n),而A中所有数的异或结果记为T(n-1),缺的那个数记为k那么 T(n)=T(n-1)^k,左右两边同时异或T(n-1)得到T(n-1)^T(n)=T(n-1)^T(n)^k=k,即k=T(N)^T(N-1);或者从另一个角度来理解A所有所有的数都在1~n中出现一次,那么将A和1~n中的数放在一起那么必然A中所有的数都出现两次而仅k出现一次,那么将这些数异或得到:(1^2^3....^n)^(A[0]^A[1]^A[2]...A[n]) = k,即找出缺的那个数(因为x^x=0),这个问题也可以将1~n加起来减去A中所有元素之和得到k。问题的核心在于1~n的和是一个不变量,而且异或结果也是不变量,思想在于找到某些不变量,从这些不变量来寻找变量,这是切入点。
原创粉丝点击