草庐IT

algorithm

全部标签

java - 确定一个字符串具有所有唯一字符而不使用额外的数据结构并且没有小写字符假设

这是CrackingtheCodingInterviewbook中的问题之一作者:盖尔·拉克曼·麦克道尔(GayleLaakmannMcDowell):Implementanalgorithmtodetermineifastringhasalluniquecharacters.Whatifyoucannotuseadditionaldatastructures?作者写道:Wecanreduceourspaceusagealittlebitbyusingabitvector.Wewillassume,inthebelowcode,thatthestringisonlylowercase'

java - 制作一个基本算法——更有趣的版本

查看"Makingabasicalgorithm"的编辑历史.当OP改变问题,使一些有趣的答案无效时,受访者明显感到失望。所以,我想,为什么不再问原来的问题,让那些答案站得住脚。SobasicallyIwanttofindaeasierwaytodothis:if(size==2)unit/=2;if(size==2||size==6)unit/=2;if(size==2||size==6||size==10)unit/=2;Sobasicallyitcheckingifsizeisequalto2andtheneverynewlineitadd4tothelastsizecheck.

java - 如何找到两个多行字符串之间的相似度百分比?

我有两个多行字符串。我正在使用以下代码来确定其中两个之间的相似性。这利用了Levenshtein距离算法。publicstaticdoublesimilarity(Strings1,Strings2){Stringlonger=s1,shorter=s2;if(s1.length()0){intnewValue=costs[j-1];if(s1.charAt(i-1)!=s2.charAt(j-1))newValue=Math.min(Math.min(newValue,lastValue),costs[j])+1;costs[j-1]=lastValue;lastValue=newV

java - 在java中生成没有重复/排列的变体

我必须生成所有不重复数字0-9的变体。它们的长度可以从1到10。我真的不知道如何解决它,尤其是如何避免重复。例子:变化长度:4随机变化:9856、8753、1243、1234等(但不是9985-包含重复)你能帮帮我吗?或者你能给我代码吗? 最佳答案 要查找的关键字是排列。有大量免费的源代码可以执行它们。至于避免重复,我建议采用一种简单的递归方法:对于每个数字,您都可以选择是否将其纳入您的变体中,因此您的递归会通过数字计数并fork为两个递归调用,其中一个数字被包括在内,一个被排除在外。然后,在您到达最后一位数字后,每个递归本质上都会

java - 500,000 个街道名称——使用什么数据结构来实现快速搜索?

所以我们有很多街道名称。它们放在一个文件中。在生产环境中启动服务器时,我可能会缓存它们。搜索应该是自动完成的,例如-你输入“lang”,你可能会得到8次点击:langstr,langestr。等等 最佳答案 您正在寻找的是某种压缩的trie表示形式。你可能想看看succincttries或DAWG这是一个起点,因为它们具有出色的效率和非常好的空间利用率。希望这对您有所帮助! 关于java-500,000个街道名称——使用什么数据结构来实现快速搜索?,我们在StackOverflow上找到

java - "if"语句对时间复杂度分析有影响吗?

根据我的分析,这个算法的运行时间应该是N2,因为每个循环遍历所有元素一次。我不确定if语句的存在是否会改变时间复杂度?for(inti=0;i 最佳答案 Tp:将常量文本打印到标准输出所花费的时间。Ti:内部循环内所有其他操作(谓词评估等)所花费的时间。至:除了执行内循环(初始化计数器等)外,外循环内的所有操作所花费的时间。Tc:设置流程和所有其他簿记所花费的时间总运行时间将为Tc+Nx(To+NxTi+N/2xTp)。这等于Tc+NxTo+(Nx(N/2))x(2Ti+Tp)以Kx(N^2)为界K>Ti+Tp/2的值随着N趋于无穷

java - 比较java中的字符串并删除字符串中相同的部分

我有两个字符串:s1="MICROSOFT"s2="APPLESOFT"我需要比较字符串并从第二个字符串中删除重复的部分(总是接近尾部)。所以我应该得到“MICROSOFT”和“APPLE”作为输出。我逐个字符地比较了两个字符串。Strings1="MICROSOFT";Strings2="APPLESOFT";for(intj=0;j它应该检查字符串,如果两个字符串在字符串结尾之前具有相同的字符,那么我需要从第二个字符串中删除冗余部分,在本例中为SOFT。但我想不出如何从这里开始。可以有更多的重复...但我们必须只删除那些连续相同的。如果我有APPWWSOFT和APPLESOFT,我

java - 在 O( (n+s) log n) 中计算圆交点

我正在尝试弄清楚如何设计一种算法来完成这项具有O((n+s)logn)复杂度的任务。s是交叉点的数量。我试过在互联网上搜索,但找不到任何东西。无论如何,我意识到拥有良好的数据结构是关键。我在java中使用红黑树实现:TreeMap。我还使用著名的(?)扫描线算法来帮助我处理我的问题。让我先解释一下我的设置。我有一个调度程序。这是一个PriorityQueue,我的圈子根据最左边的坐标排序(升序)。scheduler.next()基本上轮询PriorityQueue,返回下一个最左边的圆圈。publicCirclenext(){returnthis.pq.poll();}我这里还有一个包

java - 修改编辑距离算法以不计算所有距离

我正在研究模糊搜索实现,作为实现的一部分,我们使用Apache的StringUtils.getLevenshteinDistance。目前,我们正在为我们的模糊搜索寻求特定的最大平均响应时间。经过各种增强和一些分析后,花费最多时间的地方是计算Levenshtein距离。它大约占搜索字符串三个或更多字母的总时间的80-90%。现在,我知道这里可以做的事情有一些限制,但我已经阅读了以前的SO问题和LD的维基百科链接,如果有人愿意将阈值限制为设定的最大距离,那可以帮助减少花在算法上的时间,但我不确定如何准确地做到这一点。Ifweareonlyinterestedinthedistanceif

java - 定义轮廓是否闭合

我需要一种方法来定义轮廓是代表直线还是闭合形状。在Java中,我有一个对象Shape,它包含再次将其定义为单独对象的所有点。对象Point表示点的坐标。我尝试用递归解析形状,但对于更大的形状,超过150个点,性能非常差。我附上了一张我想要解析的形状的图片,以帮助更好地理解这个问题。我正在放一张图片以便更好地可视化问题。这只是展示了我得到的所有形状。我只想显示两个关闭的。提前致谢。瓦西尔·科塞夫 最佳答案 第一个想法:使用合适的contourtracingalgorithm得到一个有序的轮廓。如果你的轮廓是闭合的,你最终会回到第一点。