logo

您所在位置网站首页 > 海量文档  > 专业论文 > 文学论文

有向直线K中值问题.ppt 13页

本文档一共被下载: ,您可全文免费在线阅读后下载本文档。

  • 支付并下载
  • 收藏该文档
  • 百度一下本文档
  • 修改文档简介
全屏预览

下载提示

1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
特别说明: 下载前务必先预览,自己验证一下是不是你要下载的文档。
  • 上传作者 5201314118(上传创作收益人)
  • 发布时间:2018-03-16
  • 需要金币100(10金币=人民币1元)
  • 浏览人气
  • 下载次数
  • 收藏次数
  • 文件大小:168.5 KB
下载过该文档的会员
有向直线K中值问题
你可能关注的文档:
有向直线K中值问题          问题描述:   给定一条有向直线L以及L 上的n+1 个点x0<x1<x2<… <xn。有向直线L 上的每个点xi都有一个权 w(xi);每条有向边 (xi,xi-1),也都有一个非负边长d(xi,xi-1)。有向直线L 上的每个点xi 可以看作客户,其服务需求量为w(xi) 。每条边(xi,xi-1) 的边长 , d(xi,xi-1) 可以看作运输费用。如果在点xi 处未设置服务机构,则将点xi 处的服务需求沿有向边转移到点xj处服务机构需付出的服务转移费用为w(xi)*d(xi,xj) 。在点0 x 处已设置了服务机构,现在要在直线L上增设k处服务机构,使得整体服务转移费用最小。 编程任务    对于给定的有向直线L,编程计算在直线L 上增设k处服务机构的最小服务转移费用。 数据输入 由文件input.txt给出输入数据。第1 行有1个正整数n,表示有向直线L 上除了点x0 外还有n 个点x0 <x1 <… <xn.接下来的n行中,每行有2个整数.第i+1 行的2个整数分别表示w(Xn-i-1) 和d( Xn-i-1,Xn-i-2)。 结果输出 将计算的最小服务转移费用输出到文件output.txt。 例子: input.txt          output.txt  9 2             2 6           1 2  2 1  3 3  1 1  3 2  1 6  2 1  1 2  1 1 问题分析 本题是求解最优解的问题,考虑用动态规划算法。 在直线L上增设k处服务机构,设xt为我们增设的第一个服务机构,则问题转化为x0到x(t-1)的转移服务费用之和加上xt后增设k-1处服务机构的最小费用.我们计算x0到xn增设k个(设置k+1个点)是最优的,必须xt到xn增设k-1(设置k个点)也是最优的。 我们引入数组c[i][j]表示最小服务转移费用,其中i表示直线L上点xi处已设置了1个服务机构,j表示在xi后设置j处服务机构.我们的问题转化为求c[0][k+1]。 证明最优子结构性质 设xt是我们增设的第一个服务站,总的服务费用等于X1...Xt-1到X0的服务费W1用加上后面一段Xt...Xn增设k个服务站的费用W2,要使总的服务费用最优,则Xt...Xn增设k个服务站的费用W2是最优的.证明使用反正法,如果这后面一段服务费用W2不是最优的,假设存在某种增设方法得到后一段服务费用W2‘<W2,则W2‘ +W1 <W2 +W1 ,所以得到原来的设置方法不是最优解,这与题设矛盾,所以后面一段必须是最优的. 解题过程 计算出所有两点之间的距离d(i,j),并计算出之间的服务转移费m(i,j). 设L上有n个点,在点xi处已设置了服务机构,现在要Xi后设置j个服务机构(包括xi那个),使得整体服务转移费用最小。 0 i+j=n+1 c[i][j]= min{ c[t][j-1]+p } i<t<n+1; n ∑ m[t][i] j=1 t=i+1 n 其中p为x(t-1)到xi站的转移费用 p= ∑ m[t][i] t=i+1 根据递推公式,容易求出c[0][k+1]的递推式。 核心代码 void Distance(int n,int *w,int **d,int **m) { for(int i=0;i<=n;i++) { d[i][i]=0; m[i][i]=0; } for(i=0;i<n;i++) for(int j=i+1;j<=n;j++) { d[j][i]=d[j-1][i]+d[j][j-1]; m[j][i]=w[j]*d[j][i];} } int c(int i,int n,int k,int *w,int **d,int **m) { int s=0,t=0,j; if(k==1) { for(j=n;j>i;j--) t+=m[j][i]; return t;} if(i==n-k+1) return 0; for(j=n-k+1;j>i;j--)

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片

“原创力文档”前称为“文档投稿赚钱网”,本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有【成交的100%(原创)】。原创力文档是网络服务平台方,若您的权利被侵害,侵权客服QQ:3005833200 电话:19940600175 欢迎举报,上传者QQ群:784321556