算法实验报告

合集下载

算法实验报告结果分析

算法实验报告结果分析

一、实验背景随着计算机科学技术的不断发展,算法作为计算机科学的核心内容之一,其重要性日益凸显。

为了验证和评估不同算法的性能,我们进行了一系列算法实验,通过对比分析实验结果,以期为后续算法研究和优化提供参考。

二、实验方法本次实验选取了三种常见的算法:快速排序、归并排序和插入排序,分别对随机生成的数据集进行排序操作。

实验数据集的大小分为10000、20000、30000、40000和50000五个级别,以验证算法在不同数据量下的性能表现。

实验过程中,我们使用Python编程语言实现三种算法,并记录每种算法的运行时间。

同时,为了确保实验结果的准确性,我们对每种算法进行了多次运行,并取平均值作为最终结果。

三、实验结果1. 快速排序快速排序是一种高效的排序算法,其平均时间复杂度为O(nlogn)。

从实验结果来看,快速排序在所有数据量级别下均表现出较好的性能。

在数据量较小的10000和20000级别,快速排序的运行时间分别为0.05秒和0.1秒;而在数据量较大的40000和50000级别,运行时间分别为0.8秒和1.2秒。

总体来看,快速排序在各个数据量级别下的运行时间均保持在较低水平。

2. 归并排序归并排序是一种稳定的排序算法,其时间复杂度也为O(nlogn)。

实验结果显示,归并排序在数据量较小的10000和20000级别下的运行时间分别为0.15秒和0.25秒,而在数据量较大的40000和50000级别,运行时间分别为1.5秒和2.5秒。

与快速排序相比,归并排序在数据量较小的情况下性能稍逊一筹,但在数据量较大时,其运行时间仍然保持在较低水平。

3. 插入排序插入排序是一种简单易实现的排序算法,但其时间复杂度为O(n^2)。

实验结果显示,插入排序在数据量较小的10000和20000级别下的运行时间分别为0.3秒和0.6秒,而在数据量较大的40000和50000级别,运行时间分别为8秒和15秒。

可以看出,随着数据量的增加,插入排序的性能明显下降。

算法实验报告

算法实验报告

实验一分治与递归算法的应用一、实验目的1.掌握分治算法的基本思想(分-治-合)、技巧和效率分析方法。

2.熟练掌握用递归设计分治算法的基本步骤(基准与递归方程)。

3.学会利用分治算法解决实际问题。

二 . 实验内容金块问题老板有一袋金块(共n块,n是2的幂(n≥2)),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。

假设有一台比较重量的仪器,希望用最少的比较次数找出最重和最轻的金块。

并对自己的程序进行复杂性分析。

三.问题分析:一般思路:假设袋中有n 个金块。

可以用函数M a x(程序1 - 3 1)通过n-1次比较找到最重的金块。

找到最重的金块后,可以从余下的n-1个金块中用类似法通过n-2次比较找出最轻的金块。

这样,比较的总次数为2n-3。

分治法:当n很小时,比如说,n≤2,识别出最重和最轻的金块,一次比较就足够了。

当n 较大时(n>2),第一步,把这袋金块平分成两个小袋A和B。

第二步,分别找出在A和B中最重和最轻的金块。

设A中最重和最轻的金块分别为HA 与LA,以此类推,B中最重和最轻的金块分别为HB 和LB。

第三步,通过比较HA 和HB,可以找到所有金块中最重的;通过比较LA 和LB,可以找到所有金块中最轻的。

在第二步中,若n>2,则递归地应用分而治之方法程序设计据上述步骤,可以得出程序1 4 - 1的非递归代码。

该程序用于寻找到数组w [ 0 : n - 1 ]中的最小数和最大数,若n < 1,则程序返回f a l s e,否则返回t r u e。

当n≥1时,程序1 4 - 1给M i n和M a x置初值以使w [ M i n ]是最小的重量,w [ M a x ]为最大的重量。

首先处理n≤1的情况。

若n>1且为奇数,第一个重量w [ 0 ]将成为最小值和最大值的候选值,因此将有偶,数个重量值w [ 1 : n - 1 ]参与f o r循环。

当n 是偶数时,首先将两个重量值放在for 循环外进行比较,较小和较大的重量值分别置为Min和Max,因此也有偶数个重量值w[2:n-1]参与for循环。

现代密码算法实验报告(3篇)

现代密码算法实验报告(3篇)

第1篇一、实验目的1. 了解现代密码学的基本原理和数论基础知识;2. 掌握非对称密码体制的著名代表RSA加密算法的工作原理和流程;3. 设计实现一个简单的密钥系统;4. 掌握常用加密算法AES和DES的原理及实现。

二、实验内容1. RSA加密算法实验2. AES加密算法实验3. DES加密算法实验三、实验原理1. RSA加密算法RSA算法是一种非对称加密算法,由罗纳德·李维斯特、阿迪·沙米尔和伦纳德·阿德曼三位密码学家于1977年提出。

其基本原理是选择两个大质数p和q,计算它们的乘积n=pq,并计算欧拉函数φ(n)=(p-1)(q-1)。

选择一个整数e,满足1<e<φ(n)且e与φ(n)互质。

计算e关于φ(n)的模逆元d。

公开密钥为(e,n),私有密钥为(d,n)。

加密过程为C=Me mod n,解密过程为M=Cd mod n。

2. AES加密算法AES(Advanced Encryption Standard)是一种分组加密算法,采用128位分组大小和128、192或256位密钥长度。

AES算法主要分为四个阶段:初始轮、密钥扩展、中间轮和最终轮。

每个轮包括字节替换、行移位、列混淆和轮密钥加。

3. DES加密算法DES(Data Encryption Standard)是一种分组加密算法,采用64位分组大小和56位密钥长度。

DES算法主要分为16轮,每轮包括置换、置换-置换、S盒替换和密钥加。

四、实验步骤及内容1. RSA加密算法实验(1)选择两个大质数p和q,计算n=pq和φ(n)=(p-1)(q-1);(2)选择一个整数e,满足1<e<φ(n)且e与φ(n)互质,计算e关于φ(n)的模逆元d;(3)生成公开密钥(e,n)和私有密钥(d,n);(4)用公钥对明文进行加密,用私钥对密文进行解密。

2. AES加密算法实验(1)选择一个128、192或256位密钥;(2)初始化初始轮密钥;(3)进行16轮加密操作,包括字节替换、行移位、列混淆和轮密钥加;(4)输出加密后的密文。

算法课设实验报告(3篇)

算法课设实验报告(3篇)

第1篇一、实验背景与目的随着计算机技术的飞速发展,算法在计算机科学中扮演着至关重要的角色。

为了加深对算法设计与分析的理解,提高实际应用能力,本实验课程设计旨在通过实际操作,让学生掌握算法设计与分析的基本方法,学会运用所学知识解决实际问题。

二、实验内容与步骤本次实验共分为三个部分,分别为排序算法、贪心算法和动态规划算法的设计与实现。

1. 排序算法(1)实验目的:熟悉常见的排序算法,理解其原理,比较其优缺点,并实现至少三种排序算法。

(2)实验内容:- 实现冒泡排序、快速排序和归并排序三种算法。

- 对每种算法进行时间复杂度和空间复杂度的分析。

- 编写测试程序,对算法进行性能测试,比较不同算法的优劣。

(3)实验步骤:- 分析冒泡排序、快速排序和归并排序的原理。

- 编写三种排序算法的代码。

- 分析代码的时间复杂度和空间复杂度。

- 编写测试程序,生成随机测试数据,测试三种算法的性能。

- 比较三种算法的运行时间和内存占用。

2. 贪心算法(1)实验目的:理解贪心算法的基本思想,掌握贪心算法的解题步骤,并实现一个贪心算法问题。

(2)实验内容:- 实现一个贪心算法问题,如活动选择问题。

- 分析贪心算法的正确性,并证明其最优性。

(3)实验步骤:- 分析活动选择问题的贪心策略。

- 编写贪心算法的代码。

- 分析贪心算法的正确性,并证明其最优性。

- 编写测试程序,验证贪心算法的正确性。

3. 动态规划算法(1)实验目的:理解动态规划算法的基本思想,掌握动态规划算法的解题步骤,并实现一个动态规划算法问题。

(2)实验内容:- 实现一个动态规划算法问题,如背包问题。

- 分析动态规划算法的正确性,并证明其最优性。

(3)实验步骤:- 分析背包问题的动态规划策略。

- 编写动态规划算法的代码。

- 分析动态规划算法的正确性,并证明其最优性。

- 编写测试程序,验证动态规划算法的正确性。

三、实验结果与分析1. 排序算法实验结果:- 冒泡排序:时间复杂度O(n^2),空间复杂度O(1)。

数字孪生算法实验报告(3篇)

数字孪生算法实验报告(3篇)

第1篇一、实验背景数字孪生技术是一种将物理实体在数字世界中构建其精确映射的技术,它能够实时反映物理实体的状态,并通过模拟、预测和分析为物理实体的优化和决策提供支持。

近年来,数字孪生技术在各个领域得到了广泛应用,包括航空航天、汽车制造、城市管理等。

本实验旨在研究数字孪生算法,并通过实验验证其有效性和实用性。

二、实验目的1. 了解数字孪生算法的基本原理和实现方法。

2. 掌握数字孪生算法在特定场景下的应用。

3. 评估数字孪生算法的性能和效果。

4. 提出优化数字孪生算法的方法。

三、实验内容1. 数字孪生算法概述数字孪生算法主要包括数据采集、模型构建、数据同步和仿真分析四个部分。

(1)数据采集:通过传感器、摄像头等设备收集物理实体的实时数据。

(2)模型构建:利用数据采集到的信息,构建物理实体的数字模型。

(3)数据同步:实时更新数字模型,确保其与物理实体状态的一致性。

(4)仿真分析:对数字模型进行模拟、预测和分析,为物理实体的优化和决策提供支持。

2. 实验场景本实验以城市交通管理系统为场景,利用数字孪生技术对城市交通流量进行实时监测、预测和优化。

3. 实验步骤(1)数据采集:通过安装在交通路口的摄像头和传感器,采集实时交通流量数据。

(2)模型构建:利用采集到的数据,构建城市交通网络的数字孪生模型。

(3)数据同步:实时更新数字模型,确保其与实际交通流量状态的一致性。

(4)仿真分析:对数字模型进行模拟、预测和分析,为交通流量优化提供支持。

四、实验结果与分析1. 实验结果通过数字孪生算法对城市交通流量进行监测、预测和优化,实验结果如下:(1)实时监测:数字孪生模型能够实时反映交通流量变化,为交通管理部门提供决策依据。

(2)预测分析:数字孪生模型能够预测未来一段时间内的交通流量变化,为交通优化提供支持。

(3)优化方案:根据数字孪生模型的预测结果,提出合理的交通优化方案,如调整信号灯配时、优化道路设计等。

2. 结果分析(1)数字孪生算法能够有效反映城市交通流量变化,为交通管理部门提供实时监测和预测数据。

算法冒泡排序实验报告(3篇)

算法冒泡排序实验报告(3篇)

第1篇一、实验目的本次实验旨在通过实现冒泡排序算法,加深对排序算法原理的理解,掌握冒泡排序的基本操作,并分析其性能特点。

二、实验内容1. 冒泡排序原理冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。

遍历数列的工作是重复地进行,直到没有再需要交换,也就是说该数列已经排序完成。

2. 实验步骤(1)设计一个冒泡排序函数,输入为待排序的数组,输出为排序后的数组。

(2)编写一个主函数,用于测试冒泡排序函数的正确性和性能。

(3)通过不同的数据规模和初始顺序,分析冒泡排序的性能特点。

3. 实验环境(1)编程语言:C语言(2)开发环境:Visual Studio Code(3)测试数据:随机生成的数组、有序数组、逆序数组三、实验过程1. 冒泡排序函数设计```cvoid bubbleSort(int arr[], int n) {int i, j, temp;for (i = 0; i < n - 1; i++) {for (j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}```2. 主函数设计```cinclude <stdio.h>include <stdlib.h>include <time.h>int main() {int n;printf("请输入数组长度:");scanf("%d", &n);int arr = (int )malloc(n sizeof(int)); if (arr == NULL) {printf("内存分配失败\n");return 1;}// 生成随机数组srand((unsigned)time(NULL));for (int i = 0; i < n; i++) {arr[i] = rand() % 100;}// 冒泡排序bubbleSort(arr, n);// 打印排序结果printf("排序结果:\n");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");// 释放内存free(arr);return 0;}```3. 性能分析(1)对于随机生成的数组,冒泡排序的平均性能较好,时间复杂度为O(n^2)。

算法仿真实验报告

算法仿真实验报告

一、实验目的本次实验旨在通过仿真实验,验证某算法在实际应用中的性能和效果,并对算法的优化进行初步探讨。

通过实验,深入了解算法的原理,分析其优缺点,为实际工程应用提供参考。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 仿真软件:MATLAB 2019b4. 硬件环境:****************************,16GB RAM三、实验内容1. 算法原理及描述2. 仿真实验设计3. 实验结果分析4. 算法优化及讨论四、实验原理及描述本次实验采用的算法为某种优化算法,该算法基于某种迭代优化策略,通过迭代计算,逐步逼近最优解。

算法原理如下:(1)初始化:随机生成一组初始解;(2)迭代计算:根据某种迭代规则,对当前解进行更新;(3)判断:判断是否满足终止条件,若满足,则输出最优解;否则,继续迭代计算;(4)更新:将新解作为当前解,返回步骤(2)。

五、仿真实验设计1. 实验数据:选取一组具有代表性的测试数据,包括输入数据和期望输出数据;2. 实验步骤:(1)导入实验数据;(2)调用算法进行仿真实验;(3)记录实验结果;(4)分析实验结果。

六、实验结果分析1. 实验结果展示(1)输入数据:[1, 2, 3, 4, 5](2)期望输出:[1, 2, 3, 4, 5](3)算法输出:[1, 2, 3, 4, 5](4)误差分析:误差为0,说明算法输出与期望输出一致。

2. 性能分析(1)算法运行时间:0.001s(2)迭代次数:100次(3)算法收敛速度:较快3. 优缺点分析(1)优点:算法简单易实现,收敛速度快;(2)缺点:对初始解敏感,容易陷入局部最优。

七、算法优化及讨论1. 优化策略(1)改进初始解:采用某种方法生成更好的初始解,提高算法的鲁棒性;(2)调整迭代规则:优化迭代规则,使算法在迭代过程中更加稳定;(3)引入多种优化算法:结合多种优化算法,提高算法的适应性和全局搜索能力。

鲍威尔算法实验报告

鲍威尔算法实验报告

一、实验目的1. 理解鲍威尔算法的基本原理和步骤。

2. 掌握鲍威尔算法在求解非线性方程组中的应用。

3. 分析鲍威尔算法的收敛速度和精度。

二、实验原理鲍威尔算法是一种迭代算法,用于求解非线性方程组。

该算法的基本思想是利用相邻迭代的残差向量构造一个线性方程组的系数矩阵,进而求出近似解。

具体步骤如下:1. 初始化:选择初始点 \( x_0 \) 和 \( x_1 \),计算初始残差向量\( \mathbf{r}_0 = f(x_0) \) 和 \( \mathbf{r}_1 = f(x_1) \)。

2. 构造系数矩阵:根据残差向量 \( \mathbf{r}_0 \) 和 \( \mathbf{r}_1 \) 构造系数矩阵 \( \mathbf{A} \)。

3. 求解线性方程组:求解线性方程组 \( \mathbf{A} \mathbf{x} =\mathbf{r}_1 \),得到系数 \( \mathbf{x} \)。

4. 更新近似解:根据系数 \( \mathbf{x} \) 更新近似解 \( x_2 = x_1 +\mathbf{x} \)。

5. 检查收敛性:计算新的残差向量 \( \mathbf{r}_2 = f(x_2) \),如果满足收敛条件,则停止迭代;否则,返回步骤2。

三、实验内容1. 选择非线性方程组:设非线性方程组为\[\begin{cases}f_1(x_1, x_2) = x_1^2 + x_2^2 - 1 = 0 \\f_2(x_1, x_2) = x_1^3 - x_2 - 1 = 0\end{cases}\]2. 选择初始点:取 \( x_0 = (0, 0) \) 和 \( x_1 = (1, 1) \)。

3. 运行鲍威尔算法:根据上述步骤,编写程序求解该非线性方程组。

四、实验结果与分析1. 实验结果:经过多次迭代,鲍威尔算法得到近似解为 \( x_1 \approx 0.5285 \),\( x_2 \approx 0.8572 \)。

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

云南大学信息学院计算机科学与技术专业本科《算法设计与分析》专业:计算机科学与技术教师:岳昆老师姓名:**学号:***********2014年12月26 日1实验一算法计算时间复杂度和增长率 (4)1、实验目的 (4)2、基本思想 (4)3、设计与实现的关键技术和主要方法 (4)4、实验环境 (4)5、实验结果与结论 (4)5.1实验结果: (4)5.2结论: (5)实验二搜索算法的实现,时间复杂度分析与测试 (6)1、实验目的 (6)2、基本思想 (6)3、设计与实现的关键技术和主要方法 (6)4、实验环境 (6)5、实验结果与结论 (6)5.1实验结果 (6)5.2结论 (8)实验三分治算法的递归程序实现与时间复杂度测试 (9)1、实验目的 (9)2、基本思想 (9)3、设计与实现的关键技术和主要方法 (9)4、实验环境 (9)5、实验结果与结论 (9)5.1实验结果: (9)5.2结论 (10)实验四动态规划算法的实现与时间复杂度测试 (11)1、实验目的 (11)2、基本思想 (11)3、设计与实现的关键技术和主要方法 (11)4、实验环境 (11)5、实验结果与结论 (11)5.1实验结果: (11)5.2结论 (12)实验五动态规划算法的适应性测试 (12)1、实验目的 (13)2、基本思想 (13)3、设计与实现的关键技术和主要方法 (13)4、实验环境 (13)5、实验结果与结论 (13)5.1实验结果 (13)5.2结论 (14)实验六贪心算法的实现与时间复杂度测试 (14)1、实验目的 (15)2、基本思想 (15)23、设计与实现的关键技术和主要方法 (15)4、实验环境 (15)5、实验结果与结论 (15)5.1实验结果 (15)5.2结论 (16)附录: (17)1.公用数据类(Value.java) (17)2.背包类(Knapsack.java) (17)3.随机数工具类(RandomUtils.java) (18)4. 冒泡算法(BubbleSort.java) (19)5. 归并排序(MergeSort .java) (20)6. 折半查找(BinarySearch.java) (22)7. 线性查找(SequentialSearch.java) (23)8. 快速排序(QuickSort.java) (24)9. 0-1背包问题(KnapsackDP.java) (26)10. Fibonacci数列按递归和动态规划解决(Fibonacci .java) (27)11. 贪心算法背包问题(KnapsackGreedy.java) (29)3实验一算法计算时间复杂度和增长率1、实验目的通过算法的程序实现和执行时间测试、并与理论上的结论进行对比分析,深入理解算法时间复杂度分析中对于输入数据考虑其等价类的意义,理解算法时间复杂度渐进性态和和增长率的概念,为后续学习和实验奠定基础,同时也学习程序效率测试的基本思路。

2、基本思想(1) 算法的计算时间取决于算法中某些操作的执行次数,这些操作是算法时间复杂度分析的依据。

(2) 增长率反映了算法的计算时间复杂度,即随着算法输入规模的增加、算法计算时间增加的趋势。

(3) 算法的计算时间复杂度针对输入数据的等价类来分析或测试。

3、设计与实现的关键技术和主要方法(1)生成随机数(2)实现冒泡排序和归并排序(3)记录比较次数,根据作图分析4、实验环境硬件:处理器Intel Core i5,2.5GHz; RAM 4G软件:windows7,jdk1.6 ,origin8.05、实验结果与结论5.1实验结果:4表3:归并排序测试数据10 100 1000 2000 5000 10000 100000 实验数据个数(个)23 541 8719 19412 552281204971536591比较操作次数(次)图1:冒泡排序与归并排序比较5.2结论:1)由表1可得,对于冒泡算法在相同的输入规模下,由于输入数据之间的差异,可能会对比较的次数的大小造成一定的影响,这是由于对算法进行优化的缘故,对于已有序的数列不进行重复排序。

但是对比较次数的数量级没有影响。

2)冒泡排序的时间复杂度按理论上进行分析为O(n2),归并排序的时间复杂度为O(nlog(n))。

通过实验中分析比较次数又图1中可以看到,对于输入规模的增大,冒泡排序比较次数的增长率始终大于归并排序。

故而,通过本次试验可以证明归并排序的时间效率优于冒泡排序。

5实验二搜索算法的实现,时间复杂度分析与测试1、实验目的编程实现顺序搜索和二分搜索算法,理解算法设计的基本思想。

通过程序的执行时间测试结果,与理论上的时间复杂度结论进行对比、分析和验证。

2、基本思想搜索(或称查找)是在大量信息中寻找一个特定的信息元素,是计算机应用中常用的基本运算。

以顺序搜索和二分搜索算法为代表,测试、验证搜索算法的计算时间复杂度。

3、设计与实现的关键技术和主要方法(1)生成随机数(2)实现顺序搜索和二分搜索(3)记录比较次数,根据作图分析4、实验环境硬件:处理器Intel Core i5,2.5GHz; RAM 4G软件:windows7,jdk1.6 ,origin8.05、实验结果与结论5.1实验结果:6表3:含预处理二分搜索测试数据实验数10 100 1000 2000 5000 10000 100000 据个数(个)49 4822 4989541995696 1249184649980142704971552比较操作次数(次)图1:不含预处理图2:包含预处理78 5.2结论:1)由于实验中需要进行搜索的目标数由电脑随机生成,所以搜索失败(搜索目标不存在)的概率很大。

对于表1中即可看出,对于搜索均失败的情况下,线性搜索进行比较次数的数量级与输入的数量级O (n)相等。

2)进行二分搜索的前提是有序数列。

如果应用二分法对有序数列中目标数的搜索时,由表2可以看出比较的次数远远小于输入的数量级。

因此,对于有序数列进行二分搜索效率很高,与理论上O(log(n))大致接近。

3)对于无序数列进行二分搜索,需要首先进行数列的预处理,即通过排序算法(本实验采用冒泡算法)对数列进行排序。

由于排序算法的性能不同,对首次进行搜索的效率有影响。

如图2所示,对于冒泡排序处理之后的数列运行二分搜索首次搜索的效率小于线性搜索。

但之后再进行搜索,由于数列已经有序,如图1,二分搜索的效率又高于线性搜索。

4)所以,综合进行分析,如果需要对数列进行多次搜索,先采用某一排序算法进行排序后,采用二分搜索的效率高于线性搜索。

反之,采用线性搜索。

附:采用归并排序后二分搜索与线性搜索比较(包含预处理)10100100010000100000101001000100001000001000000比较次数 (次)输入个数 (个)如附图1所示,通过归并排序处理后的数列进行二分搜索,在首次进行搜索时,比较的次数与理论上的搜索效率为O (nlog(n))大致吻合。

实验三分治算法的递归程序实现与时间复杂度测试1、实验目的编程实现合并排序和快速排序算法,理解分治算法设计的基本思想、递归程序实现的基本方法,加深对分治算法设计与分析思想的理解。

通过程序的执行时间测试结果,与理论上的时间复杂度结论进行对比、分析和验证。

2、基本思想分治算法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题性质相同。

求出子问题的解,就可得到原问题的解。

3、设计与实现的关键技术和主要方法(1)生成随机数(2)实现快速排序和归并排序(3)记录比较次数,根据作图分析(4)对比随着测试数据增加算法增长率变化趋势(5)测试、验证、对比算法的时间复杂度。

4、实验环境硬件:处理器Intel Core i5,2.5GHz; RAM 4G软件:windows7,jdk1.6 ,origin8.05、实验结果与结论5.1实验结果:9图1:快速排序与归并排序5.2结论:1)归并排序的思想是将一个数列一分为二,然后继续细分,直到剩下两个元素时进行归并,直到最终能够完全有序。

遵循分治的思想,将大问题细分为小问题,再逐一解决,最终合并。

如表1所示,归并排序比较次数吻合理论上O(nlog(n)),并且由合并的过程可以得出该排序是一个稳定的排序。

2)快速排序的思想是找到一个枢纽点,将比枢纽点大的放到右边,小的放到左边,然后再对左右两边采取找枢纽点的方式进行进一步细分,直到完全有序。

比较的次数如表2所示,通过枢纽点划分的过程可以看出,在算法中需要进行大量的两个数交换,可能导致相同的数也进行了交换。

因此,快速排序不是一个稳定的算法,时间效率与理论上O(log(n))大致吻合。

3)归并排序对有序数列效果很好,对无序数列的排序最差情况下也可以达到O(nlog(n))。

但对于快速排序,如果是有序数列的话,根据枢纽点的划分可以得出时间复杂度达到O(n2)。

因此对于快速排序的改进,就是采用合适的方法(本次试验采用随机下标)找到尽可能靠近中位数的枢纽点,达到最佳的排序效率。

但是,快速排序对于无序数列的排序效率很高。

10实验四动态规划算法的实现与时间复杂度测试1、实验目的编程实现经典的动态规划算法,理解动态规划算法设计的基本思想、程序实现的相关技巧,加深对动态规划算法设计与分析思想的理解。

通过程序的执行时间测试结果,与理论上的时间复杂度结论进行对比、分析和验证。

2、基本思想动态规划是一种在数学和计算机科学中使用的、用于求解包含重叠子问题的最优化问题的有效方法。

其基本思想是:将原问题分解为相似的子问题,在求解的过程中通过子问题的解描述并求出原问题的解。

动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域,在查找有很多重叠子问题的情况的最优解时有效。

它将问题重新组合成子问题,为了避免多次解决这些子问题,它们的结果都逐渐被计算并保存,从小规模的子问题直到整个问题都被解决。

因此,动态规划对每一子问题只做一次计算,具有较高的效率。

3、设计与实现的关键技术和主要方法(1)生成随机背包(2)实现0-1背包(3)根据问题规模增大记录执行时间(4)作图分析4、实验环境硬件:处理器Intel Core i5,2.5GHz; RAM 4G软件:windows7,jdk1.6 ,origin8.05、实验结果与结论5.1实验结果:图1:动态规划0-1背包5.2结论:1)0-1背包问题采用动态规划的思想进行解决,通过对二维数组的填充可以动态的求取最佳的解决方案。

这里的二维数组,横向表示背包的容量,纵向表示背包的个数。

2)在本次实验中二维数组横向采用的增量为1,要填充完整个二维数组,二维数组的大小为n*C(n表示背包个数,C表示背包容量),如图1所示,随背包个数和背包容量的增加,运行时间也相应增加。

相关文档
最新文档