变治法是指这样一组设计方法:它们都基于变换的思想。
这些方法都分为 两个阶段 , 变,把问题的实例变得更容易求解 ,治,在变的基础上对问题求解。
3种变换方式:
1)将问题变为一个更简单或方便的实例--- 实例化简 (如预排序,高斯消去法)
2)变换同样的实例为不同的表现--- 改变表现 (AVL树,多路查找树)
3)变换为另一个问题(这种问题的算法是已知的)的实例--- 问题化简 (堆排序,其他等等,转化)
--------------------------------------------------------------------------------------------------------------------------------------------------
预排序可以作为一种其他算法的预处理技术,比较简单,主要是要有这种意识。高斯消去法是解线性方程组的算法,感觉主要是数学的东西,麻烦,只简单的介绍下,不实现。AVL树,多路查找树都是改变表现的变治策略,这都是数据结构里最难最麻烦的结构,以前也没实现过,就看了下理论,这里打算有时间写一下,算是自虐下。堆排序是一种问题变化的变治策略,前面写过。
---------------------------------------------------------------------------------------------------------------------------------------------------
1,预排序
准确的说,它不是一种算法设计策略,它是一种意识(你在设计算法时要有这种意识),往往在算法中作预处理,是一种将实例化简的变治策略。
1)检验数组元素的唯一性
若用蛮力,两遍扫描,一个个元素检查,复复杂度为n^2.
将数组排序后相同的元素就会挨着,扫描一遍即可检验元素唯一性,复杂度为n * log(n)。easy!
2)模式计算
模式是指一个序列中出现次数最多的一个数值。
若用蛮力,逐个检查出现次数,两遍扫描,复杂度为n^2.
预排序将相同的元素挨着,一遍扫描就可知道出现最多的元素,easy。
这些方法都分为 两个阶段 , 变,把问题的实例变得更容易求解 ,治,在变的基础上对问题求解。
3种变换方式:
1)将问题变为一个更简单或方便的实例--- 实例化简 (如预排序,高斯消去法)
2)变换同样的实例为不同的表现--- 改变表现 (AVL树,多路查找树)
3)变换为另一个问题(这种问题的算法是已知的)的实例--- 问题化简 (堆排序,其他等等,转化)

--------------------------------------------------------------------------------------------------------------------------------------------------
预排序可以作为一种其他算法的预处理技术,比较简单,主要是要有这种意识。高斯消去法是解线性方程组的算法,感觉主要是数学的东西,麻烦,只简单的介绍下,不实现。AVL树,多路查找树都是改变表现的变治策略,这都是数据结构里最难最麻烦的结构,以前也没实现过,就看了下理论,这里打算有时间写一下,算是自虐下。堆排序是一种问题变化的变治策略,前面写过。
---------------------------------------------------------------------------------------------------------------------------------------------------
1,预排序
准确的说,它不是一种算法设计策略,它是一种意识(你在设计算法时要有这种意识),往往在算法中作预处理,是一种将实例化简的变治策略。
1)检验数组元素的唯一性
若用蛮力,两遍扫描,一个个元素检查,复复杂度为n^2.
将数组排序后相同的元素就会挨着,扫描一遍即可检验元素唯一性,复杂度为n * log(n)。easy!
2)模式计算
模式是指一个序列中出现次数最多的一个数值。
若用蛮力,逐个检查出现次数,两遍扫描,复杂度为n^2.
预排序将相同的元素挨着,一遍扫描就可知道出现最多的元素,easy。