基础算法:(1)分治法第二课

来源:互联网 发布:猴年百事可乐知乎 编辑:程序博客网 时间:2024/06/04 01:05

大二课程真的多,隔了好久才能多学点基础算法

接上篇,整理分治法思想的一些应用

ACM程序设计竞赛基础教程

勤能补拙的博客(主要参考)


快速排序

归并排序是按照元素在数组里的位置来对它们进行划分的,而快速排序是按照元素的值对它们进行划分。



递推关系式:



根据主定理得知,时间复杂度和归并排序一样。

1)其关键在于寻找分裂位置!!!!(2个指针左右扫描,交换。注意这种方法

2)学会快排采用的分区这种思想。

快速排序是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。

但是快排只能对连续内存的数据进行排序,像链表这样的结构是无法排序的。

基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定

有趣的分析算法(51CTO啊哈磊)

http://developer.51cto.com/art/201403/430986.htm

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


折半查找



对有序数组采用折半查找:递归和非递归实现都比较简单。

分治的递推式:



根据主定理,它的复杂度是logn。

实际上分治算法一般是分成了几个子规模就对这几个子规模处理然后合并结果,然而折半查找分成了2个子规模,每次却总能排除一个子规模,只对一个子规模进行处理,准确的说,它是一种减治策略。或者说可以把它看做是分治算法的退化。


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


0 0
原创粉丝点击