草庐IT

algorithm

全部标签

java - 如何使用递归实现dfs?

我正在尝试使用以下代码通过递归实现DFS,publicstaticvoiddfs(inti,int[][]mat,boolean[]visited){visited[i]=true;//Marknodeas"visited"System.out.print(i+"\t");for(intj=0;j我有一个矩阵和一个数组用于跟踪访问过的节点,//adjacencymatrixforuni-directionalgraphint[][]arr={//12345678910{0,1,1,1,0,0,0,0,0,0},//1{0,0,0,0,0,0,1,0,0,0},//2{0,0,0,0,0

java - 为什么 Math.pow(int,int) 比我天真的实现慢?

昨天看到一个问为什么Math.pow(int,int)这么慢的问题,但是这个问题措辞不当,没有研究成果,所以很快就关了。我自己做了一些测试,发现Math.pow方法在处理时确实比我自己的幼稚实现(甚至不是特别有效的实现)运行得非常慢带有整数参数。下面是我运行的测试代码:classPowerTest{publicstaticdoublemyPow(intbase,intexponent){if(base==0)return0;if(exponent==0)return1;intabsExponent=(exponent在我的电脑上(linux在intelx86_64cpu上),输出几乎总

java - 遍历数组列表的时间复杂度

我有一个循环访问的数组列表。在每次迭代中,我调用get()来获取一个元素,如果该项目满足某个条件,则使用add()将其添加到新的数组列表中>Listitems=newArrayList();ListlessItems=newArrayList();for(intindex=0;index我不确定这里的时间复杂度是多少。我在所有项目上调用get(),所以这是O(n)。然后我还可能对所有项目调用add(),所以还有另一个O(n)。不太确定这一点。 最佳答案 迭代items列表的第一个循环:复杂度为O(n)将每个项目插入到列表的末尾les

java - 无法对可扩展方法进行多线程处理

更新:为了帮助阐明我要问的内容,我发布了一些java代码来理解这个想法。前一段时间我问了一个question关于如何让算法分解一组数字,我的想法是给它一个数字列表(1,2,3,4,5)和一个总数(10),它会计算出每个数字的所有倍数加起来等于总数('1*10'or'1*1,1*2,1*3,1*4'或'2*5'等)。这是我做过的第一个编程练习,所以我花了一段时间才开始工作,但现在我想看看我是否可以扩展它。最初问题中的人说它是可扩展的,但我对如何去做有点困惑。递归部分是我坚持缩放结合所有结果的部分的区域(它所指的表不可缩放但应用缓存我能够使其快速)我有以下算法(伪代码)://generat

java - 用于校正 FishEye 镜头的桶形畸变校正算法 - 无法使用 Java 实现

我有大量用鱼眼镜头拍摄的照片。因为我想对照片进行一些图像处理(例如边缘检测),所以我想消除严重影响结果的桶形失真。经过一些研究和大量阅读文章后,我发现了这个page:他们描述了一种算法(和一些公式)来解决这个问题。M=a*rcorr^3+b*rcorr^2+c*rcorr+drsrc=(a*rcorr^3+b*rcorr^2+c*rcorr+d)*rcorrrsrc=distanceofapixelfromthecenterofthesourceimagercorr=distanceofapixelfromthecenterinthecorrectedimagea,b,c=distor

java - Codingbat fix45 有更简单的解决方案吗?

我正在尝试解决这个CodingBat问题:(Thisisaslightlyharderversionofthefix34problem.)Returnanarraythatcontainsexactlythesamenumbersasthegivenarray,butrearrangedsothatevery4isimmediatelyfollowedbya5.Donotmovethe4's,buteveryothernumbermaymove.Thearraycontainsthesamenumberof4'sand5's,andevery4hasanumberafteritthat

java - 外部洗牌 : shuffling large amount of data out of memory

我正在寻找一种方法来随机播放不适合内存(大约40GB)的大量数据。我有大约3000万个条目,长度可变,存储在一个大文件中。我知道该文件中每个条目的开始和结束位置。我需要随机播放这些不适合RAM的数据。我想到的唯一解决方案是将包含从1到N的数字的数组打乱,其中N是条目数,与Fisher-Yatesalgorithm然后根据此顺序将条目复制到新文件中。不幸的是,此解决方案涉及大量查找操作,因此会非常慢。是否有更好的解决方案来对均匀分布的大量数据进行洗牌? 最佳答案 首先解决shuffle问题。为此,请为您的条目发明一种哈希算法,该算法会

java - 用大数据统计普通组成员的算法

我需要编写一个程序来计算两个用户在同一组中的次数。用户由用户名和组由id给出。例如,输入(存储在文本文件中):john32john21jim21jim32bob32我想要结果:john-jim2john-bob1jim-bob1这听起来微不足道。但问题是:我有180万个组和300,000个用户。还有很多成员(member)资格(我预计每个用户平均至少有50个,可能更多)。这意味着大量的数据和处理。我已经编写了5个不同的程序来执行此操作,但没有一个能够减少数据量:作为PostgreSQL查询,它太慢了。在Java工作内存中的Map中运行太耗内存(第一个堆空间,优化后我得到罕见的“超出GC

java - 解析逻辑运算 - AND、OR、动态循环条件

我有一个传入记录过滤器,其中存储了如下给出的逻辑子句。Acct1='Y'ANDAcct2='N'ANDAcct3='N'ANDAcct4='N'ANDAcct5='N'AND((Acct6='N'ORAcct7='N'ANDAcct1='Y')ANDFormatted='N'ANDAcct9='N'AND(Acct10='N'ANDAcct11='N')ANDEditableField='N')我输入到此条款的数据将来自Csv文件,如下所示。Country,Type,Usage,Acct1,Acct2,Acct3,Acct4,Acct5,Acct6,Acct7,Formatted,Ac

java - Arrays.sort(Object[] a) - 它是如何实现的?

是否有关于Arrays.sort(Object[]a)使用的mergeSort是如何实现的资源?虽然它的文档非常好,但我很难理解它(尤其是为什么在递归调用mergeSort()get时切换src和dest)。 最佳答案 Hereisthesourcejava.util.Arrays。实际上,您在JDK中拥有该源代码-只需在您的IDE中打开java.util.Arrays,源代码+注释就会出现。如果您没有IDE,请查看JDK_HOME\src.zip然后,将其放入您的IDE中并跟踪其工作方式。设置断点(并在Debug模式下运行程序)使