计算机算法设计与分析-贪心算法
- 格式:ppt
- 大小:327.50 KB
- 文档页数:38


第24卷第2期
V01.24 No.2 重庆工商大学学报(自然科学版)
J Chongqing Technol Business Univ.(Nat Sci Ed) 2007年4月
Apt.2007
文章编号:1672—058X(2007)02—0197—03
套利问题的贪心算法设计
查4少芳-d /
(莆田学院电子信息工程系,福建莆田351 100)
摘要:通过对套利问题的具体分析,利用该问题本身具有的一些特性,并结合实际的6种 货币汇率的交叉兑换数据,提出了一个用贪心算法解决该问题的可行方案,同时给出了示例数
据的求解结果;讨论了套利的实际可操作性。
关键词:套利;贪心算法;算法分析
中图分类号:TP 301.6 文献标识码:A
1套利问题描述
套汇(ARBITRAGE)是指利用不同的外汇市场、不同的货币种类、不同的交割时间以及一些货币汇率
和利率上的差异,进行从低价一方买进,高价一方卖出,从中赚取利润的外汇买卖。利息套汇(Interest Ar- bitrage)是套汇的一种形式,简称套利,是利用两个国家外汇市场的利率差异,把短期资金从低利率市场调
到高利率的市场,从而赚取利息收入;或者利用货币的即期汇率与远期汇率的差额小于当时该两种货币
的利率差的时机,进行即期和远期外汇买卖,以牟取利润。按照市场均衡理论,市场中的各种金融商品的
价格并不总是均衡的,价格的不均衡总是存在套利。从理论上来说,一旦市场存在套利机会,套利者通过
构造适当的交易策略,可以获取无限的净利润…。在此主要讨论如何利用两国之间的无风险利率差以及
汇率变动进行无风险套利,具体地说就是如何利用货币汇兑率的差异将一个单位的某种货币转换为大于
一个单位的同种货币。例如,假定1美元可以买0.7英镑,1英镑可以买9.5法郎,l法郎可以买0.16美
元。通过货币兑换,一个商人可以从1美元开始买人,得到0.7×9.5×0.16=1.064美元,从而获得6.4%
算法设计的方法
算法设计是计算机科学和软件工程领域的一项重要任务,它涉及为解决特定问题而创建高效、正确和可行的计算步骤。算法设计方法是一套策略、技巧和方法,帮助程序员和研究人员开发有效的算法。以下是一些常用的算法设计方法:
1. 暴力法(Brute Force):尝试所有可能的解决方案,直到找到最优解。这种方法通常适用于问题规模较小的情况。
2. 贪心法(Greedy Algorithm):每一步都选择局部最优解,期望最终获得全局最优解。贪心法容易实现,但并不总是能够得到最优解。
3. 分治法(Divide and Conquer):将问题分解为若干个较小的子问题,然后递归地解决子问题,并将子问题的解合并为原问题的解。分治法适用于具有自相似结构的问题。
4. 动态规划(Dynamic Programming):将问题分解为重叠子问题,并通过自底向上或自顶向下的方式逐一解决子问题,将已解决子问题的解存储起来,避免重复计算。动态规划适用于具有最优子结构和重叠子问题的问题。
5. 回溯法(Backtracking):通过递归搜索问题的解空间树,根据约束条件剪枝,回溯到上一层尝试其他解。回溯法适用于约束满足性问题,如八皇后问题、图的着色问题等。
6. 分支界限法(Branch and Bound):在搜索解空间树时,通过计算上界和下界来剪枝。分支界限法适用于求解整数规划和组合优化问题。
7. 随机化算法(Randomized Algorithm):通过随机选择解空间中的元素来寻找解决方案。随机化算法的优点是简单、易于实现,但可能需要多次运行才能获得最优解。
8. 近似算法(Approximation Algorithm):在问题的最优解难以找到或计算代价过高时,提供一个接近最优解的解。近似算法可以提供一个性能保证,即解的质量与最优解之间的差距不会超过某个阈值。
1、 设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si 2、 背包问题:给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包 3、 0-1背包问题:给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 4、 给定字符及其相应出现次数,编写程序实现对这些字符的哈夫曼编码,最终打印出这些字符的编码。 5、 给定带权有向图G =(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到所有其它各顶点的最短路长度。这里路的长度是指路上各边权之和。编写程序实现计算从源点到其它各个顶点的最短路径长度。并写出其路径。 6、 设G =(V,E)是无向连通带权图,即一个网络。E中每条边(v,w)的权为c[v][w]。如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。生成树上各边权的总和称为该生成树的耗费。在G的所有生成树中,耗费最小的生成树称为G的最小生成树。给定带权图中定点和边的信息,编写程序画出最小生成树。
动态规划和贪心算法的时间复杂度分析比较两种算法的效率
动态规划和贪心算法是常见的算法设计思想,它们在解决问题时具有高效性和灵活性。但是,两者在时间复杂度上有所不同。本文将对动态规划和贪心算法的时间复杂度进行详细分析,并比较这两种算法的效率。
一、动态规划算法的时间复杂度分析
动态规划是一种通过将问题分解成子问题并保存子问题的解来求解的算法。其时间复杂度主要取决于子问题的数量和每个子问题的求解时间。
1. 子问题数量
动态规划算法通常使用一个二维数组来保存子问题的解,数组的大小与原问题规模相关。假设原问题规模为N,每个子问题的规模为k,则子问题数量为N/k。因此,子问题数量与原问题规模N的关系为O(N/k)。
2. 每个子问题的求解时间
每个子问题的求解时间通常也与子问题的规模相关,假设每个子问题的求解时间为T(k),则整个动态规划算法的时间复杂度可以表示为O(T(k) * N/k)。 综上所述,动态规划算法的时间复杂度可以表示为O(T(k) * N/k),其中T(k)表示每个子问题的求解时间。
二、贪心算法的时间复杂度分析
贪心算法是一种通过选择当前最优的解来求解问题的算法。其时间复杂度主要取决于问题的规模和每个选择的求解时间。
1. 问题规模
对于贪心算法来说,问题的规模通常是不断缩小的,因此可以假设问题规模为N。
2. 每个选择的求解时间
每个选择的求解时间可以假设为O(1)。贪心算法通常是基于问题的局部最优解进行选择,而不需要计算所有可能的选择。因此,每个选择的求解时间可以认为是常数级别的。
综上所述,贪心算法的时间复杂度可以表示为O(N)。
三、动态规划和贪心算法的效率比较
从时间复杂度的分析结果来看,动态规划算法的时间复杂度为O(T(k) * N/k),而贪心算法的时间复杂度为O(N)。可以发现,在问题规模较大时,动态规划算法的时间复杂度更高。
原因在于动态规划算法需要保存所有子问题的解,在解决子问题时需要遍历所有可能的选择,因此时间复杂度较高。而贪心算法则不需要保存所有子问题的解,每次选择的求解时间也为常数级别,因此时间复杂度较低。