草庐IT

算法复杂度

全部标签

java - 按字母顺序对复杂对象的数组列表进行排序

我知道Collections.sort(myArrayList)可以在数组列表是字符串时按字母顺序对其进行排序,但是当它们是更复杂的东西时怎么办,例如包含两个或多个变量的数据对象,包括字符串。那么有没有办法对它们进行排序?如果Collections没有办法,那么我可以想象制作一个for循环或标准排序算法来查看每个对象的字符串变量并移动对象在数组中的索引。但我主要想知道我是否忽略了一些关于Collections方法 最佳答案 使用thefunctiontakingassecondparameteraComparator.Il允许您传递

java - 如何使用递归创建二进制搜索算法

我一直在利用大学假期通过编码算法练习Java。我编码的算法之一是二进制搜索:publicclassBinarySearch{privatestaticintlist[]={3,6,7,8,9,10};publicstaticvoidmain(String[]args){BinarySearchb=newBinarySearch();b.binarySearch(list);}publicvoidbinarySearch(int[]args){System.out.println("Binarysearch.");intupperBound=args.length;intlowerBou

java - 有代码重复并使其非常简单/可读更好,还是没有重复(使用泛型)但要复杂得多?

总的来说,我经常遇到这种情况。我的一些同事更喜欢非常简单、易于阅读的类,即使这意味着有一些代码重复,而我尽我所能避免代码重复,即使这意味着要制作更复杂的架构。最佳做法是什么?我只使用Java工作。 最佳答案 我总是喜欢没有重复代码的解决方案。即使更复杂的架构一开始更难理解,但维护的好处远远超过学习曲线。 关于java-有代码重复并使其非常简单/可读更好,还是没有重复(使用泛型)但要复杂得多?,我们在StackOverflow上找到一个类似的问题: https:

java - 有没有比线性搜索更快的算法?

我听说没有比线性搜索更快的算法(对于未排序的数组),但是,当我运行这个算法(线性)时:publicstaticvoidsearch(int[]arr,intvalue){for(inti=0;i使用长度为1000000的随机数组,找到一个值的平均时间是75ns,但是使用这个算法:publicstaticvoidskipSearch(int[]arr,intvalue){for(inti=0;i我得到一个更短的平均值,68ns?编辑:很多人说我没有做适当的基准测试,这是侥幸,但我运行了这些函数1000000次并得到了平均值。每次我运行函数1000000次,第一个算法得到75-76ns,第

java - Java中的Anagram算法

我想制作字谜算法但是此代码不起作用。我的错在哪里?例如des和sed是变位词但输出不是变位词同时我必须使用字符串方法。不是数组。:)publicstaticbooleanisAnagram(Strings1,Strings2){StringdelStr="";StringnewStr="";for(inti=0;i 最佳答案 一种更简单的方法可能是对两个字符串中的字符进行排序,然后比较它们是否相等:publicstaticbooleanisAnagram(Strings1,Strings2){//Earlyterminationch

concurrency - 为什么并发控制使用经典的二条件算法

在阅读ArrayBlockingQueue的源代码时,我发现了一条评论,解释说它使用了“任何教科书中都能找到的经典双条件算法”:/**Concurrencycontrolusestheclassictwo-conditionalgorithm*foundinanytextbook.*//**Mainlockguardingallaccess*/privatefinalReentrantLocklock;/**Conditionforwaitingtakes*/privatefinalConditionnotEmpty;/**Conditionforwaitingputs*/privat

java - Java中的正则表达式匹配算法

这article说Java中的正则表达式匹配很慢,因为带有“反向引用”的正则表达式不能有效匹配。这篇文章解释了高效Thomson基于NFA的匹配算法(发明于1968年),该算法适用于没有“反向引用”的正则表达式。然而Patternjavadoc说Java正则表达式使用基于NFA的方法。现在我想知道Java正则表达式匹配的效率如何以及它使用什么算法。 最佳答案 java.util.regex.Pattern使用Boyer–Moore字符串搜索算法/*AttemptstomatchasliceintheinputusingtheBoye

算法沉淀——动态规划之其它背包问题与卡特兰数(leetcode真题剖析)

算法沉淀——动态规划之其它背包问题与卡特兰数二维费用的背包问题01.一和零02.盈利计划似包非包组合总和Ⅳ卡特兰数不同的二叉搜索树二维费用的背包问题01.一和零题目链接:https://leetcode.cn/problems/ones-and-zeroes/给你一个二进制字符串数组strs和两个整数m和n。请你找出并返回strs的最大子集的长度,该子集中最多有m个0和n个1。如果x的所有元素也是y的元素,集合x是集合y的子集。示例1:输入:strs=["10","0001","111001","1","0"],m=5,n=3输出:4解释:最多有5个0和3个1的最大子集是{"10","0001

java - 是否有一种算法可以确定 a * b 是否适合整数的可能值? (不转换为更广泛的类型)

大家好,我想知道是否有一种方法可以在不转换为更广泛的数据类型(例如long、double等)的情况下实现此方法?CanTimes(inta,intb){returnstrueifa*biswithintherangeof-2^31to2^31-1,elsefalse;}例如,我们可以像这样为方法CanAdd实现一个(没有转换):publicstaticbooleanCanPlus(inta,intb){if(b>=0){returna=Integer.MIN_VALUE-b}}实现语言是Java,当然这更像是一个与语言无关的问题。我在想是否有某种逻辑可以用来决定a*b是否适合整数范围,

java - 估计实现的实际(非理论)运行时复杂性

计算机科学的任何人都知道HeapSort在理论上是O(nlogn)最坏情况,而QuickSort是O(n^2)最坏情况。然而,在实践中,一个良好实现的QuickSort(具有良好的启发式)将在每个数据集上优于HeapSort。一方面,我们几乎观察不到最坏的情况,另一方面,例如CPU缓存行、预取等在许多简单任务中产生巨大差异。而例如QuickSort可以在O(n)中处理预排序数据(具有良好的启发式),HeapSort将始终在O(nlogn)中重新组织数据,因为它不会利用现有结构。对于我的玩具项目caliper-analyze,我最近一直在研究根据基准测试结果估算算法的实际平均复杂度的方法