请教大家一个数学模型的问题

cafzl 2002-07-10 03:25:32
请教大家一个数学模型的问题:
计算机中一条指令可以控制几个部件,一个部件也可以被几个不同指令的指令所控制。
1)寻找最少指令,使所有的部件被控制。
2)当给定每个指令长度,在寻求总长度最小的若干指令,使所有的部件被控制。

指令 被控制的部件 指令长度
1 4,8,20,31,44 15
2 8,19,22,29,37 80
3 2,16,34,33,32 30
4 7,11,35,30 12
5 5,13,18,21 7
6 1,7,9,23,25 19
. . .
. . .
. . .
33 11,15,18,43 37
34 7,14,22,36 77
35 3,15,25,39 9
1)建立数学模型.
2)设计模型求解方法,用以上数据.
3)分析所设计算法的复杂性和计算所得结果.

我建的模型是二分图.指令为一个顶点集(V1),部件为一个顶点集(V2),如某个指令可以控制某个部件就用边连接起来.所以第一问转化为:在V1选取最少的顶点使V2通过边的关系全部被选中,第二问则转化为:当将V1的点全部赋权后,在V1中找出权数总和最小的顶点集,使V2全部被选中.
不过我把自己所知道的图论知识都像了一遍也没想出解法,匹配和覆盖,网络流问题,好像都没法求解.请各位高手指点解法,或是我的模型本身就选错了.谢谢各位!!
...全文
103 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cafzl 2002-07-11
  • 打赏
  • 举报
回复
回复人: huanghouqi(hhq)
能具体讲一下什么是:“负包络图的思想吗”?
saint001 2002-07-11
  • 打赏
  • 举报
回复
很多都是用的一些现代优化算法
saint001 2002-07-11
  • 打赏
  • 举报
回复
我们学校2001年全校数模题目之一
第一问答案是13
共有12组解
第二问最小长度是360(好像)
14个指令
当时我们是用规划做的
模型简单
但计算复杂度高
huanghouqi 2002-07-11
  • 打赏
  • 举报
回复
建立二分图后,可用负包络图的思想!!
xzhuang 2002-07-11
  • 打赏
  • 举报
回复
可以参考计算机体系结构的相关内容。我记得讲的不少。
alidiedie 2002-07-10
  • 打赏
  • 举报
回复
实际上,上面的思路可以解决你的图论模型.
1.选V1集中度数最大者,加入指令集.然后被这条入选指令控制的V2中的节点,都要删除,当然和V2中这些节点连接的边也没有了。
2.重复1.
大概可以证明一下正确性.

第二问如果只求次优解,就好办了。
如果仍用贪心策略.指标可以定义为 (能控制的部件数/指令长度)
根据指标排序,还要注意每次更新指令能控制的部件数.

alidiedie 2002-07-10
  • 打赏
  • 举报
回复
你用图论的思路很巧妙,我得好好学习.
回去想一想.
不过我的思路是用贪心算法.这个问题与背包问题和作业排序问题都很象.
背包问题就是有限的容量装尽可能多的东西.
你的第一问就是所有的东西用尽可能少的容量(指令数).

贪心算法最关键的是实现选取指标的定义,决定了最后的解是最优解还是次优解.然后根据指标排序,用贪心策略解决.

这个问题的指标不能简单定义为单位指令能控制的部件数.如果两条指令能控制的部件数很多,但重复内容太多,就不好了.
你看这样可以吗?
第一次排序根据指令能控制的部件数,首先选入最大者.
其余的指令再排序的时候,根据已选入指令集更新其他指令能控制的部件数,每条指令都删除掉已选入的部件,然后根据能控制的部件数重新排序.

我没试过,回去可以作作看.
molester 2002-07-10
  • 打赏
  • 举报
回复
是不是可以把每条指令控制的部件作为一个集合(所有部件的子集),通过某种算法让集合与集合进行并运算,直到构成全集,好象在哪里见过类似的算法,每次合并都使合集尽量大,包含的元素尽量多,建议去看看集合论。

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧