-
求一道算法,奖励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个答案 按时间排序 按投票排序
-
采纳的答案
楼主说的有道理
广度优先好像也不是很好,这次用动态平衡实现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
-
上面直接写的,我刚用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
-
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
相关推荐
贪心算法 每天一道算法题:分治算法,回归算法,贪心算法,回溯算法.zip
总之,遗传算法作为一种强大的全局优化工具,能有效解决求函数最小值问题。通过模拟生物进化过程,它能够在复杂环境中寻找到问题的最优解,展示出其广泛的应用潜力和适应性。在实际应用中,我们需要结合具体问题灵活...
本篇文章将详细探讨三种常见的内存分配算法:首次适应算法(First Fit)、最佳适应算法(Best Fit)以及循环首次适应算法(Circular First Fit),并结合源代码分析它们的工作原理。 1. 首次适应算法(First Fit) ...
在电梯调度中,算法会学习如何根据乘客需求、电梯状态和实时信息来调整电梯的行动,以最大化某些奖励指标,如乘客等待时间的减少或能源效率的提高。 2. LOOK调度算法:LOOK算法是一种预判式调度策略,它预测未来的...
用C++实现的遗传算法求函数的最大值,可运行
模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+...
遗传算法以一种群体中的所有个体为对象,并利用随机化...参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容,此程序利用Python实现遗传算法求函数最值问题。
QR算法求矩阵特征值的matlab实现
Java算法全卷涵盖了基本算法和图算法,是学习和提升编程技能的重要资源。这份资料主要针对使用Java语言进行算法实现的开发者,适用于那些对ANT、EJB、J2EE、JAVA和SPRING等技术栈有了解或兴趣的人群。下面我们将深入...
因为遗传算法默认是求最小值,所以最大化问题可以通过最小化目标函数的负值来处理。 ### 四、实验报告与结果分析 实验报告通常包括以下几个部分: 1. **实验目的**:明确说明为何使用遗传算法求解最大值或最小值...
K2算法是其中一种用于学习贝叶斯网络结构的算法,尤其适用于小到中等规模的数据集。 K2算法,全称为Cowell-Koller-Komorowski算法,由R. Cowell、M. Koller、A. Komorowski于1994年提出。该算法基于最大后验概率...
常见的磁盘调度算法有先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)和循环扫描算法(CSCAN)等。 先来先服务算法(FCFS) 先来先服务算法(FCFS)是一种最简单的磁盘调度算法。该算法...
标题中的“灰狼优化算法和粒子群优化算法比较”指的是在优化问题中,对两种流行的启发式算法——灰狼优化算法(Grey Wolf Optimizer, GWO)与粒子群优化算法(Particle Swarm Optimization, PSO)的性能进行分析和...
在IT领域,优化问题是一个广泛研究的课题,而遗传算法是一种强大的全局优化工具,它源自生物进化论中的自然选择和遗传原理。在这个场景中,我们关注的是如何利用MATLAB来实现遗传算法解决最短路径问题。MATLAB作为一...
然而,可以通过贪心算法和最小路径算法等启发式方法来寻找近似解。 贪心算法是一种简单的解决问题的方法,它在每一步选择局部最优解,期望这些局部最优解组合起来能得出全局最优解。在TSP问题中,贪心策略可能包括...
欧几里得是数论中的一个最初步的概念,它用来判断两个数的最大公因子,扩展的欧几里得能够进一步实现在两个数互素情况下的乘法可逆元。求可逆元是一些算法的基础。
利用遗传算法求Rosenbrock函数的极大值
CLEAN算法是一种广泛应用于射电天文学中的图像处理技术,但同样可以被扩展应用到其他领域,如医学成像和计算机视觉等。该算法的主要目的是从含有噪声的数据中提取清晰的信号,通常用于处理由射电望远镜接收到的复杂...
**B* 寻路算法详解** B*(B-star)寻路算法是A*(A-star)算法的一个改进版本,由Hart、Pohl和Nilson在1968年提出,旨在解决路径规划问题,特别是在环境变化或者不确定性较大的场景中。B*算法通过引入期望代价来...