1 / 14
文档名称:

算法分析与设计常见算法思想.docx

格式:docx   大小:601KB   页数:14页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

算法分析与设计常见算法思想.docx

上传人:w447750 2018/10/2 文件大小:601 KB

下载得到文件列表

算法分析与设计常见算法思想.docx

文档介绍

文档介绍:算法导论复习——常见算法思想
PPT2-1:
堆排序(选择类排序,不稳定)
(1)初始化操作:将R[1..n]构造为初始堆;
(2)每一趟排序的基本操作:将当前无序区的堆顶记录R[1]和该区间的最后一个记录交换,然后将新的无序区调整为堆(亦称重建堆)。
时间复杂度是:O(nlgn)
归并排序
归并排序采用分治法思想的稳定的排序。算法思想是先使每个子序列有序,再使子序列段间有序。
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾,将另一序列剩下的所有元素直接复制到合并序列尾。
时间复杂度是:O(nlgn)
快速排序(交换类排序,不稳定)
(1)通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据
都比另外一部分的所有数据都要小;
(2)然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
时间复杂度是:O(nlgn)。
分治法实现大数相乘
将a,b写成前一半数字和后一半数字相加的形式,例如若a = 5423678,那么a1 = 542,a0 = 3678(注意若不是偶数截取较小一半)  
这样a和b相乘就可以写为:a * b = {  a1 * 10^(n1/2)   +  a0  }   *  {  b1 * 10^(n2/2)  +  b0 }  
展开后整理得:
 a  *  b  =  a1*b1 * 10^[ (n1+n2)/2 ]   +  a1*b0 * 10^(n1/2)   +   a0*b1 * 10^(n2/2)  + a0*b0  四项  
这样就很容易递归的来求a * b,如果你嫌分解后的数还太大,就可以继续分解。(你可以自己规定在何时结束递归)
时间复杂度是:O(nlgn)
参考资料见:
http://wenku./link?url=kkSSG6aAlxeI7qlflvPWBrWPbpAeNtoohJvwk9ARQ3TwTkIx3_Fiwlt-5HLhrNUxg1C-LiINr2CHiN1mgsidH3gX5rsY6Nuu
分治法求最近点对
步骤一:找一条中垂线m(坐位S集合x坐标的中位数)把n个元素分成左右两部分元素,步骤二:递归查找两边点集的的最短距离d1,d2,然后取两者中的最小者记为d;
步骤三:在中线两边分别取d的距离,记录该距离范围内点的个数,中线左边有L个元素,右边有R个元素,分别将两边的点按y坐标升序排列,在左边集合中每一个点,找右边集合的点,找到与之距离小于d的点,更新最短距离,直到循环结束,即可求出最短距离。
时间复杂度是:O(nlgn)
格雷厄姆Graham扫描法求凸包
基本思想:通过设置一个关于候选点的堆栈s来解决凸包问题。
操作:输入集合Q中的每一个点都被压入栈一次,非CH(Q)(表示Q的凸包)中的顶点的点最终将被弹出堆栈,当算法终止时,堆栈S中仅包含CH(Q)中的顶点,其顺序为个各顶点在边界上出现的逆时针方向排列的顺序。
具体步骤如下:
(1)设P0 是Q 中Y 坐标最小的点,如果有多个这样的点则取最左边的点作为P0;
(2)设<P1,P2,……,Pm>是Q 中剩余的点,对其按逆时针方向相对P0 的极角进行排序,如果有数个点有相同的极角,则去掉其余的点,只留下一个与P0 距离最远的那个点;
(3)PUSH(p0 , S)
(4)PUSH(p1 , S)
(6)PUSH(p3 , S)
(7)for i ← 3 to m
{
while 由点NEXT-TOP-TOP(S),TOP(S)和Pi 所形成的角形成一次非左转
do POP(S)
PUSH(pi , S)
}
(8)return S
时间复杂度是:O(nlgn)
注:Jarvis步进法更加容易理解,见算法导论中文版P609。

D&C for 2D maxima Finding Problem
(1)如果点集S只包含一个点,这直接输出该点。否则找一条中垂线m(坐位S集合x坐
标的中位数)把n个元素分成左右两部分个数相等的元素,分别为Sl和Sr。
(2)递归查找两边点集的的最大点;
(3)将获得的所有最大点按y值排序,并查找出Sl中y值小于Sr中最大点的y值的最大点,并将其排除;
(4)最终获得所有的点集S的所有maximal point。
时间复杂度是:O(nlgn)
Homework:Voronoi Diagra

最近更新

汉语“乡土语言”翻译研究专栏 3页

美容院教学楼改造合同3篇 55页

民营矿业企业融资模式创新研究 3页

民族地区教育优先发展中的政策移植问题研究—.. 3页

民办学校全面预算管理绩效评价体系研究--以FL.. 3页

武术套路运动员专项力量训练方法探析 3页

模拟核电环境对GH690合金断裂韧性及断裂行为影.. 3页

森林公园游客忠诚度研究--以五岳寨国家森林公.. 3页

桃江县竹产业发展策略研究 3页

核心素养视域下的高中历史探究教学研究 3页

2025年做一个有效的销售计划 5页

柏林110kV变电站扩建工程设计方案 5页

极繁主义风格对纹样设计的影响——以奇幻浪漫.. 3页

汽车零部件厂装修合同3篇 55页

本地文件系统对HDFS的性能影响研究 3页

气体危险品运输服务协议3篇 48页

2025年优质高油花生新品种国审豫花15号远杂91.. 82页

智能交通监控中摄像机标定方法研究 5页

文化创意产业园装饰合同3篇 57页

日本对突发灾害的应急通讯对策 3页

无卤阻燃红麻增强聚乳酸复合材料研究 4页

农业扶贫物资配送协议3篇 50页

2025年云南崖画谷旅游区建设可行性研究报告 95页

幼儿园燃气事故应急方案 5页

兼职体育教练聘用合同 5页

危货运输应急演练总结报告 5页

沪教版(上海)-初中数学七年级、八年级、九年级.. 16页

关于退学的委托书 3页

社区绩效考核细则 4页

郑州市商城遗址导游词2022 5页