摘要:线段树成段更新之延迟更新成段更新的重点是延迟更新,以区间[1,3]为例说明。注意,此例中“更新”为修改元素的值为a,“查询”为求区间中所有元素之和。建立二叉树如图示:每一个圆圈代表一个结点,圆内数字分别为结点标号和所对应区间,[i]表示只含一个数,只出现在叶节点中。当 要更新区间[1,2]中所有元素时,对应上图即要更新结点4,5。一种方法是依次访问结点4和5并更新,但这样时间和空间开销都较大,当要修改的区间的长 度较长时尤甚。于是可以采取“延迟更新”,即将更新信息储存在这段区间对应的结点处,此例中[1,2]对应的区间是结点2,给结点一个属性tag用以 记录这个更新信息a,原来tag初始化为0,
阅读全文
摘要:汉诺塔问题家传户晓,其问题背景不做详述,此处重点讲解在有3根柱子的情况下,汉诺塔问题求解的通项公式的推导。问题背景:有A,B和C三根柱子,开始时n个大小互异的圆盘从小到大叠放在A柱上,现要将所有圆盘从A移到C,在移动过程中始终保持小盘在大盘之上。求移动盘子次数的最小值。变量设置:n为圆盘个数,H(k)为n=k时移动盘子次数的最小值。递推公式: H(k)=2H(k-1)+1。通项公式:H(k)=2^k-1。证明:(1)证明递推公式:首先被移动到C盘的必定是最大的盘子,否则必定违反“在移动过程中始终保持小盘在大盘之上”的规定。既然要将最大盘移动到C,此时最大盘之上必定没有任何盘子,亦即它独自在一根
阅读全文
摘要:问题描述: 有N件物品和一个载重量为C的背包。第i件物品的重量是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。问题特点: 每种物品仅有一件,可以选择放或不放。(0:不放 1:放)基本思路: 用p[i][j]表示前i件物品放入一个容量为j的背包中可以获得的最大价值。得到如下关系: 1.p[i][0] = p[0][j] = 0 ··········· (1) 2.p[i][j] = p[i - 1][j] (当j < w[i]
阅读全文