【思考题】来自数学建模吧
mathcad吧
全部回复
仅看楼主
level 13
LNSZDZG 楼主
这个程序怎么写。。。给定一个矩阵,从矩阵的每一行选一个数,这些数的列数各不相同,使这些数最大值最小
来自数学建模吧的提,看似简单,做起来难。
2014年07月12日 10点07分 1
level 15
排列组合类的题不好做,既不容易列出算法,又无法验证。
2014年07月12日 10点07分 2
level 12
“使这些数最大值最小”是啥意思?
我刚才正想出个思考题呢哈,嗯,先看看LNS的这个吧。
2014年07月12日 10点07分 3
level 13
LNSZDZG 楼主
2014年07月12日 12点07分 4
level 13
LNSZDZG 楼主
意思是使取出来的一列数的最大值最小
2014年07月12日 12点07分 5
level 13
LNSZDZG 楼主
比如,从矩阵
的每一行取一个数,还不能同列,就有3!中取法:
1,5,9;1,6,8;2,4,9;2,6,7;3,5,7;3,4,9
要使最大的最小的取法有2,6,7;3,5,7两种。
对于小矩阵可以遍历列举,但是对于大矩阵——就10*10的矩阵,列举的运算量太大:
10!=3628800啊——不要说更大的了。所以得有一个算法才是。
2014年07月12日 12点07分 6
既然已是最大值了,又怎么成了最小了呢?实在搞不懂。3+4+9=16是最大值,怎么答案是,2+6+7=3+5+7=15?懂不起。
2014年07月12日 14点07分
其余几个的和也是15,又为什么不是答案呢?
2014年07月12日 14点07分
回复 月城公寓寓公 :是这个意思: max(1,5,9)=9;max(1,6,8)=8,;......max(3,5,7)=7 在这些最大值中7最小
2014年07月12日 14点07分
回复 月城公寓寓公 :不求和的,
2014年07月12日 14点07分
level 13
LNSZDZG 楼主
这个问题我好想没有表达清楚。
2014年07月12日 14点07分 7
level 13
LNSZDZG 楼主
min(max(1,5,9),max(1,6,8),max(2,4,9),max(2,6,7),max(3,5,7),max(3,4,9))=7
2014年07月12日 14点07分 8
问题倒是弄清了。算法,想不出来。
2014年07月12日 15点07分
level 3
能否用迭代的方法?
2014年07月12日 15点07分 9
黑猫白猫,抓到耗子就是好猫。
2014年07月12日 15点07分
level 12
我上面的答案不对!
我又对这道题的题面品味了一下,上面的答案挺糟糕的,我搞错了思考的先后顺序。如果不要求穷举,而是能够给出所有正确答案中的一个的话,最简单的只能是下面这个:
2014年07月13日 01点07分 12
哈,1,8同列了,8,266也同列了
2014年07月13日 02点07分
回复 LNSZDZG :嗯,我在改进呢,不过已经差不多了不是么? :P
2014年07月13日 03点07分
剩下的事儿就是要加上一个exclusive的功能。
2014年07月13日 03点07分
level 12
嗯,是,昨天晚上我把这个问题人为的复杂化了,都怪LNS误导哈……
以下是所有的情况,剩下的就是排列组合问题了,其实就是找到所有的比“每行的最小值中的最大值”小的元素的位置。
2014年07月13日 02点07分 13
刚开始我也是这么想的,但后来发现不妥。
2014年07月13日 06点07分
level 12
还是要分好几种情况讨论,想的几种方案都能找到例外,结果就是程序越来越复杂了。
2014年07月13日 03点07分 14
level 12
而且还存在无法处理的矩阵,比如说n列的矩阵中,除了第s列的元素外,其他所有元素都为∞,那么就不能做到每行选择不同列上的数字了。
2014年07月13日 03点07分 15
level 15
没有严密的数学证明,证明下面这种算法是正确的,只是作为一种思路,贴出来供参考。
请批评指教。
尽管按题目的意思,有很多可能的组合的列,但是我们没有必要把这么多组合都穷举一遍。关键在于找出极大值和极小值。如果它是极值,不管如何组合,它总会被找出来。
所以,我用的方法是:
找出每列中的最大值,记录下其中的列最小值。
光在列中找,会把次大的值丢掉,所以还必须按行再找一次。
找出每行中最小的值,记录下其中的行最大值。
选列最小值和行最大值中小的一个作为结果值,输出。
2014年07月13日 04点07分 17
level 15
错了!不满足这些数在不同的列的题设条件。
2014年07月13日 04点07分 19
是啊,要求既不能同行也不能同列,难度就大多了
2014年07月13日 06点07分
level 12

我喜欢MC的最大原因就是每次用MC征服一个难题之后,不管征服得是否彻底吧,我特么就特别有成就感!!!哈哈哈!
2014年07月13日 06点07分 21
level 13
LNSZDZG 楼主
运用了递归算法,解决了方阵的问题,n*m的非方阵还没有解决
2014年07月13日 08点07分 22
level 13
LNSZDZG 楼主
可能有多组解,以上程序只能给出其中的一组。
2014年07月13日 09点07分 23
level 12
LNS,你的那个yzs()是啥?
另外,看到你在数学模型吧推广MC,很好!很好!就得让其他M类软件的爱好者感觉到MC的强大阴影!哈哈哈!
2014年07月13日 10点07分 24
level 13
LNSZDZG 楼主
剑客,yzs()是矩阵的余子式函数,因为递归的话,需要对矩阵降阶,将三阶降为2阶,就需要取余子式。
2014年07月13日 10点07分 25
嗯,我觉得你应该把程序中涉及到的自定义函数都给出来才好,否则会影响交流理解的,你看好么?
2014年07月13日 10点07分
1 2 3 尾页