草庐IT

algorithm

全部标签

java - 重构嵌套 for 循环

我有这种情况,两组数据之间存在父子关系。我有一个父文档集合和一个子文档集合。要求是parent和他们对应的child需要导出为'a'pdf文档。上述情况的简单实现如下(下面是java-ish伪代码):for(DocumentparentDocument:Documents){ExportToPdf(parentDocument);for(DocumentchildDocument:parentDocument.children()){AppendToParentPdf(childDocument);}}上面的内容可能会解决问题,但是突然间需求发生了变化,现在每个parent和他们相应的

java - Java indexOf(蛮力法)对我或其他一些子串算法会更实用吗?

我正在研究如何在许多短文本行(haystack)中找到非常短的子字符串(pattern、needle)。但是,我不太确定在幼稚的蛮力方法之外使用哪种方法。背景:我正在做一个有趣的副项目,我收到多个用户的短信聊天记录(从2000-15000行文本和2-50个用户的任何地方),我想找到所有各种模式匹配根据我想出的预定词在聊天记录中。到目前为止,我正在寻找大约1600种模式,但我可能会寻找更多。例如,我想找出平均短信日志中使用的食物相关词的数量,例如“汉堡包”、“比萨饼”、“可乐”、“午餐”、“晚餐”、“餐厅”》、《麦当劳》。虽然我给出了英语示例,但实际上我会在我的程序中使用韩语。这些指定的

java - Java 中的范围查找

假设,我有一个未排序的重叠范围数组。每个range只是一对整数begin和end。现在我想查找给定的key是否至少属于ranges之一。可能,我还必须知道它所属的范围。我们可以假设ranges数组占用~1M并适合内存。我正在寻找一种简单的算法,它仅使用标准JDK集合,不使用任何3d方库和特殊数据结构,但运行速度相当快。你有什么建议? 最佳答案 按自定义Comparator对范围进行数字排序,然后为每个键k构建一个单元素范围[k,k]并执行binarysearch对于此范围,使用不同的Comparator.Comparator用于搜索

java - 如何判断两个圆形扇区是否重叠

每个扇区可以表示为(x,y,r,a,d),其中x,y是位置,r是半径,d是方向,a是角度。给定两个圆形扇区的这些信息,如何判断它们是否相互重叠?有没有有效的算法来解决它?谢谢! 最佳答案 我知道有一种非常快速的方法可以降低这种可能性,因为我之前已经将其用于圆圈碰撞。计算出两个中心之间的距离,如果该距离大于半径之和,则不会发生碰撞。为了提高效率,不要使用平方根,直接计算平方值即可:if(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)>(r1+r2)*(r1+r2):#Nochanceofcollision.计算出圆弧段会

java - Weka 的 PCA 运行时间太长

我正在尝试使用Weka使用PCA算法进行特征选择。我的原始特征空间在2700个样本中包含约9000个属性。我尝试使用以下代码来降低数据的维度:AttributeSelectionselector=newAttributeSelection();PrincipalComponentspca=newPrincipalComponents();Rankerranker=newRanker();selector.setEvaluator(pca);selector.setSearch(ranker);Instancesinstances=SamplesManager.asWekaInstanc

java - 单调对 - Codility

我刚刚在Codility,遇到了一个任务,我找不到目标O(n)效率的解决方案;我的解决方案运行时间为O(n2)。如果有人能给我一些关于如何让它运行得更快的提示,我将非常高兴。这是任务。给定一个由N个整数组成的非空零索引数组A。monotonic_pair是一对整数(P,Q),满足0≤P≤Q目标是找到索引相距最远的单调对。更准确地说,我们应该最大化Q−P的值。仅找到距离就足够了。例如,考虑这样的数组A:A[0]=5A[1]=3A[2]=6A[3]=3A[4]=4A[5]=2有十一个单调对:(0,0),(0,2),(1,1),(1,2),(1,3),(1,4),(2,2),(3,3),(3

java - 如何找到乘积大于总和的对

假设我们有一个数组C,其中C中的所有元素>0一对索引(a,b)如果0≤a是乘法的和C[a]*C[b]≥C[a]+C[b].时间复杂度为O(n)预期的最坏情况时间复杂度为O(N);非常感谢您为支持此案例提供的帮助。谢谢。 最佳答案 O(N)的解决方案就在这里。假设数组中的元素是按非降序排列的。如果数组未排序,则最坏时间复杂度O(N)是无法达到的。原始状态C[a]*C[b]≥C[a]+C[b]可以很容易地表示为C[b]≥C[a]/(C[a]-1)因此,查看C[a]/(C[a]-1)的图表......我们可以看到:如果0≤C[a],然后(

java - 查找从 2 到 1000 的所有素数的算法不起作用

这是一段代码,使用语句计算从2到1000的所有素数,数字n是素数当且仅当:在第一个版本中,我认为我正确地实现了算法:publicclassGiuga{publicstaticvoidmain(String[]args){intn=2;while(n但是,由于变量sum增长很快,发生溢出,素数17之后将不再有输出。为了防止我必须使用这个:好吧,我做到了,这是我的2.版本:publicclassGiuga{publicstaticvoidmain(String[]args){intn=2;while(n我认为我做对了,但是现在输出在素数13之后停止了。一段时间以来,我一直在努力找出我的错误

java - 我在网上找到的一个有趣的谷歌面试算法,需要线性时间

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。于是在网上找到了这个谷歌面试算法题。这真的很有趣,我还没有想出一个好的解决方案。请看看,并给我一个提示/解决方案,如果你能用Java编写代码就太好了:)。“设计一个算法,给定数组中n个元素的列表,找到列表中出现次数超过n/3次的所有元素。该算法应以线性时间运行。(n>=0)您应该使用比较并实现线性时间。没有散​​列/过多的空间/并且不使用标准线性时间确定

java - n组所有可能的组合

我有n个集合。每个Set都有不同数量的元素。我想编写一个算法,为我提供集合中所有可能的组合。例如,假设我们有:S1={1,2},S2={A,B,C},S3={$,%,£,!}组合应该是这样的C1={1,A,$}C2={1,A,%}...……等等。可能的组合数将为2*3*4=24请帮我用Java写这个算法。 最佳答案 递归是你的friend:publicclassPrintSetComb{publicstaticvoidmain(String[]args){String[]set1={"1","2"};String[]set2={"A