0 0

求一道算法,奖励50块电话费10

一组矩阵数据,位置大小都是随机分布的,假设每个矩阵数据都带有 canGet 的布尔属性。

规则是,假设一个矩阵的canGet被设为true,就会将所有与这个矩阵相交的矩阵的canGet也设为true。

设计一个算法,给出一些随机的矩阵并设置canGet为true,循环求出其中任何与之相交的矩阵也要设置canGet为true,假设当一个A矩阵canGet被设为true,它又会继续循环判断和A矩阵相交的矩阵,并设置canGet为true,重复下去,直到找到所有矩阵中canGet为true的矩阵数组。

最好性能上有优化。

谢谢啊,急求算法或者思路。或者提供哪些算法可以解决这类问题。

只要能帮助小弟解决目前难题,空中充值50块话费,50块不算什么的,一点心意回报,不坑人。

谢谢,问题不明白的再问问我,我表述能力有限,致歉。
或加我QQ544980720

问题补充:
chen_yongkai 写道
是正交矩阵吧

嗯,相交判断不用管,伪代码写如果相交就行了,谢谢。

问题补充:
kidding87 写道
矩阵相交的矩阵
怎么理解,或者怎么判断


矩阵相交不用关心,伪代码直接写如果相交就可以了,谢谢。

问题补充:
kidding87 写道
上面直接写的,我刚用ide写了个,调试了下,把注释也加上,你看是不是你需要的
public static void changeMatrix(List<Matrix> listStart ,List<Matrix> finds){
		  //判断时候初始的时候数据为空
		  if(finds==null||finds.size()==0||listStart.size()==0) return ;
		  //去掉查询过的数据,此处需要注意需重写Matrix的hashcode和equals方法
		  listStart.removeAll(finds); 
		  //零时变量
		  List temp =new ArrayList<Matrix>();
		  //遍历Matrix集合
	      for(int i=0;i<listStart.size();i++){
	    	  //遍历上次查询出来的结果
	        for(int j=0;j<finds.size();j++){
	        	//如果相交,则设置CanGet,并将结果放入temp中
	           if(isCross(listStart.get(i),finds.get(j))){
	             //setCanGet
	        	   temp.add(listStart.get(i));
	           }
	        }
	      }
	      //说明没有找到相交的结果集,退出递归
	      if(temp.size()==0) return ;
	      //向下一层继续查找
	      else  changeMatrix(listStart,temp);
	}

好的,我去尝试实现下,不懂的再问。

问题补充:
kidding87 写道
上面直接写的,我刚用ide写了个,调试了下,把注释也加上,你看是不是你需要的
public static void changeMatrix(List<Matrix> listStart ,List<Matrix> finds){
		  //判断时候初始的时候数据为空
		  if(finds==null||finds.size()==0||listStart.size()==0) return ;
		  //去掉查询过的数据,此处需要注意需重写Matrix的hashcode和equals方法
		  listStart.removeAll(finds); 
		  //零时变量
		  List temp =new ArrayList<Matrix>();
		  //遍历Matrix集合
	      for(int i=0;i<listStart.size();i++){
	    	  //遍历上次查询出来的结果
	        for(int j=0;j<finds.size();j++){
	        	//如果相交,则设置CanGet,并将结果放入temp中
	           if(isCross(listStart.get(i),finds.get(j))){
	             //setCanGet
	        	   temp.add(listStart.get(i));
	           }
	        }
	      }
	      //说明没有找到相交的结果集,退出递归
	      if(temp.size()==0) return ;
	      //向下一层继续查找
	      else  changeMatrix(listStart,temp);
	}


下班回家先,明天再去实现它,还有觉得这类算法计算量都好大? 那个removeAll()算法也吃力

问题补充:
kidding87 写道
楼主说的有道理
广度优先好像也不是很好,这次用动态平衡实现
	public static void changeMatrix(List<Matrix> listStart ,List<Matrix> finds){
		  //判断时候初始的时候数据为空
		  if(finds==null||finds.size()==0||listStart.size()==0) return ;
              //List最好使用为LinkedList实现类
	     loop: for(Iterator<Matrix> i=listStart.iterator();i.hasNext();){
	    	 Matrix temp = i.next(); 
	        for(Iterator<Matrix> j=finds.iterator();j.hasNext();){
	           if(isCross(m,j.next())){
	             //setCanGet
	        	   finds.add(temp);
	        	   i.remove();
	        	   continue loop;
	           }
	        }
	      }
	}


大师,QQ什么时候在线呢,小弟请教。
2012年4月17日 17:49

7个答案 按时间排序 按投票排序

0 0

采纳的答案

楼主说的有道理
广度优先好像也不是很好,这次用动态平衡实现

	public static void changeMatrix(List<Matrix> listStart ,List<Matrix> finds){
		  //判断时候初始的时候数据为空
		  if(finds==null||finds.size()==0||listStart.size()==0) return ;
              //List最好使用为LinkedList实现类
	     loop: for(Iterator<Matrix> i=listStart.iterator();i.hasNext();){
	    	 Matrix temp = i.next(); 
	        for(Iterator<Matrix> j=finds.iterator();j.hasNext();){
	           if(isCross(m,j.next())){
	             //setCanGet
	        	   finds.add(temp);
	        	   i.remove();
	        	   continue loop;
	           }
	        }
	      }
	}

2012年4月18日 21:22
0 0

上面直接写的,我刚用ide写了个,调试了下,把注释也加上,你看是不是你需要的

public static void changeMatrix(List<Matrix> listStart ,List<Matrix> finds){
		  //判断时候初始的时候数据为空
		  if(finds==null||finds.size()==0||listStart.size()==0) return ;
		  //去掉查询过的数据,此处需要注意需重写Matrix的hashcode和equals方法
		  listStart.removeAll(finds); 
		  //零时变量
		  List temp =new ArrayList<Matrix>();
		  //遍历Matrix集合
	      for(int i=0;i<listStart.size();i++){
	    	  //遍历上次查询出来的结果
	        for(int j=0;j<finds.size();j++){
	        	//如果相交,则设置CanGet,并将结果放入temp中
	           if(isCross(listStart.get(i),finds.get(j))){
	             //setCanGet
	        	   temp.add(listStart.get(i));
	           }
	        }
	      }
	      //说明没有找到相交的结果集,退出递归
	      if(temp.size()==0) return ;
	      //向下一层继续查找
	      else  changeMatrix(listStart,temp);
	}

2012年4月18日 16:40
0 0

广度优先算法
楼主还有什么不清楚的么?

2012年4月18日 15:40
0 0

	public void changeMatrix(List<Matrix> listStart ,List<Matrix> finds){
		  listStart.removeAll(finds);
		  List temp =new ArrayList<Matrix>();
	      for(int i=0;i<listStart.size();i++){
	        for(int j=0;j<finds.size();j++){
	           if(isCross(listStart.get(i),finds.get(j))){
	             //setCanGet
	        	   temp.add(i);
	           }
	        }
	      }
	      changeMatrix(listStart,temp);
	}

2012年4月18日 15:23
0 0

2012年4月18日 09:40
0 0

是正交矩阵吧

2012年4月18日 08:52
0 0

矩阵相交的矩阵
怎么理解,或者怎么判断

2012年4月17日 22:41

相关推荐

    每天一道算法题:分治算法,回归算法,贪心算法,回溯算法.zip

    贪心算法 每天一道算法题:分治算法,回归算法,贪心算法,回溯算法.zip

    遗传算法GA求函数最小值

    总之,遗传算法作为一种强大的全局优化工具,能有效解决求函数最小值问题。通过模拟生物进化过程,它能够在复杂环境中寻找到问题的最优解,展示出其广泛的应用潜力和适应性。在实际应用中,我们需要结合具体问题灵活...

    首次适应算法 最佳适应算法 循环首次适应算法 

    本篇文章将详细探讨三种常见的内存分配算法:首次适应算法(First Fit)、最佳适应算法(Best Fit)以及循环首次适应算法(Circular First Fit),并结合源代码分析它们的工作原理。 1. 首次适应算法(First Fit) ...

    电梯调度算法(算法合集)

    在电梯调度中,算法会学习如何根据乘客需求、电梯状态和实时信息来调整电梯的行动,以最大化某些奖励指标,如乘客等待时间的减少或能源效率的提高。 2. LOOK调度算法:LOOK算法是一种预判式调度策略,它预测未来的...

    遗传算法求函数最大值,C++实现

    用C++实现的遗传算法求函数的最大值,可运行

    模型算法大全(20+种常用算法模型+代码实现)

    模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+...

    利用Python实现遗传算法求函数最值

    遗传算法以一种群体中的所有个体为对象,并利用随机化...参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容,此程序利用Python实现遗传算法求函数最值问题。

    QR算法求矩阵特征值的matlab实现

    QR算法求矩阵特征值的matlab实现

    java算法全卷(包括基本算法和图算法)

    Java算法全卷涵盖了基本算法和图算法,是学习和提升编程技能的重要资源。这份资料主要针对使用Java语言进行算法实现的开发者,适用于那些对ANT、EJB、J2EE、JAVA和SPRING等技术栈有了解或兴趣的人群。下面我们将深入...

    遗传算法求最小值(matlab源代码和实验报告)

    因为遗传算法默认是求最小值,所以最大化问题可以通过最小化目标函数的负值来处理。 ### 四、实验报告与结果分析 实验报告通常包括以下几个部分: 1. **实验目的**:明确说明为何使用遗传算法求解最大值或最小值...

    贝叶斯网络学习算法――k2算法

    K2算法是其中一种用于学习贝叶斯网络结构的算法,尤其适用于小到中等规模的数据集。 K2算法,全称为Cowell-Koller-Komorowski算法,由R. Cowell、M. Koller、A. Komorowski于1994年提出。该算法基于最大后验概率...

    磁盘调度算法(最短寻道时间优先算法(SSTF) 扫描算法(SCAN) 先来先服务算法(FCFS) 循环扫描算法(CSCAN)....)

    常见的磁盘调度算法有先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)和循环扫描算法(CSCAN)等。 先来先服务算法(FCFS) 先来先服务算法(FCFS)是一种最简单的磁盘调度算法。该算法...

    灰狼优化算法和粒子群优化算法比较

    标题中的“灰狼优化算法和粒子群优化算法比较”指的是在优化问题中,对两种流行的启发式算法——灰狼优化算法(Grey Wolf Optimizer, GWO)与粒子群优化算法(Particle Swarm Optimization, PSO)的性能进行分析和...

    matlab遗传算法求最短路径

    在IT领域,优化问题是一个广泛研究的课题,而遗传算法是一种强大的全局优化工具,它源自生物进化论中的自然选择和遗传原理。在这个场景中,我们关注的是如何利用MATLAB来实现遗传算法解决最短路径问题。MATLAB作为一...

    贪婪算法和最小路径算法解决TSP问题matlab源代码

    然而,可以通过贪心算法和最小路径算法等启发式方法来寻找近似解。 贪心算法是一种简单的解决问题的方法,它在每一步选择局部最优解,期望这些局部最优解组合起来能得出全局最优解。在TSP问题中,贪心策略可能包括...

    扩展的欧几里得算法(实现求乘法逆元)

    欧几里得是数论中的一个最初步的概念,它用来判断两个数的最大公因子,扩展的欧几里得能够进一步实现在两个数互素情况下的乘法可逆元。求可逆元是一些算法的基础。

    利用遗传算法求Rosenbrock函数的极大值

    利用遗传算法求Rosenbrock函数的极大值

    CLEAN算法的步骤

    CLEAN算法是一种广泛应用于射电天文学中的图像处理技术,但同样可以被扩展应用到其他领域,如医学成像和计算机视觉等。该算法的主要目的是从含有噪声的数据中提取清晰的信号,通常用于处理由射电望远镜接收到的复杂...

    b* 寻路算法

    **B* 寻路算法详解** B*(B-star)寻路算法是A*(A-star)算法的一个改进版本,由Hart、Pohl和Nilson在1968年提出,旨在解决路径规划问题,特别是在环境变化或者不确定性较大的场景中。B*算法通过引入期望代价来...

Global site tag (gtag.js) - Google Analytics