Java 如何计算时间复杂度

Java 如何计算时间复杂度,java,time-complexity,Java,Time Complexity,我的目标是确保for循环操作的时间复杂度不大于两个字符串的长度。所以在这个例子中,如果我计算正确,Om-n不能大于O28。我很确定这与长度完全相同,但我对时间复杂性不太熟悉 所以我的问题是,for循环的时间复杂度是多少 所以我意识到时间复杂度是m*n,它将大于两个字符串的长度。我知道人们不赞成它,但有人知道如何进一步减少它吗 为了清楚起见,程序正在检查字符串str,以查看它是否包含字符串集中的任何字符。如果它确实匹配,程序应该打印第一个匹配的索引,而不是退出。这只是我稍后要添加的另一个if语句

我的目标是确保for循环操作的时间复杂度不大于两个字符串的长度。所以在这个例子中,如果我计算正确,Om-n不能大于O28。我很确定这与长度完全相同,但我对时间复杂性不太熟悉

所以我的问题是,for循环的时间复杂度是多少

所以我意识到时间复杂度是m*n,它将大于两个字符串的长度。我知道人们不赞成它,但有人知道如何进一步减少它吗

为了清楚起见,程序正在检查字符串str,以查看它是否包含字符串集中的任何字符。如果它确实匹配,程序应该打印第一个匹配的索引,而不是退出。这只是我稍后要添加的另一个if语句

代码:


在这里,很明显,您的时间复杂度为On*m。只需计算循环的迭代次数:对于第一个循环的每次迭代,第二个循环执行m次迭代,第一个循环有n次迭代。CQFD。

是的,我进一步查看后才意识到。现在我不知道如何降低时间复杂度。我需要去掉二次型的一些方法……程序正在检查字符串str,看看它是否包含字符串集中的任何字符。如果它确实匹配,程序应该打印第一个匹配的索引,而不是退出。这只是我稍后要添加的另一个if语句。为什么不使用实数集而不是字符串呢?至少,您可以使用一个排序字符[]。我仍然需要使用两个字符串。难道不可能进行更多优化吗?假设在最坏的情况下,您必须检查字符串str和字符串集中的每个字母。对设置的字符串进行排序并手动执行二进制搜索,因为您不能使用Arrays.binarySearch。您将拥有n+m logm复杂性
String str = "ThisIsTesTingComplexity";
String set = "t9123";

for(int j = 0;j<str.length();j++)
    for(int i = 0;i<set.length();i++)
        if(str.charAt(j)==set.charAt(i))
            System.out.print(j);