摘要:
倍增就是字面意思,成倍的增长,如果状态空间很大,通常的线性递推无法满足要求时,那么我们可以采用成倍增长的方式,只递推状态空间中在2的整数次幂位置上的值作为代表。而其他位置的值我们可以通过“任意整数可以表示成若干个2的次幂项的和”这一性质,使用之前求出的代表值拼成所需的值。所以使用倍增算法也要求我们问 阅读全文
摘要:
在程序设计中经常会用到很多下列的排序算法,这里将他们分成三类: 1. 选择排序、插入排序、冒泡排序 2. 堆排序、归并排序、快速排序 3. 计数排序、基数排序、桶排序 还有很多排序算法,可以参考算法导论中的章节。 1. 离散化 排序算法的第一个应用就是离散化。通俗的讲,“离散化”就是把无穷大的集合中 阅读全文
摘要:
二分法是一种随处可见却非常精妙的算法,经常能为我们打开解答问题的突破口。二分的基础的用法是在单调序列或单调函数中进行查找。因此当问题的答案具有单调性时,就可以通过二分把求解转化为判定(根据复杂度理论,判定的难度小于求解),这使得二分的运用范围变得广泛。进一步地,我们还可以扩展到通过三分发去解决单峰函 阅读全文
摘要:
1. 前缀和 1. 一维数组前缀和 对于一个给定的序列A,它的前缀和数列S是通过递推能够求出的基本信息之一: $S[i] = \sum_{x=1}^i A[x]$ 一个部分和,即数列A某个下标区间内的数的和,可表示为前缀和相减的形式: $sum(l,r) = \sum_{x=l}^r A[x] = 阅读全文
摘要:
1. 递推与递归的宏观描述 对于一个待求解的问题,我们由已知的某个小问题进而一步一步推向该问题的方法称为递推 递归正好与递推的方向相反,它是由大问题逐步分解为小问题,然后回溯到大问题进行解决的方法。 2. 递推与递归的简单应用 枚举形式 状态空间规模 一般遍历方式 多项式 nk,k为常数 循环、递推 阅读全文
摘要:
1. 补码 由于CPU在进行设计的时候只进行了加法器的设计,所以在它只会处理加法操作,那么问题来了如何进行减法操作呢?例如:A-B,我们可以将其看作是A+(-B)的形式。这样在计算机内部就会出现负数的形式,所以就引入了补码的概念,补码就是对数字进行按位取反再加一的操作,补码在计算机中进行储存负数。 阅读全文