算法分析与设计——分治法实验报告
算法导论 课程设计
题 目: 算法导论课程设计实验报告 学院班级: 1613013 学 号: 16130130216 姓 名: 库 妍 主讲教师: 张立勇 日 期: 2019.6.3 |
录
分治法
一、Implement exercise 2.3-7........................................4
二、Implement priority queue........................................6
三、Quicksort.......................................................8
四、找出第k大的元素...............................................10
动态规划法
一、Matrix-chain product...........................................13
二、Longest Common Subsequence (LCS)................................15
三、Longest Common Substring.......................................16
四、Max Sum........................................................18
五、Shortest path in multistage graphs.............................19
贪心法
一、Knapsack Problem...............................................22
二、scheduling problem.............................................23
三、Single-source shortest paths...................................24
四、All-pairs shortest paths.......................................26
回溯法
一、0/1 Knapsack Problem...........................................29
二、8-Queen problem................................................30
算法导论 课程设计
题 目: 分 治 法 学院班级: 1613013 学 号: 16130130216 姓 名: 库 妍 主讲教师: 张立勇 日 期: 2019.3.21 |
一、Implement exercise 2.3-7
1、实验题目
描述一个运行时间为O(nlgn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素。
2、使用的算法
(1)运用归并排序算法,先对集合中的整数进行排序。
(2)归并排序后,运用二分查找两个数和为x的元素。
3、算法分析与设计
(1)首先将S进行排序,然后再通过查找算法进行查找。插入排序算法复杂度最差O(n^2),归并排序最差为O(nlgn),堆排序为最差为O(nlgn),快速排序最差为O(n^2),这里直接使用归并排序。归并排序运用的是分治思想,时间复杂度为 O(nlgn),能够满足题目要求的运行时间。
①分解(devide):归并排序将n个元素分成各含n/2g个元素的子序列,对已经分解的两个部分再进行分解直到将数组分解成单个元素为止。
②解决(conquer):用合并排序法递归求解排序子序列。
③合并(combine):合并部分是将已经排序的两个子序列进行合并得到结果。
(2)二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少。折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(lg n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右 半部继续搜索x。
1、项目测试(功能与性能)
时间复杂度为O(nlgn)
1、实验总结
遇到的问题及解决:
MERGE过程中,子数组A[p..q]和A[q+1..r],待合并个数n1 = q - p + 1,n2 = r - q,计算时容易出错。
另外,进行二分查找时right = A.length - 1,数组最后一个元素的下标是数组A的长度减1。
二、Implement priority queue
1、实验题目
实现优先级队列,即需要支持以下操作:INSERT(S,x):把元素x插入到集合S中;MAXMUM(S):返回S中具有最大key的元素;EXTRACT-MAX(S):去掉并返回S中的具有最大key的元素; INCREASE-KEY(S,x,k):将元素x的关键字值增到k。
2、使用的算法
运用堆排序,来实现优先队列。
3、算法分析与设计
(1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆排序算法分为3个过程,MAX-HEAPIEY:调整堆以满足小顶堆性质,其时间复杂度为O(lgn);BUILD-MAXHEAP:从无序的输入数据数组中构造小顶堆,其时间复杂度为线性时间;HEAP-SORT:对数组进行原址排序,其时间复杂度为O(nlgn)。
(2)在堆的基础上实现优先队列INSERT、MAXMUM、EXTRACT-MAX、INCREASE-KEY,时间复杂度为O(lgn)。
4、项目测试(功能与性能)
1、实验总结
编写HEAP-EXTRACT-MAX函数的时候,当去掉第一个元素后,程序要调用MAX-HEAPIFY进行调整堆,否则最后序列是无序状态。另外,开始没有理解BUILD-MAX-HEAP的过程,当对某结点调用BUILD-MAX-HEAP时,该结点的两棵子树都已是最大堆。
三、Quicksort
1、实验题目
实现quick_sort算法,并且回答以下两个问题:
(1)待排数组中的元素值都相同的情况下,运用quick_sort需要进行多少次比较?
(2)对于n个元素的数组,运用quick_sort举出需要进行比较次数的上限和下限是多少?
2、使用的算法
使用了快速排序算法。
3、算法分析与设计
快速排序采用分治策略,时间复杂度为O(nlgn),但是最坏情况下为O(n2),并且快速排序算法属于原地排序,并不需要开辟空间。快速排序复杂的步骤为其分解的步骤。
①分解(divide):数组A[p..r]被划分为两个子数组A[p..q-1]和A[q+1..r], 使得A[p..q-1]中的每个元素都小于等于A[q],而且,小于等于A[q+1..r] 中的每个元素。下标q也在这个划分过程中进行计算。
②解决(conquer):通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r] 进行排序。
③合并(combine):因为两个子数组是就地排序的,将它们的合并不需要操 作,整个数组A[p..r]已排序。
4、项目测试(功能与性能)
5、实验总结
问题回答:
(1)当选择第一个或最后一个参考点时,当n个元素相同时为最坏情况,比较的数目是n *(n-1)/ 2。
(2)快速排序比较的最小数目是nlgn,最大的比较数是n^2。
四、找出第k大的元素
1、实验题目
运用分治的策略将两个已经排好序的序列中,找出第k大的元素,且要求时间复杂度为O(lgm + lgn),其中m和n分别为两个序列的长度。
2、使用的算法
使用分治策略
3、算法分析与设计
解法一:
(1)分解:因为已经是两个独立的的序列,所以不用进行分解。
(2)解决:因为两个序列为已经排好的序列,因此不用分开进行排序。
(3)利用归并排序中的merge函数,将这两个序列分别看成是L[]和R[]两个数组,通过开辟一个新的数组,将两个数组合并成一个新的排好序的序列,在根据要求的k值,对新的数组进行取值。
解法二:题目只要求第k大的数,没必要花力气将数组全部再排序,可以定义两个游标分别指向两个有序数组,按序移动,并用count计数,当count等于k时,返回两个游标指向的数中最小的那一个。
4、项目测试(功能与性能)
时间复杂度为O(lgm + lgn)。
5、实验总结
理解分治策略的三个步骤:分解、解决和合并在具体问题上的应用,根据时间复杂度与所学的算法进行结合。为了解决一个问题,算法要一次或多次地调用其自身来解决相关的子问题,这些算法常采用分治策略。分治法将原问题划分成n个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后合并其结果,得到子问题的解。
转载于:https://www.cnblogs.com/ku1274755259/p/11108470.html
算法分析与设计——分治法实验报告相关推荐
- c语言分治法实验报告,分治法实验报告范文
分治法实验报告范文 一.实验目的及要求 利用分治方法设计大整数乘法的递归算法,掌握分治法的基本思想和算法设计的基本步骤. 要求:设计十进制的'大整数乘法,必须利用分治的思想编写算法,利用c语言(或者c ...
- c语言分治法实验报告,分治法实验报告范文word版
<分治法实验报告范文word版>由会员分享,可在线阅读,更多相关<分治法实验报告范文word版(2页珍藏版)>请在人人文库网上搜索. 1.精编word文档 下载可编辑分治法实验 ...
- 算法分析与设计——分治法最近点对
分治法最近点对 分治法 分治法将一个难以直接解决的大问题划分成一些规模较小的子问题,分别求解各个子问题,再合并子问题的解得到原问题的解. 一般来说,分治法的求解过程由以下三个阶段组成: 划分:把规模为 ...
- 算法分析与设计——贪心法实验报告
算法导论 课程设计 成 绩 题 目: 贪心法 学院班级: 1613013 学 号: 16130130216 姓 名: ...
- 算法分析与设计——回溯法实验报告
算法导论 课程设计 成 绩 题 目: 回 溯 法 学院班级: 1613013 学 号: 16130130216 姓 ...
- C/C++ 算法设计与分析实验报告
算法设计与分析实验报告 算法实验整体框架的构建 菜单代码块 选择函数代码块 主函数代码块 实验模块Ⅰ:算法分析基础--Fibonacci序列问题 实验解析 Fibonacci序列问题代码块 实验模块Ⅱ ...
- 太原理工大学linux与python编程r实验报告_太原理工大学算法设计与分析实验报告...
<太原理工大学算法设计与分析实验报告>由会员分享,可在线阅读,更多相关<太原理工大学算法设计与分析实验报告(12页珍藏版)>请在人人文库网上搜索. 1.本科实验报告课程名称: ...
- 计算机模型机设计实验报告,基本模型机设计与实现 实验报告
<基本模型机设计与实现 实验报告>由会员分享,可在线阅读,更多相关<基本模型机设计与实现 实验报告(3页珍藏版)>请在人人文库网上搜索. 1.____学院____专业_____ ...
- 分治法实验之大整数乘法(算法设计分析)
分治法实验之大整数乘法 01. 问题描述 02. 输入格式 03. 输出格式 04. 输入样例 05. 输出样例 06. 问题分析 07. 算法设计 08. 代码实现 09. 测试结果 10. 复杂度 ...
- 嵌入式软件设计第九次实验报告-140201235-陈宇
嵌入式软件设计第九次实验报告 学号:140201235 姓名:陈宇 组别:第3组 实验地点:D19 一.实验目的: 1.熟悉WWW ...
最新文章
- 如何修改系统时间显示格式
- python爬虫程序实例-10个python爬虫入门实例
- Win7系统下Vmware虚拟机无法使用USB设备问题的解决方法
- Qt5.2 for Android 配置及部署到手机运行
- web开发者工具,你必须知道的CSS盒模型,架构师必备!
- NSA-LDL论文修改建议20211026BRT
- day43,使用朋友pyMySQL连接数据库
- ucc编译器(入门)
- 一文学会 Prometheus:开源系统监视和警报工具包!
- JS对象转JSON转数组
- vue-codemirror 代码编辑器
- 相机变换AND正交投影AND透视投影
- linux运行ardupilot,ardupilot在Linux上的启动过程
- lm曲线公式推导_LM曲线
- C语言对文本进行断句,用TextView实现富文本展示,点击断句和语音播报
- 电子印章怎么验证真假?
- 个人述职岗位竞聘报告PPT模板
- 显示器尺寸和分辨率大小
- 如何实现一台电脑同时登录多个电脑版微信? Windows10
- 【通信原理| OFDM技术的最简讲解(下)】DFT 与 OFDM
热门文章
- 华为ICT大赛2016模拟题
- 南航计算机学院的实验室,南航计算机科学与技术学院导师介绍:魏欧
- Android开发--内容提供者(Content provider)
- python 3d绘图平面_python 利用matplotlib在3D空间中绘制平面的案例
- 循环系统疾病病人的护理题库【2】
- 2018-4-17论文《狼群算法的研究与应用》笔记1 智能算法简介;狼群算法国内外研究现状以及参看文献
- 可靠产品设计的5项技术 02-识别和评估关键的可靠性风险
- marlab中主成分得分怎么求_8款洁面泡沫洗面奶大评测,成分分析以及适用肤质介绍...
- TCPDump工具使用与UDP数据包分析
- 台式计算机设备验收单,电脑设备验收单.doc