套汇问题算法研究

引言

引言的作用就是引出为什么要写这篇文章,主下几个方面:

(1)局部问题解决不了,因为当你一直选取汇率大的或者汇率小的转都不一定能转成最优。因此,这是涉及枚举所有情况的问题。即每次选择会和之前选择的情况相关,因此不能以一种固定的策略进行

(2)考虑通项,从目标值而言,很明显是第i种货币转换成第j种货币的最优情况

(3)套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币

      数学模型

 假设已知n种货币a,b,c,...h,其之间的兑换率构成矩阵如下; R=(r)n*n,r[i][j]表示一个货币单位c可以买到的金币c的单位数,且r=1(i=1,2,3..,n)套汇问题就是找出一个货币序列a,b,...,h;使得

       r[1][2]r[2][3]..>1

   对等式俩边取对数,得到:

       Inr[1][2]+Inr[2][3]+...+Inr[k][1]>0

   假设有n个顶点的有向图,顶点由货币a,b,

  1. ...,h,组成,顶点之间的权值为w,令

      W[i][j]=—Inr(i j=1,2,...,n)

     W[1][2]+W[2][3]...+W[k][1]<0

因此套汇问题就变成找出一个负回路a,b,..h,即使w[1][2]+w[2][3]+...+w[k][1]<0

1 算法设计Floyd算法)

    1.  算法描述

这整一道题下来,首先最先的思路就是希望构造一个图,然后通过深度搜索DFS,将每一条边的权值都乘起来,最后再乘回终点与起点的权值,若大于1,则说明是一个正环,并且套汇成功,直接输出YES。

深度搜索的方法固然可以得出答案,但是若是点很多,遍历的顺序无法确定。举个例子,假设只存在一个正环,若遍历的点很多,可能要耗费很长的时间,最后遍历到那个环,最后输出yes,最后同样能得出正确答案,但是并不是最佳解法。

Floyd算法,这道题就变得简单起来,只要判断最后的对角线是否

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值