算法设计与分析-变治法

变治法是一种基于变换思想的设计方法,包括实例化简、改变表现和问题化简三个阶段。常见的应用如预排序用于减少复杂度,高斯消去法解决线性方程组,以及平衡查找树和堆排序等。预排序在模式计算、查找等问题中展现出优势,而高斯消去法则涉及线性代数。平衡查找树如AVL树和红黑树通过旋转保持平衡。堆可用于优先队列和堆排序。霍纳法则则通过改变多项式的表现形式提高计算效率。问题化简如将线性规划转化为约束问题,或利用图理论解决复杂问题。
摘要由CSDN通过智能技术生成
变治法是指这样一组设计方法:它们都基于变换的思想。

这些方法都分为 两个阶段 变,把问题的实例变得更容易求解 ,治,在变的基础上对问题求解。


3种变换方式:

1)将问题变为一个更简单或方便的实例--- 实例化简 (如预排序,高斯消去法)

2)变换同样的实例为不同的表现--- 改变表现 (AVL树,多路查找树)

3)变换为另一个问题(这种问题的算法是已知的)的实例--- 问题化简 (堆排序,其他等等,转化)



--------------------------------------------------------------------------------------------------------------------------------------------------


预排序可以作为一种其他算法的预处理技术,比较简单,主要是要有这种意识。高斯消去法是解线性方程组的算法,感觉主要是数学的东西,麻烦,只简单的介绍下,不实现。AVL树,多路查找树都是改变表现的变治策略,这都是数据结构里最难最麻烦的结构,以前也没实现过,就看了下理论,这里打算有时间写一下,算是自虐下。堆排序是一种问题变化的变治策略,前面写过。


---------------------------------------------------------------------------------------------------------------------------------------------------


1,预排序


准确的说,它不是一种算法设计策略,它是一种意识(你在设计算法时要有这种意识),往往在算法中作预处理,是一种将实例化简的变治策略。


1)检验数组元素的唯一性

若用蛮力,两遍扫描,一个个元素检查,复复杂度为n^2.

将数组排序后相同的元素就会挨着,扫描一遍即可检验元素唯一性,复杂度为n * log(n)。easy!



2)模式计算

模式是指一个序列中出现次数最多的一个数值。

若用蛮力,逐个检查出现次数,两遍扫描,复杂度为n^2.

预排序将相同的元素挨着,一遍扫描就可知道出现最多的元素,easy。
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值