没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
实 验 报 告
实验一
一、实验名称:
分治和动态规划算法实现
二、实验学时:4
三、实验内容和目的:
希望通过本次试验,加深对分治算法原理及实现过程的理解
(1) 二分法求方程近似解:求方程 f(x) = x^3 + x^2 - 1 = 0 在[0,1]上的近似解,精确度为 0.01。
(2) 给定一个顺序表,编写一个求出其最大值和最小值的分治算法。
分析:
由于顺序表的结构没有给出,作为演示分治法这里从简顺序表取一整形数组数组大小由
用户定义,数据随机生成。我们知道如果数组大小为 1 则可以直接给出结果,如果大小为
2 则一次比较即可得出结果,于是我们找到求解该问题的子问题即: 数组大小 <= 2。到此
我们就可以进行分治运算了,只要求解的问题数组长度比 2 大就继续分治,否则求解子问
题的解并更新全局解以下是代码。
四、实验原理:
电子科技大学计算机学院实验中心
分治算法的基本思想是将一个规模为 n 的问题分解为 k 个规模较小的子问题,这些子
问题相互独立且与原问题相同。递归的解这些子问题,然后将各子问题的解合并到原问题
的解。
在递归算法中,原问题和子问题的区别关键在于尺寸的不同,实际上解决的是同样的
问题,对于分解了的子问题分别求解,也可以在此分割,如此递归下去。最后,自底向上
逐步求出原问题的解。
五、实验器材(设备、元器件)
硬件环境:i5-2450M 双核处理器,2.5GHz,NVIDIA GT630M 独立显卡芯片,
1GB 独立显存,2GB DDR3 内存,500GB 硬盘空间
软件环境:Windows 7 操作系统及以上,Microsoft Visual Studio 2010
六、实验步骤:
(一) 给定一个顺序表,编写一个求出其最大值和最小值的分治算法。
编写实验源代码如下:
/*
给定一个顺序表编写一个求出其最大值和最小值的分治算法
*/
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define Len 1000000
#define MIN(a,b)((a)>(b)?(b):(a))
#define MAX(a,b)((a)>(b)?(a):(b))
int a[Len] , n ;
int GetMin(int l,int r){
if (l==r) return a[l] ;
int mid = (l+r)>>1 ;
return MIN(GetMin(l,mid) , GetMin(mid+1,r)) ;
}
int GetMax(int l,int r){
if (l==r) return a[l] ;
int mid = (l+r)>>1 ;
return MAX(GetMax(l,mid) , GetMax(mid+1,r)) ;
}
int main()
{
int i ;
printf("请输入您顺序表中元素的个数:");
scanf("%d",&n);
printf("请依次输入您顺序表中的元素:");
for (i = 0 ; i < n ; i++)
scanf("%d",&a[i]);
printf("MinValue = %d\n",GetMin(0,n-1)) ;
printf("MaxValue = %d\n",GetMax(0,n-1)) ;
system("pause");
}
运行结果如下:
我们可以多次运行程序,更改我们的输入,来检查程序的正确性。
(二) 二分法求方程近似解:求方程 f(x) = x^3 + x^2 - 1 = 0 在[0,1]上的近似
解,精确度为 0.01。
实验源程序如下:
/*
二分法求方程近¨似解求方程f(x) = x^3 + x^2 - 1 = 0在[0,1]上的近似解精确度为
电子科技大学计算机学院实验中心
0.01。
*/
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
double function(double x){
return x*x*x + x*x - 1 ;
}
int main()
{
double l = 0 , r = 1.0 , mid ;
while (r-l>0.01){
mid = (r+l)/2 ;
if (function(mid)>=0)
r = mid ;
else
l = mid ;
}
double ans = r ;
printf("%.2f\n",ans);
system("pause");
}
运行结果如下:
剩余19页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ### 1、项目介绍 本项目Scrapy进行数据爬取,并使用Django框架+PyEcharts实现可视化大屏 效果如下:
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- python烟花代码.rar
- 实验目的: 1.构建基于verilog语言的组合逻辑电路和时序逻辑电路; 2.掌握verilog语言的电路设计技巧 3.完成如
- 扩展卡尔曼滤波matlab仿真
- 3_base.apk.1
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功