昨天主要学了离线分治算法这一节。
在数据结构问题中,执行各项操作的顺序是要点,我们称之为时间轴。
根据“查询”响应时间的不同,我们又分为“在线”和“离线”两类,
另外书上还分了静态问题和动态问题。
然后看了第一类分治算法又称“CDQ分治算法”-------把动态问题划分为若干个静态子问题,并使用离线算法进行使用。天使玩偶这道题就是这种,都把知识点和例题看了一遍,也没拓展。
CDQ分治算法简化问题的关键在于:能够对操作序列按照“时间”分治,让转化后的静态问题不再考虑“修改”和“查询”的时间顺序。从而降低了需要控制的限制条件的维度。
还有第二类的“基于值域的整体分治算法”,这类算法是基于值域对整个操作序列进行分治,是操作序列在保持时间顺序的基础上能够同值域一起划分为独立的子问题。
然后出现了课本上的例题,可以采用树状数组,又给出了第K小数可以采用快排,也可以二分答案。所以书上最后为了避免冗余计算综合采用了分治,即对值域进行二分的同时,对整个操作序列进行分治计算。
我天我感觉这是最难的啦,将以前所有学过的知识都搬出来依次看看他们的复杂度,看它们哪里有可以减去不必要的部分,然后综合他们的优势去避免了冗余计算再结合成新的解决办法。
我知道,这种想法才是最应该锻炼的,一道题可以有多重解法,但它们的复杂度肯定不一样,我们为了不超时,就要把很多做法综合比较亦或采集众解法的优势来做。
而做到这一切的首要条件是所有的基本算法蓝皮上提到过的都要十分熟练,我就是一知半解,昏昏呼呼,额。这样综合起来才能十分熟练。
另外,以前不太明白递归的具体过程,昨天又仔细弄明白了递归的一类。