找回密码
 欢迎注册
查看: 14706|回复: 6

[讨论] 矩阵格查找的高效求解

[复制链接]
发表于 2011-5-12 18:36:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
今天有个同学问了个这个问题,他那里有个程序,跑20*30的矩阵用了14s (四核机),更大一点的矩阵就基本求不出来,于是就有了这个需求。 问题形式是这样的: 有一个m*n 的矩阵(m,n 均比较大,比如均100左右,实际需求对于m 会更大, n<200左右) 元素只有4个,{0,1,2,3} 其中0 表示无意义的值。 我们要在其中找到这样的矩阵,满足(矩阵的四个端点,上端与下端相等)如下: a ..........b . . . . . . a..........b 其中a,b ={1,2,3},a与b可以相等或不等,但不能为0. 并且如果这个大矩阵中有更小的会被包含,不计。 找出所有这样的矩阵。 例如,下面的查找结果,有两个矩阵: 1.png 再看一例,也有两个矩阵满足: 2.png 大致就是这个意思,不知道表述清楚了没有,找到的矩阵可以用坐标表示即可。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-5-12 22:17:24 | 显示全部楼层
求全解么?还是求m*n的最大解?20 * 30跑14秒有些夸张,全解的话会比较慢,毕竟解的数量可能很多。 先统计出来每行1.2.3的坐标的集合,然后依次同后面的行求交集,应该就差不多了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-5-13 09:53:01 | 显示全部楼层
2# litaoye 求全解。那同学的初步想法是先统计出每列1.2.3的坐标的集合。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-5-13 10:08:15 | 显示全部楼层
我觉得第一步应快速排除“0”的干扰:可将第k行中的“0”全部替换成(k+3)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-5-13 10:16:59 | 显示全部楼层
4# gxqcn 不会是想做减法运算吧。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-5-13 11:43:19 | 显示全部楼层
假设用最笨的办法,搜索m*n的矩阵中左上角为x*y的满足要求的矩形,计算量小于m*n次。 x和y的选取方式小于m*n种,因此总计算量会小于(m*n)^2次运算。 当m和n小于100时,运算量貌似并不是很大。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-5-15 07:28:40 | 显示全部楼层
本帖最后由 zeroieme 于 2011-5-15 10:38 编辑 希哈表,O(n)的复杂度。 这里需要m+1个希哈表,所以O(m*n)的复杂度。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 04:38 , Processed in 0.026690 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表