贪婪算法在资源分配问题中的应用----彭鹏

合集下载

贪婪算法在高校排课系统中的运用

贪婪算法在高校排课系统中的运用
数 、教 师 人 数 、课 程 门类 都 显 著 增 加 ,这 对 高 校 教 务排 课 工 作 提 出 了更 高 的 要 求 。研 究 开 发 一个
实 用 的 排 课 系 统 具 有 十 分 重要 的现 实 意 义 。
排 课 问题 的 本 质 是 多维 资源 的冲 突 与争 夺 。它 是 一 种 典 型 的组 合 规 划 和 目标 不 确 定 性 调度 问


个 好 的 课 表应 能符 合 学校 的管 理 要 求 ,满 足 所 有 参 与 者 的基 本 要 求 ,尽 可 能 使 绝 大 多 数课
程 的安 排 能够 令 师 生 满 意 。为 了编 排 出满 意 的 课表 ,在 排 课 中必 须 遵 守 以下 基 本 原 则 :( )一个 1 班 级 的 学 生在 同一 时 间只 能 安 排 一 门课 程 ;( )一 位 教 师 在 同一 时 间只 能 安 排 一 门课 程 ;( )一 2 3 间教 室 在 同一 时 问只 能 安 排 一 门课 程 且 教 室 类 型 必 须符 合 该 门课 程 的要 求 ;( )同一 时 问安 排 的 4 课 程 总 数 不 能大 于 所 能 提 供 的教 室 总 数 ;( )每 门课 程 参 加 学 习 的总 人 数 不 应 大 于 所 安 排 教 室 的 5
题 。早 在 2 O世 纪 7 O年 代 , 美 国人 S・ v n等 就 证 明 了排 课 问题 是 一 个 N Ee P完 全 问题 ,其 算 法 的
时 间 复 杂 度 呈 指 数 增 长 。 目前 ,除 了使 用 “ 举 法 ”获 得 近 似 最 优 解 外 ,数 学 上 还 没 有 一 个 通 用 穷
分 析 了基 于优 先 级 的贪 婪 算法 在 高校排 课 系统 中的运 用 。 利用 该 算法 ,既可 以 简化排 课 过程 ,缩短 排 课 所花 费

学习理论中的贪婪算法探讨

学习理论中的贪婪算法探讨

学习理论中的贪婪算法探讨一、引言贪婪算法是一种常见的算法思想,它通过贪心策略,每次选择局部最优解,最终能得到全局最优解。

贪婪算法广泛应用于各个领域,例如数据压缩、图形图像处理、排队论、优化问题等。

本文将学习理论中的贪婪算法进行探讨,包括贪婪算法的原理、应用场景、实现方式及优缺点等。

二、贪婪算法的原理贪婪算法是一种基于局部最优解的算法思想。

它的核心思想是每次选择当前情况下的最优解,然后进行下一步操作,直到得到全局最优解。

具体来说,贪婪算法可以分为以下几个步骤:1. 确定解空间和约束条件。

2. 确定度量标准,以便进行局部最优解的评估。

3. 通过贪心策略选择当前最优解,并对问题进行局部优化。

4. 判断是否得到全局最优解,如果没有则回到步骤3,继续进行贪心策略选择。

三、贪婪算法的应用场景贪婪算法是一种高效的算法思想,广泛应用于各个领域,例如:1. 数据压缩在数据压缩中,贪婪算法可以通过对频率排序,选择编码字母,从而实现数据压缩。

2. 图形图像处理在图形图像处理中,贪婪算法可以通过匹配算法,实现图形图像的匹配与识别。

3. 排队论在排队论中,贪婪算法可以通过选择最短的队列,进行任务分配与处理。

4. 优化问题在优化问题中,贪婪算法可以通过快速求解局部最优解,进而实现全局最优解的求解。

四、贪婪算法的实现方式贪婪算法的实现方式较为灵活,可以根据实际需要进行选择。

通常情况下,贪婪算法的实现方式可以分为以下几类:1. 贪心算法贪心算法是贪婪算法中最常见的实现方式之一。

它通过从问题的局部最优解出发,逐步构建整个问题的最优解。

例如,在任务调度中,可以通过选择最近截止时间的任务,进行调度与处理。

2. 堆排序堆排序是贪婪算法中一种高效的实现方式。

它通过使用堆结构,从中选择最大或最小的元素,并进行排序。

在数据压缩中,堆排序可以通过选择频率最小的元素,进行字母的编码,从而实现数据压缩。

3. 贪心分数背包问题贪心分数背包问题是贪婪算法中一种重要的应用场景。

贪婪算法思想及其应用[5篇模版]

贪婪算法思想及其应用[5篇模版]

贪婪算法思想及其应用[5篇模版]第一篇:贪婪算法思想及其应用贪婪算法思想及其应用摘要:贪婪算法也称作贪心算法,它没有固定的算法框架,算法设计的关键是贪婪策略的选择,并且所选的贪婪策略要具有无后向性。

关键词:贪婪策略,无后向性,最优正文:一.贪婪算法的定义:贪婪算法又叫登山法,它的根本思想是逐步到达山顶,即逐步获得最优解,是解决最优化问题时的一种简单但适用范围有限的策略。

二.贪婪算法思想:贪婪算法采用逐步构造最优解的方法,即在每个阶段,都选择一个看上去最优的策略(在一定的标准下)。

策略一旦选择就不可再更改,贪婪决策的依据称为贪婪准则,也就是从问题的某一个初始解出发并逐步逼近给定的目标,以尽可能快的要求得到更好的解。

而且它在设计时没有固定的框架,关键在于贪婪策略的选择。

但要注意的是选择的贪婪策略要具有无后向性,即某阶段状态一旦确定下来后,不受这个状态以后的决策的影响,也就是说某状态以后的过程不会影响以前的状态,只与当前状态有关。

三.贪婪算法的优缺点:贪婪算法的优点在于在求解问题的每一步它都是选择最优解,这样算法就容易实现也易于理解,同时也提高了效率并节省了时间。

然而贪婪算法的缺点也是不容忽视的,由于它采取逐步获得最优解的方法而不从整体最优上加以考虑,它所做出的仅是在某种意义上的局部最优解。

因此贪婪算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题它都能得出整体最优解或者是整体最优解的近似解。

四.实例参考:下面就列举用贪婪算法成功得出问题最优解的例子:例:一个小孩拿着一美元去商店买糖果,花了33美分,售货员需要找回67美分给小孩,而美分的面值有25,10,5,1这几种。

问题是售货员找个小孩的钱币的个数应是最少的,但同时要满足67美分这个条件。

分析:选择硬币时所采用的贪婪准则如下:每一次都选择面值最大的货币来凑足要找的零钱总数,但前提是不能超出要找的67美分。

解:我们用贪婪算法来处理这个问题,首先我们肯定会选择面值为25的货币,这样的货币我们需要两枚,然后我们依据贪婪准则选择面值为10的货币,这样的货币我们需要一枚,接着继续选择面值为5的货币一枚和面值为1的货币两枚。

贪婪算法思想及其应用

贪婪算法思想及其应用

贪婪算法思想及其应用贪婪算法(Greedy algorithm)是一种常用的算法思想,它根据当前情况做出局部最优的选择,从而希望获得全局最优的解决方案。

贪婪算法通常用于求解优化问题,其特点是简单、高效,并且不需要进行完全的。

贪婪算法的基本思想是通过每一步的局部最优解来建立起全局最优解。

每一步做出的选择依赖于前一步的选择结果,所以贪婪算法通常具有递归的特点。

贪婪算法的目的是使每一步的选择都是最有利的,从而达到整体的最优解。

贪婪算法的应用广泛,下面分别介绍几个常见的应用场景。

1.找零钱问题:假设有一定面值的硬币,要找零钱给客户。

贪婪算法可以选择最大面值的硬币作为找零的一部分,然后继续选择最大面值的硬币,直到完成找零。

这样可以保证找零的硬币数量最少。

2.背包问题:给定一些物品和一个背包,每个物品有一定的重量和价值。

目标是找到一个物品组合,使得其总重量不超过背包容量,但总价值最大。

贪婪算法可以根据每个物品的单位价值(即价值与重量的比值)来选择物品放入背包,以获得最大的总价值。

3.最小生成树问题:给定一个带权无向图,要找到一个包含所有顶点的子图,且该子图的边权重之和最小。

贪婪算法可以从一个顶点开始,每次选择权重最小的边连接到已经选择的顶点集合中的顶点,直到所有顶点都被包含在选择的子图中。

4.哈夫曼编码:哈夫曼编码是一种最优前缀编码方法,用于将字符编码为二进制序列。

贪婪算法可用于构建哈夫曼树,根据字符的出现频率构建最小的二叉树,然后将字符编码为哈夫曼树的路径。

以上只是贪婪算法的一些常见应用,实际上贪婪算法还可以应用于很多其他领域,如任务调度、排序、图着色等。

贪婪算法的优点是简单、高效,但也有一定的局限性,它不能保证一定能得到全局最优解。

因此,在应用贪婪算法时需要根据具体情况来评估其适用性,并结合其他算法和方法来求解问题。

《算法图解》第八章_贪婪算法_集合覆盖问题

《算法图解》第八章_贪婪算法_集合覆盖问题

《算法图解》第⼋章_贪婪算法_集合覆盖问题⼀、贪婪算法介绍算法基本思路:从问题的某⼀个初始解出发⼀步⼀步地进⾏,根据某个优化测度,每⼀步都要确保能获得局部最优解。

每⼀步只考虑⼀个数据,他的选取应该满⾜局部优化的条件。

若下⼀个数据和部分最优解连在⼀起不再是可⾏解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停⽌。

(摘⾃)简单直接的描述,就是指每步都选择局部最优解,最终得到的就是全局最优解。

⼆、引⼊:集合覆盖问题假设你办了个⼴播节⽬,要让全美个州的听众都收听得到,为此,你需要决定在哪些⼴播台播出。

在每个⼴播台播出都需要⽀付费⽤,因此你试图在尽可能少的⼴播台播出。

现有⼴播台名单如下:每个⼴播台都覆盖特定的区域,不同⼴播台的覆盖区域可能重叠。

如何找出覆盖全美个州的最⼩⼴播台合集呢?下⾯是解决步骤:1. 列出每个可能的⼴播台集合,这被称为幂集(power set)。

可能的⼦集有2n个。

2. 在这些集合中,选出覆盖全美50个州的最⼩集合。

那么问题来了,计算每个可能的⼴播台⼦集需要很长的时间。

我们可以尝试使⽤贪婪算法。

三、算法实现算法步骤1. 选出这样⼀个⼴播台,即它覆盖了最多未覆盖的州。

即便这个⼴播台覆盖了⼀些已覆盖的州(就是重复覆盖),也没有关系。

2. 重复第⼀步,直到覆盖了所有的州。

这是⼀种近邻算法(approximation algorithm)。

在获得精确解需要的时间太长时,可以考虑使⽤近似算法。

判断近似算法优劣的标准如下:速度有多快;得到的近似解与最优解的接近程度。

因此贪婪算法是⼀个不错的选择,它们不仅简单,⽽且通常运⾏速度很快。

在本例中,贪婪算法的运⾏时间为O(n2),其中n为⼴播台数量。

代码如下# 创建⼀个列表,其中包含要覆盖的州states_needed = set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"]) # 传⼊⼀个数组,被转换为集合stations = {}stations["kone"] = set(["id", "nv", "ut"])stations["ktwo"] = set(["wa", "id", "mt"])stations["kthree"] = set(["or", "nv", "ca"])stations["kfour"] = set(["nv", "ut"])stations["kfive"] = set(["ca", "az"])final_stations = set() # 使⽤⼀个集合来存储最终选择的⼴播台while states_needed:best_station = None # 将覆盖了最多的未覆盖州的⼴播台存储进去states_covered = set() # ⼀个集合,包含该⼴播台覆盖的所有未覆盖的州for station, states in stations.items(): # 循环迭代每个⼴播台并确定它是否是最佳的⼴播台covered = states_needed & states # 计算交集if len(covered) > len(states_covered): # 检查该⼴播台的州是否⽐best_station多best_station = station # 如果多,就将best_station设置为当前⼴播台states_covered = coveredstates_needed -= states_covered # 更新states_neededfinal_stations.add(best_station) # 在for循环结束后将best_station添加到最终的⼴播台列表中print(final_stations) # 打印final_stations四、⼩结贪婪算法寻找局部最优解,企图以这种⽅式获得全局最优解。

云计算中融入贪心策略的调度算法研究

云计算中融入贪心策略的调度算法研究

云计算中融入贪心策略的调度算法研究云计算是一种新兴的计算模式,已经成为当今计算领域的热门话题。

云计算具有高效、灵活、安全、可靠等优点,深受企业和个人用户的青睐,已成为大数据、人工智能等领域的核心技术。

然而,在云计算应用中,调度算法是一个非常关键的问题。

如何优化云计算资源的利用效率,提高云计算平台的性能,是云计算研究的重要课题之一。

云计算中的融入贪心策略的调度算法,是近年来研究的热点之一。

贪心算法是一种基于贪心思想的算法,它总是做出当前看来最优的选择。

云计算中的调度问题本质上是资源分配问题,需要合理的分配计算、存储、网络等资源,以最大化利润或最小化成本。

基于贪心思想的调度算法,可以有效地解决云计算中的任务分配和资源分配问题,提高资源利用率和平台性能。

在云计算中,任务分配和资源分配是两个重要的问题。

任务分配就是将用户提交的任务分配到云计算平台中的多个计算节点中执行。

在这个过程中,需要考虑到不同任务的数据量、执行时间、优先级等因素,以及计算资源的状态、类型、数量等。

在分配任务时,采用贪心算法可以使分配过程更加高效简单。

例如,可以采用最短作业优先(SJF)算法,对任务进行排序,并按照顺序分配资源。

这样可以有效地减少系统开销和能量消耗,提高计算平台的效率。

资源分配是指将计算、存储、网络等资源合理地分配到不同的计算节点中,以满足用户需求,提高平台性能。

在资源分配过程中,需要考虑到不同任务的资源要求、任务的优先级以及节点间的带宽、延迟等因素。

采用贪心算法可以使资源分配更加高效和灵活。

例如,可以采用最大利用率优先(MUP)算法,对节点进行排序,并按照顺序分配资源。

这样可以最大化利用计算资源,提高系统的整体性能。

需要注意的是,贪心算法具有局限性。

在实际应用中,贪心算法的效果很大程度上取决于问题的特点和算法的实现。

对于某些问题而言,贪心算法可能不是最优解,甚至可能会导致局部最优解而无法到达全局最优解。

因此,在使用贪心算法进行任务分配和资源分配时,需要结合实际情况,适当地调整算法参数和策略,使得算法更加可靠和稳健。

强化学习算法中的探索-利用平衡方法详解(十)

强化学习算法中的探索-利用平衡方法详解(十)

强化学习算法中的探索-利用平衡方法详解引言强化学习是一种通过与环境交互来学习最优行为策略的机器学习方法。

在强化学习中,探索和利用是一个重要的问题。

探索是指在未知状态下尝试新策略,以获取更多的环境信息;而利用则是指在已知状态下选择已知的最优策略以获取最大奖励。

在强化学习中,探索-利用平衡方法是一种重要的策略,它可以有效地平衡探索和利用的权衡关系。

本文将详细介绍强化学习算法中的探索-利用平衡方法。

ε-贪心算法ε-贪心算法是一种简单而有效的探索-利用平衡方法。

在ε-贪心算法中,有一个探索概率ε,当随机数小于ε时,智能体会进行随机探索;当随机数大于ε时,智能体会选择已知的最优策略进行利用。

这种方法可以在一定程度上增加探索,同时又保证了对已知最优策略的利用。

ε-贪心算法是一种易于实现和理解的探索-利用平衡方法,因此在实际应用中得到了广泛的应用。

Softmax算法Softmax算法是另一种常用的探索-利用平衡方法。

在Softmax算法中,智能体会根据当前状态的动作值选择动作,而动作值的大小是由softmax函数计算得到的。

softmax函数可以使得动作值较大的动作被选择的概率增加,从而增加对动作值较大的动作的利用。

但是由于softmax函数的性质,它也会使得动作值较小的动作有一定的概率被选择,从而增加了探索的概率。

因此,Softmax算法可以有效地平衡探索和利用的权衡关系。

Upper Confidence Bound (UCB)算法UCB算法是一种基于置信上界的探索-利用平衡方法。

在UCB算法中,智能体会根据动作值的置信上界来选择动作。

置信上界一般是根据动作值的均值和置信区间计算得到的,它可以使得动作值的不确定性较大的动作有一定的概率被选择,从而增加了探索的概率。

与此同时,置信上界也可以使得动作值较大的动作被选择的概率增加,从而增加了对动作值较大的动作的利用。

UCB算法在理论上具有较好的性能保证,因此在实际应用中也得到了广泛的应用。

贪婪取走启发式算法

贪婪取走启发式算法

贪婪取走启发式算法贪婪取走启发式算法是一种用于解决优化问题的常见算法。

本文将详细介绍贪婪取走启发式算法的原理、应用场景、步骤和优缺点,并通过举例说明其实际应用。

在解决实际问题时,往往需要在众多可能的解决方案中选择最优解。

而贪婪取走启发式算法(Greedy Takeaway Heuristic Algorithm)是一种被广泛使用的算法,其通过贪婪策略,逐步选择当前最优解,以求得近似最优解。

贪婪取走启发式算法基于贪心策略,在每一步选择中,它都选择当前状态下局部最优解,然后转移到下一个状态,重复这个过程直到达到终止条件。

与其他复杂的优化算法相比,贪婪取走启发式算法的计算复杂度较低,适用于大规模问题。

## 贪婪取走启发式算法的应用场景贪婪取走启发式算法可以应用于各种优化问题,包括但不限于以下几个领域:1. 排序问题:在一个有序序列中,通过贪心策略选择合适的位置来插入一个新的元素,使得整个序列仍然保持有序。

2. 背包问题:给定一定容量的背包和一系列具有重量和价值的物品,算法需要在不超过背包容量的前提下,选择物品组合,使得总价值最大化。

3. 网络覆盖问题:在给定的区域内选择最少的节点,以保证整个区域内的每个点都被覆盖到。

4. 路径规划问题:在给定的地图中,算法通过选择当前最短路径的节点来找到最优路径。

贪婪取走启发式算法的步骤如下:1. 确定问题的数学建模,定义问题的目标函数和约束条件。

2. 初始化状态,并设置终止条件。

3. 对当前状态进行评估,确定可能的选择。

4. 根据贪心策略,选择当前最优的解。

5. 判断是否满足终止条件,如果满足则结束算法,否则回到第3步。

## 贪婪取走启发式算法的优缺点贪婪取走启发式算法具有以下优点:1. 计算复杂度较低,运行速度快。

2. 算法实现较为简单,易于理解与调试。

3. 适用于大规模问题,并且结果通常接近最优解。

然而,贪婪取走启发式算法也存在一些缺点:1. 由于每一步只考虑局部最优解,可能无法达到全局最优解。

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

贪婪算法在资源分配问题中的应用彭鹏贵州财经学院研究生摘要:贪婪算法的典型应用是解决优化问题,这类算法的策略是只顾眼前,而不考虑以后的影响,它的算法简单容易设计实现,因此在许多实际问题中得到广泛的应用,但是它也存在许多的问题,巧妙的使用贪婪思想,将其融入到资源分配问题中解题中,资源分配问题便焕发出了新的光彩。

本文首先对贪婪算法的基本概念做了介绍,然后通过实例论述了贪婪算法在资源分配问题中的应用。

关键字:贪婪算法研究应用资源分配问题第一章贪婪算法的概念1.1什么是贪婪算法贪婪算法是一种对某些求最优解问题的更简单、更迅速的设计技术。

用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题, 通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯。

贪婪算法是一种改进了的分级处理方法。

其核心是根据题意选取一种量度标准。

然后将这多个输入排成这种量度标准所要求的顺序,按这种顺序一次输入一个量。

如果这个输入和当前已构成在这种量度意义下的部分最佳解加在一起不能产生一个可行解,则不把此输入加到这部分解中。

这种能够得到某种量度意义下最优解的分级处理方法称为贪婪算法。

对于一个给定的问题,往往可能有好几种量度标准。

初看起来,这些量度标准似乎都是可取的,但实际上,用其中的大多数量度标准作贪婪处理所得到该量度意义下的最优解并不是问题的最优解,而是次优解。

因此,选择能产生问题最优解的最优量度标准是使用贪婪算法的核心。

一般情况下,要选出最优量度标准并不是一件容易的事,但对某问题能选择出最优量度标准后,用贪婪算法求解则特别有效。

最优解可以通过一系列局部最优的选择即贪婪选择来达到,根据当前状态做出在当前看来是最好的选择,即局部最优解选择,然后再去解做出这个选择后产生的相应的子问题。

每做一次贪婪选择就将所求问题简化为一个规模更小的子问题,最终可得到问题的一个整体最优解。

2.2 贪婪算法的特征贪婪算法及贪婪算法可解决的问题通常大部分都有如下的特性:(1)有一个以最优方式来解决的问题。

为了构造问题的解决方案,有一个候选的对象的集合:比如不同面值的硬币。

(2)随着算法的进行,将积累起其它两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但被丢弃的候选对象。

(3)有一个函数来检查一个候选对象的集合是否提供了问题的解答。

该函数不考虑此时的解决方法是否最优。

(4)还有一个函数检查是否一个候选对象的集合是可行的,也即是否可能往该集合上添加更多的候选对象以获得一个解。

和上一个函数一样,此时不考虑解决方法的最优性。

(5)选择函数可以指出哪一个剩余的候选对象最有希望构成问题的解。

(6)最后,目标函数给出解的值。

为了解决问题,需要寻找一个构成解的候选对象集合,它可以优化目标函数,贪婪算法一步一步的进行。

起初,算法选出的候选对象的集合为空。

接下来的每一步中,根据选择函数,算法从剩余候选对象中选出最有希望构成解的对象。

如果集合中加上该对象后不可行,那么该对象就被丢弃并不再考虑;否则就加到集合里。

每一次都扩充集合,并检查该集合是否构成解。

如果贪婪算法正确工作,那么找到的第一个解通常是最优的。

2.3运用贪婪算法的思想选择具有最早结束时间的相容活动加入,使剩余的可安排时间最大,以安排尽可能多的活动。

也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。

贪婪算法的一般解题步骤:设计中一类非常重要的问题。

每一个最优化问题都包含一组约束条件和一个优化函数,满足约束条件的问题求解方案称为问题的可行解,使优化函数取得最优值的可行解称为问题的最优解。

贪婪算法是解决最优化问题的一种基本方法。

它采用逐步构造最优解的思想,在问题求解的每一个阶段,都做出一个在一定标准下看上去最优的决策;决策一旦作出,就不可再更改。

制定决策的依据称为贪婪准则。

使用贪婪算法解决问题,通常需要做好以下几个方面的工作:1、明确问题的求解目标。

2、分析问题所包含的约束条件。

3、建立优化函数。

优化函数通常可以通过综合分析问题的求解目标及约束条件归纳出来。

4、制定贪婪准则。

清楚问题的求解目标、所包含的约束条件及优化函数之后,就可以着手制定一个可行的贪婪准则。

贪婪准则的制定是用贪婪算法解决最优化问题的关键,它关系到问题能否得到成功解决及解决质量的高低。

下文就该思想如何解决贪婪算法在资源分配问题中的应用做了举例说明。

第二章贪婪算法在资源分配问题中的应用下面介绍争用2个甚至多个资源时的安排:现有m个资源,如m个多媒体教室。

有n个课程的集合E={1,2,……,n},其中每个课程都要求使用一个资源,而在同一时间内只允许一个课程使用一个资源。

每个课程使用某一资源时,为提高利用率,按照资源大小的非递减顺序安排(如果资源大小一样,可省去这个排序工作)。

每个课程i都有一个要求使用资源的起始时间si和一个结束时间fi,且si<fi。

如果选择了课程i,则它在半开时间区间[si,fi]内占用资源。

若区间[si,fi]与区间[sj,fj]不相交,则称课程i与课程j是相容的。

也就是说,当si>=fj或sj>=fi时,课程i与课程j相容。

设A是所要求安排的课程的m个最大相容课程子集,即用A[i][j]存储对最小教室所选择的课程,A[i][m]存储对最大教室所选择的课程。

若课程i在集合A[i][x]中(x=1,2,……,m),则A[i][x]必为true(存入其课程序号)。

变量J(x)用以记录最近一次加入到A[i][x]中的课程。

已知的各课程的起始时间和结束时存储于数组s和f中,且按结束时间的非减序:f1<=f2<=……<=fn排列。

如果未排序,则先按此用O(nlogn)时间排序。

其贪婪策略是:先向A[i][1]中安排,安排不下时,安排在A[i][2]中,⋯⋯直到安排在A[i][m],仍安排不下,只能另做处理。

程序如下:Procedure GREEDY-COURSE-SELECTOR1(E,s,f,A)beginn←length(E);A←d;A[1][1]←1; //A中有m个集合,分别用以存放课/ /程安排For x←0 to m-1 doJ[x]←x; //用以存放最近一次加入到A[J][x]/ /中的课程序号.For i←2 to n doIf s[i]>=f[J[1]] thenBeginA[i][1]←I;J[1]←iEndElseFor k←0 to m-1 doIf s[i]>=f[J[k]] thenBeginA[i][k]←I;J[k]←iEnd;End;按照上述贪婪策略,将m个资源按照利用率非递减排序,在年n个课程按结束时间非递减排序后,运用贪婪算法依次把相容课程加入到m个相容课程集合中,使该问题在相容课程安排最多时利用率也最大。

在n个课程和m个资源事先排队的情况下,用贪婪策略解此问题可以获得最佳解。

其计算复杂度至多是O(m*n),在众多的算法中执行时间最短。

第三章总结本文通过课程安排的例题简单的介绍了贪心思想在资源分配中的简单应用。

贪心思想奇妙之处在于贪婪算法可将一个问题的解决方案视为一系列决策的结果,提高了效率。

在贪婪算法中,每用一次贪婪准则便做出一个不可撤回的决策,个最优子序列。

当一个问题具有最优子结构时,我们会想到存在着更简单、有效的方法,只要我们总是做出当前看来最好的选择就可以了。

贪婪算法所作的选择可以依赖于以往所作过的选择,但决不依赖于将来的选择,也不依赖于子问题的解,这使得算法在编码和执行的过程中都有着一定的速度优势。

如果一个问题可以同时用几种方法解决,贪婪算法应该是最好的选择之一。

但是贪婪算法并不是对所有的问题都能得到整体最优解或最理想的近似解,与回溯法等比较,它的适用区域相对狭窄许多,因此正确地判断它的应用时机十分重要,贪婪算法的优点结合其他算法的应用将是以后研究的方向。

参考文献[1] 王晓东,计算机算法设计与分析[M] . 电子工业出版社.2001[2] 余祥宣,崔国化,邹海明,计算机算法基础[M] . 华中科技大学出版社. 1998[3] 徐宗本,张讲社,郑亚林. 计算智能中的仿生学:理论与算法. 北京:科学出版社,2003[4] 苏德富、钟诚.计算机算法设计与分析.北京:电子工业出版社,2001[5] 宋文,吴晟,杜亚军.算法设计与分析.重庆:重庆大学出版社,2001[6] 谭浩强C程序设计(第二版).北京:清华大学出版社,1999.12.[7] 周向臣,柯熙政.无线电接入网的体系结构研究.光通信技术,2005,6.[8]刘玉娟,王相海.0/1背包问题的两种扩展形式及其解法[J],计算机应用研究,2006,1.[9]钱能.c++程序设计教程[M],北京:清华大学出版社[10]王晓东.算法分析与设计[M],北京:清华大学出版社。

相关文档
最新文档