Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2007-05-03
帖子: 4
声望力: 0 ![]() |
![]()
对于一个n*n的矩阵,取矩阵中的n个数,保证每一行每一列都取且只取一个数,怎么的算法能够使得这n个数的和最小??举个例子:
对于一个3×3的矩阵A,如下: 3 2 2 4 3 4 5 2 4 取A02(即数值2,第一行第三列),A10(即数值4,第二行第一列),A21(即数值2,第三行第二列),它们的和为:2+4+2=8,最小。 我也不知道怎么描述这个概念,不知道有没有甚么概念来描述这个最小值。 不知道达人能不能提供一种算法。急,在线等! 对了,如果有人知道怎么样可以用matlab直接实现这个就更好了! 请大侠帮帮忙!谢谢! |
![]() |
![]() |
![]() |
#2 |
初级会员
注册日期: 2009-03-20
年龄: 42
帖子: 26
声望力: 17 ![]() |
![]()
这好像是图论或者最优化里的问题,寻找最小路径或者最佳路径。方法挺复杂的,最坏的情况可能需要遍历整个矩阵
就拿这个矩阵来说吧! 3 2 2 4 3 4 5 2 4 Step1:i=1,在第i行里选择一个最小的元素,比如A13,如果有两个相同,那么任选哪个都行。我们不妨选A13,记录A13的行和列下标,以及A13的值 Step2:i=2,在第2行的第1列和第2列里选择最小的一个,我们找到了A22,这个时候,记录A22的行和列下标。 Step3:i=3,在第3行的第一列里选择A31,并记录行和列下标 Step4:求和,记录和为10.然后重复上述过程,在重复的过程中,第一行中选择另外一个次小的做为开始的值。如果找到的值比10小,则代替,如果不小,那么继续寻找。 |
![]() |
![]() |
![]() |
#3 |
高级会员
注册日期: 2008-09-14
年龄: 43
帖子: 351
声望力: 24 ![]() |
![]()
蚁群 或者遗传都可以
__________________
qq604443022 |
![]() |
![]() |