社区
C++ 语言
帖子详情
向各位高手求一个最优化问题的算法!
zhoupu2004
2006-11-02 09:57:39
遇到一个问题,很俗,但是tmd仔细想了下也不太好解决,特来求助!问题如下:
有m个任务,每个任务的时间花费为ti,但ti是个随机数。现有n台机器,问如何调度才能使得完成所有任务的时间最短?
我可以找到一个算法解决该问题,但是不能保证是全局最优的。
算法如下:
把所有的任务按时间权重排序,并依次把各权重最大的任务放入最空闲的机器,这样能获得一个局部最优的,但是肯定不是全局最优的!不知道这样的问题有没有全局最优解?
各位老大给点建议吧!
...全文
460
18
打赏
收藏
向各位高手求一个最优化问题的算法!
遇到一个问题,很俗,但是tmd仔细想了下也不太好解决,特来求助!问题如下: 有m个任务,每个任务的时间花费为ti,但ti是个随机数。现有n台机器,问如何调度才能使得完成所有任务的时间最短? 我可以找到一个算法解决该问题,但是不能保证是全局最优的。 算法如下: 把所有的任务按时间权重排序,并依次把各权重最大的任务放入最空闲的机器,这样能获得一个局部最优的,但是肯定不是全局最优的!不知道这样的问题有没有全局最优解? 各位老大给点建议吧!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhoupu2004
2006-11-03
打赏
举报
回复
额的神啊。楼上的兄弟能不能具体点啊?
OOPhaisky
2006-11-03
打赏
举报
回复
任务调度问题,这是典型的NP问题,要用启发式算法或者智能算法求解。
zhoupu2004
2006-11-03
打赏
举报
回复
我重新描述一下问题:
有n台机器,m个任务,每个任务的花费时间是ti,一个调度算法,使得完成所有任务的时间最短。
我在想是否可以把所有的任务分配方式的排列组合都算出来,然后取其中最小的一个就行了?
maxlcl
2006-11-03
打赏
举报
回复
NP类问题!
zhoupu2004
2006-11-02
打赏
举报
回复
呵呵。我在水木那边也问了,那边的结论是NP难,只要能解决,就是图灵奖+费尔茨奖。
pcboyxhy
2006-11-02
打赏
举报
回复
http://algorithm.diy.myrice.com/problems/problem_set/hpc/problem.htm
就是这个了
把这个题改简单一点就是lz的题了
zhoupu2004
2006-11-02
打赏
举报
回复
有兄弟指出:可以在多项式时间内归约到装箱问题。装箱问题是NP完全的。
但是他没有具体证明。不知道那位兄弟能指导一下!
pcboyxhy
2006-11-02
打赏
举报
回复
记错了
是Winter Camp 2001的一道练习题
名字叫HPC
zhoupu2004
2006-11-02
打赏
举报
回复
各位老大,麻烦拿出点兄弟看的懂,能理解的东西来吧!
pcboyxhy
2006-11-02
打赏
举报
回复
记得CTSC的一道类似的题
每个处理节点的能力是不对称的
处理a类任务之后处理b类任务还需要调整时间
这么复杂的模型都被牛人瞬间做出来了
三层动态规划嵌套
这都能想的出来
飞哥
2006-11-02
打赏
举报
回复
、动态规划的适用条件
任何思想方法都有一定的局限性,超出了特定条件,它就失去了作用。同样,动态规划也并不是万能的。适用动态规划的问题必须满足最优化原理和无后效性。
(1)最优化原理(最优子结构性质)
最优化原理可这样阐述:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。
图2
例如图2中,若路线I和J是A到C的最优路径,则根据最优化原理,路线J必是从B到C的最优路线。这可用反证法证明:假设有另一路径J’是B到C的最优路径,则A到C的路线取I和J’比I和J更优,矛盾。从而证明J’必是B到C的最优路径。
最优化原理是动态规划的基础,任何问题,如果失去了最优化原理的支持,就不可能用动态规划方法计算。根据最优化原理导出的动态规划基本方程是解决一切动态规划问题的基本方法。
(2)无后向性
将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性。
(3)子问题的重叠性
动态规划算法的关键在于解决冗余,这是动态规划算法的根本目的。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其它的算法。选择动态规划算法是因为动态规划算法在空间上可以承受,而搜索算法在时间上却无法承受,所以我们舍空间而取时间。
所以,能够用动态规划解决的问题还有一个显著特征:子问题的重叠性。这个性质并不是动态规划适用的必要条件,但是如果该性质无法满足,动态规划算法同其他算法相比就不具备优势。
2、动态规划的基本思想
前文主要介绍了动态规划的一些理论依据,我们将前文所说的具有明显的阶段划分和状态转移方程的动态规划称为标准动态规划,这种标准动态规划是在研究多阶段决策问题时推导出来的,具有严格的数学形式,适合用于理论上的分析。在实际应用中,许多问题的阶段划分并不明显,这时如果刻意地划分阶段法反而麻烦。一般来说,只要该问题可以划分成规模更小的子问题,并且原问题的最优解中包含了子问题的最优解(即满足最优子化原理),则可以考虑用动态规划解决。
动态规划的实质是分治思想和解决冗余,因此,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。
由此可知,动态规划法与分治法和贪心法类似,它们都是将问题实例归纳为更小的、相似的子问题,并通过求解子问题产生一个全局最优解。其中贪心法的当前选择可能要依赖已经作出的所有选择,但不依赖于有待于做出的选择和子问题。因此贪心法自顶向下,一步一步地作出贪心选择;而分治法中的各个子问题是独立的(即不包含公共的子子问题),因此一旦递归地求出各子问题的解后,便可自下而上地将子问题的解合并成问题的解。但不足的是,如果当前选择可能要依赖子问题的解时,则难以通过局部的贪心策略达到全局最优解;如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题。
解决上述问题的办法是利用动态规划。该方法主要应用于最优化问题,这类问题会有多种可能的解,每个解都有一个值,而动态规划找出其中最优(最大或最小)值的解。若存在若干个取最优值的解的话,它只取其中的一个。在求解过程中,该方法也是通过求解局部子问题的解达到全局最优解,但与分治法和贪心法不同的是,动态规划允许这些子问题不独立,(亦即各子问题可包含公共的子子问题)也允许其通过自身子问题的解作出选择,该方法对每一个子问题只解一次,并将结果保存起来,避免每次碰到时都要重复计算。
因此,动态规划法所针对的问题有一个显著的特征,即它所对应的子问题树中的子问题呈现大量的重复。动态规划法的关键就在于,对于重复出现的子问题,只在第一次遇到时加以求解,并把答案保存起来,让以后再遇到时直接引用,不必重新求解。
3、动态规划算法的基本步骤
设计一个标准的动态规划算法,通常可按以下几个步骤进行:
(1)划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。注意这若干个阶段一定要是有序的或者是可排序的(即无后向性),否则问题就无法用动态规划求解。
(2)选择状态:将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。
(3)确定决策并写出状态转移方程:之所以把这两步放在一起,是因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。所以,如果我们确定了决策,状态转移方程也就写出来了。但事实上,我们常常是反过来做,根据相邻两段的各状态之间的关系来确定决策。
(4)写出规划方程(包括边界条件):动态规划的基本方程是规划方程的通用形式化表达式。
一般说来,只要阶段、状态、决策和状态转移确定了,这一步还是比较简单的。动态规划的主要难点在于理论上的设计,一旦设计完成,实现部分就会非常简单。根据动态规划的基本方程可以直接递归计算最优值,但是一般将其改为递推计算,实现的大体上的框架如下:
标准动态规划的基本框架
zhoupu2004
2006-11-02
打赏
举报
回复
有人说这个问题是NP难的,但是我也不知道是不是真是这样。如果是真的,那还解个屁啊?!
tusteducn598
2006-11-02
打赏
举报
回复
上
tusteducn598
2006-11-02
打赏
举报
回复
下
zhoupu2004
2006-11-02
打赏
举报
回复
楼上兄弟误解了,问题的重点采用怎样的策略。
h60009493
2006-11-02
打赏
举报
回复
操作系统级的问题了....
pcboyxhy
2006-11-02
打赏
举报
回复
动态规划
相当典型的动态规划
laiwusheng
2006-11-02
打赏
举报
回复
LZ参考一下此帖:
http://dev.10026.com/special/structure/2005610603_3837094.shtml
JAVA经典
算法
42例.doc
JAVA经典
算法
42例
一款可拒绝被K的优化软件《fhyseo引擎系统》
给各位推荐
一个
免费最牛的网站优化软件,3到10天可到百度相关搜索、下拉框,自然排名稳定飙升绝不被K(各位可以每天观察排名就知道我说的是不是真的)! FHYSEO引擎系统是一款方便、快捷、安全,高效的网络营销工具,快速实现百度下拉搜索框及百度底部相关搜索位置的排名,和各大搜索引擎的自然排名提升!业界形容它是超竞价营销
高手
,搜索引擎(百度)底层营销专家,搜索引擎(百度)营销法宝,它可以让您的公司的产品品牌信息在竞价还没有出来前就可以让潜在客户接纳,无任何点击费用,快速提升品牌曝光率、产品增值、促进交易,节约企业推广成本。 主要功能: 1、搜索引擎下拉框(如:百度搜索用户联想区),让您公司占领最火爆、最抢眼的下拉位置,让客户被动接受产品最强势的营销。 2、刷搜索引擎相关搜索(如:百度底层相关搜索);可以让搜索某
一个
行业关键词时,出现你的项目品牌词,比如:搜索“东风车”时,出现“东风车十堰嘉莉源” 同时也可以搜索某
一个
品牌词时,相关搜索都出现你的品牌词。 3、删除压挤负面信息 删除挤压企业任何不健康的负面信息新闻。fhyseo引擎系统具有国内最强悍的耐挤压能量,它可以让那些恶意制造负面的对手现形,并让对手望风兴叹。 4、搜索引擎自然排名上升,可以让您需要推广的公司产品关键词,迅速排名提升展现在各大搜索引擎上。 我们与众不同的最大优势就是:多个搜索引擎不定时的搜索相关关键词来提升流量,这样让搜索引擎更觉得人性化,认为是纯真人为的搜索关键词到搜素引擎的操作……所以流量是大幅度上升,且绝对不会被K! 本软件最初本来是要积分制的,后来考虑初期大家对本软件的可信度欠佳,所以官方后来经再三考虑,决定于2011年08月01日起对所以先使用本软件的用户全部免费让其刷一组关键词,让您真正的免费享受我们软件强悍的优化效果! 本免费期限为1个月,一月后官方将继续使用积分制跟VIP,但是这一月内注册的用户我们将对其永久性免费使用!!这样也是为了软件的互刷IP流量增加,(一IP内只能挂机
一个
用户,请勿徒劳重复注册!)这样方便了既大家了,也方便了我们自己!望各位多多合作配合!!! 绝对优势: 本系统所刷的相关网站基本可以排除被搜索引擎k掉的现象!(因为本系统所刷
算法
是连本公司技术本身都不可能知道的,完全是人工跟随机2大操作流程!)。 官方下载地址:http://www.fanghuayuan.com/html/90/525.htm QQ2群:145195322
【蓝桥杯Python编程大赛】25道经典
算法
题目解析:涵盖质因数分解、数学运算与字符串处理
内容概要:本文档提供了25道蓝桥杯Python编程大赛的经典题目及其详细解析,涵盖基础
算法
、字符串处理、数学运算等高频考点。每个题目都附有完整的Python代码实现和
算法
分析,确保代码可以直接运行。例如,分解质因数题通过循环除法逐步分解,时间复杂度为O(√n);连续正整数和题通过数学公式推导
求
解;水仙花数统计题遍历三位数并计算各位立方和;石头运输最优分配题暴力枚举所有组合以找到最优解;斐波那契数列优化计算题采用迭代法替代递归,提高效率。 适合人群:对Python编程有一定基础,准备参加蓝桥杯或其他编程竞赛的学生或编程爱好者。 使用场景及目标:①作为竞赛备考资料,帮助参赛者熟悉蓝桥杯的常见题型和解题思路;②作为Python编程练习材料,提升编程技能和
算法
思维能力;③通过实际编程练习,掌握Python语言的基本语法和常用
算法
。 阅读建议:建议读者在学习过程中,不仅要理解代码实现,更要关注每道题目的
算法
思想和优化方法。可以尝试自己编写代码,再与提供的参考答案对比,加深理解和记忆。同时,鼓励读者思考更多可能的解题思路和优化方案。
百度之星试题B+答案
百度之星的试题B,跟前面的A卷是一起的,大家好好学习,争取早日成为编程
高手
编程
高手
说编程
因为我先前发布的资源忘了写Tag,所以重新发了这一次改成说编程了
C++ 语言
65,183
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章