草庐IT

algorithm

全部标签

java - 查找长度为 N 的重复子串

我必须编写一个Java程序来查找给定字符串中所有长度为n的重复子字符串。输入的字符串非常长,蛮力方法需要太多时间。我已经尝试过:目前,我正在分别查找每个子字符串,并使用KMPalogrithm检查该子字符串的重复项。.这也太花时间了。解决这个问题更有效的方法是什么? 最佳答案 1)你应该看看使用后缀树数据结构。SuffixTree这个数据结构可以在O(N*logN)时间内建立(我认为即使在O(N)时间内使用Ukkonen的算法)其中N是输入字符串的大小/长度。然后它允许解决许多(否则)困难O(M)时间内的任务,其中M是模式的大小/长

java - 给定日期范围列表,找到出现次数最多的日期

我有一个Booking列表,其中包含startDate和endDate。我必须找到预订最繁忙的一天。classBooking{DatestartDate;DateendDate;}示例:2016-10-12to2016-10-182016-10-11to2016-10-152016-10-13to2016-10-142016-10-12to2016-10-13从这些日期可以看出,2016年10月13日4次都被预订。我想到的解决方案是:遍历列表中从最小开始日期到最大结束日期的所有日期记录所有日期的所有预订数量。最后,返回具有最大计数的日期。但这不是有效的解决方案。如何高效地找到最忙的一天

java - 如何使用背包找到下料问题的最佳组合

编辑(31-12-2019)-https://jonathan.overholt.org/projects/cutlist上面是我正在寻找的免费项目的链接。我只是在寻找适当的指导,以便让它发挥作用。我正在努力最大限度地减少铝制滑动窗制造商的铝挤压切割浪费,但我无法弄清楚应该使用哪种算法/数据结构来解决这个问题。我做了基础研究,发现问题落在CuttingStockProblem(也叫一维切割问题),LinearProgrammingProblem,GreedyAlgorithm。但是我无法决定我应该选择哪一个以及如何开始。问题简介:基本上,window制造商可以购买3种尺寸的Materi

java - 使用 Java 进行源代码检测

知道如何在不查看文件扩展名或使用非常长的自制正则表达式的情况下使用Java检测文本文件中的源代码(Java、C#、SQL等)吗?也许已经有一些工具可以完成这项工作? 最佳答案 LinguistWeusethislibraryatGitHubtodetectbloblanguages,highlightcode,ignorebinaryfiles,suppressgeneratedfilesindiffsandgeneratelanguagebreakdowngraphs.不幸的是它是用Ruby写的,也许JRuby能处理吗?

java - 生成概率树然后对结果进行排序的时间高效实现

我有一些事件,其中每个事件都有发生的概率,如果发生则有一个权重。我想创建事件概率的所有可能组合,并具有相应的权重。最后,我需要按重量顺序对它们进行排序。这就像生成一棵概率树,但我只关心生成的叶子,而不关心得到它们需要哪些节点。我不需要在创建最终结果的过程中查找特定条目,只需创建所有值并按权重对它们进行排序。只有大约5-15个事件,但是由于n个事件有2^n种结果的可能性,而且这是经常做的,我不希望它花费不必要的时间。速度比使用的存储量重要得多。我提出的解决方案有效但速度很慢。有没有关于更快解决方案或改进想法的想法?classProbWeight{doubleprob;doubleeven

java - 光学聚类算法。如何获得最好的epsilon

我正在实现一个需要对地理点进行聚类的项目。OPTICS算法似乎是一个非常好的解决方案。它只需要2个参数作为输入(MinPts和Epsilon),分别是将它们视为一个簇所需的最小点数,以及用于比较两个点是否在同一簇中的距离值。我的问题是,由于点的种类繁多,我无法设置固定的epsilon。看看下面的图片。相同的点结构但不同的尺度会产生非常不同的结果。假设设置MinPts=2和epsilon=1Km。在左边,算法会创建2个簇(红色和蓝色),但在右边它会创建一个包含所有点的单个簇(红色),但我想在右边也获得2个簇。所以我的问题是:是否有任何方法可以动态计算epsilon值以获得此结果?编辑20

java - 在 Java 中通过给定的最大汉明距离(不匹配数)获取所有字符串组合

是否有一种算法可以通过给定数量的可以变化的最大允许位置(最大不匹配、最大汉明距离)生成一个字符串(DNA序列)的所有可能的字符串组合?字母表是{A,C,T,G}。字符串AGCC和最大不匹配数2的示例:Hammingdistanceis0{AGCC}Hammingdistanceis1{CGCC,TGCC,GGCC,AACC,ACCC,ATCC,AGAC,AGTC,...,AGCG}Hammingdistanceis2{?}一种可能的方法是生成一个包含给定字符串的所有排列的集合,迭代它们并删除所有具有更大汉明距离的字符串。对于给定的20个字符的字符串和5的最大汉明距离,这种方法非常耗费资

java - 插入排序比 shell 排序快得多

我正在阅读Sedgewick的“算法”中有关排序的章节。在此过程中,我编写了3个基本的排序算法:选择、插入和shell排序。书中说,尽管这三者都具有二次最坏情况的复杂性,但shell排序应该比随机数据的插入排序快得多。在书中,他们获得了600倍的性能提升。但我在笔记本电脑上得到以下乘法器(几乎不随阵列大小的增加而改变):选择:5.5倍插入:1x外壳:1.8倍!困扰我的问题是-为什么shell排序比插入排序慢将近两倍?!我想,我的shellsort实现有问题。但我几乎是从书上抄来的:classShellSortextendsSort{//precalculatesequence:1,4,

java - 在运行时更改实现/类

我正在寻找在运行时更改对象(或变量)的具体类的(开源)程序(或算法)的真实示例。Java中此类行为的示例可能类似于下面的代码片段。这里,一个在频繁插入和/或删除上下文中表现良好的LinkedList被更改为一个在随机访问和迭代上下文中表现良好的ArrayList.ListmyList=newLinkedList();/*Lotsofinserts*/...myList=newArrayList(myList);//'change'intodifferentclass/*Lotsofiteration*/...上面的Java示例在LinkedList和ArrayList之间变化为了性能。

java - 计算 2 个相关方程的解数

如何找到解决方案的数量s=a+bx=a^b当给定s和x时,^表示xor?那么对于(0,0)或(31,31)或(15,10)呢?我试过将x转换成二进制字符串,但之后我不确定该把它放在哪里。 最佳答案 如果没有解决方案,方法solution返回null。如果有解决方案,它返回a(仅针对一个解决方案)。您可以通过执行s-a或x^a来获得b。如果存在解决方案,则解决方案的总数(long)是2的Long.bitCount(x)次方。例如,s=24,x=6的解是a=9,b=15。二进制:9=100115=1111这些数字在2个位置不同,因此总共