算法分析与设计实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一、归并排序及各种排序算法性能比较

一、实验实习目的及要求

了解归并排序等各种排序算法,并能独立在计算机上实现,同时并能够计算它们的时间复杂度,并用计算机来验证。

二、实验实习设备(环境)及要求(软硬件条件)

计算机eclipse软件,执行环境JavaSE-1.8.

三、实验实习项目、内容与步骤(注意是主要关键步骤,适当文字+代码+截图说明)

项目:对10 4 6 3 8 2 5 7进行从小到大排序,采用几种排序方法,并统计这几种方法的运行时间,与归并排序比较。

内容及步骤:

(1)归并排序:将序列每次分成两组,再进行合并,直到递归完成;

1、递归调用mergeSort对数组排序

2、merge将两个有序数组合并为一个有序数组

3、主函数调用mergeSort对数组排序

4、统计时间

(2) 选择排序:每次选择一个当前最小的并和当前的相对的第一个元素交换,直到最后

只有一个元素时结束;也可选择当前最大的并与当前的相对的最后一个

元素交换,直到最后只有一个元素时结束。

1、数组长度为n,需要选择n-1次;每次选择完成后,将数组中的最大值与最后一

个元素互换,调用java.util包中Arrays类。

2、主函数调用ChooseSort对数组排序。

3、统计运行时间。

(3)插入排序:从第二个元素开始,每次插入一个到当前有序序列中,使得有序,当

所有的元素插入完毕时,就排好序了;

1、从第二个元素开始,与之前序列比较,插入到合适的位置。

2、主函数调用sort对数组排序。

3、统计运行时间

(4) 快速排序:每次选择一个中间元素,并进行交换,使得中间元素的左边比它小,右

边比它大,然后对左右两边进行递归;

1、选取一个基准位,从右边向左边看,找比基准位小的元素,再从左边向右边看,

找比基准位大的元素,若两者均存在则交换;若两者相遇,则相遇元素与基准位元素交换,然后递归排序左右半数组。

2、主函数调用quickSort对函数排序

3、统计运行时间

(5) 堆排序:采用插入的模式产生堆,然后把根交换到最后,在形成一个堆,再把根与

当前最后一个交换,如此,直到最后只剩下一个元素;

1、升序方式采用大顶堆,由父节点与左右子节点对应元素比较,将较大元素的位置

改为对应子节点,若不为最大,需要交换最大的,递归处理其余堆。

2、从最后一个非叶子节点开始,即最后一个叶子节点的父节点,调用maxHeap,完

成后,第一个元素与最后一个元素互换,此时最后一个元素固定,递归调用maxHeap,直至最后一个元素停止。

3、主函数调用heapSort 对数组进行排序

4、统计程序运行时间

四、实验实习结果及分析

实验结果: (1)归并排序

(2)选择排序

(3)插入排序

(4)快速排序

(5)堆排序

分析:上述五种排序方法中,选择排序与堆排序的运行时间相当,而归并排序与插入排序和快速排序相当,前两种方法的运行时间比后三种方法短。但一则例子不能完全表明哪种方法的优劣,需要对特定的目标采取合适的方法。

归并排序:最差时间复杂度和最优时间复杂度都为。虽然比较稳定,在时间上也非常有效,但却很消耗空间,一般在内部排序不会采用这种方法,而采用快速排序,外部排序会考虑使用这种方法。

(log )O n n

选择排序:最差时间复杂度和最优时间复杂度都为。该方法是不稳定的。 插入排序:最优时间复杂度为,对应待排序列已有序;最差时间复杂度为。因为在有序部分元素和待插入元素相等的时候,可以将待插入的元素放在前面,所以插入排序是稳定的。

快速排序:最优时间复杂度为,每次取到的元素都刚好使待排序列中分;

最差时间复杂度为

,每次取到的元素都是数组中的最大值或最小值,即已排好的

序列。因为在快速排序的时候,即使待排序元素可基数相等也需要移动待排序元素的位置使得有序,所以快速排序是不稳定的。

堆排序:堆排序的时间复杂度主要在初始化堆过程和每次选取最大数后重新建堆的过程。初始化建堆过程:,更改堆元素后重建堆:,于是堆排序的时间

复杂度为

。该方法是不稳定的。

实验二、背包问题

一、实验实习目的及要求

了解0-1背包问题的原理和解决问题的各种算法,掌握编程实现动态规划法,贪心算法,回溯法及分支界限法四种方法解决0-1背包问题的方法。分析比较各算法的优劣。

二、实验实习设备(环境)及要求(软硬件条件)

计算机eclipse 软件,执行环境JavaSE-1.8. 三、实验实习项目、内容与步骤

项目:分别运用动态规划法,贪心算法,回溯法及分支界限法解决0-1背包问题并比较各算法的优劣。

内容及步骤: (1)动态规划法

1、定义二维数组F[i][j]表示前i 个物品在限重为j 的最大价值,以及各物品的重量与价值。

2()O n ()O n ()O n

2、对价值二维数组初始化,背包是否加入下一个物品进行判断。

3、表示所有价值数组元素构成矩阵并判断选取哪些物品使价值最大。

4、键入各物品的重量与价值,主函数调用求解问题。

(2)贪心算法

1、键入背包的容量和待装物品的重量与价值。

2、定义贪婪准则对带装物品进行降序排序

3、判断待装物品进行装包判断以及计算最大价值。

(3)回溯法

1、键入背包的容量和待装物品的重量与价值。

相关文档
最新文档