时间复杂度的算法回顾

标签 algorithm complexity-theory time-complexity

  1. 我想知道这在最坏的情况下是否有效,如 Θ(n+m)

ni_StringForSearch 的大小,mi_SubStringToFind 的大小。

2.是否有推荐的程序来检查给定代码的时间复杂度,我更喜欢公认的免费工具。

谢谢

public static boolean isSubstring(String i_StringForSearch, String i_SubStringToFind)
    {
        int strForSearchIndex = 0;
        int subStrToFindIndex = 0;
        boolean endOfStringToSearch = false;
        boolean foundSubString = false;
        boolean isThereASequenceOfMatching = false;


        while(!endOfStringToSearch && !foundSubString)
        {
            if(strForSearchIndex == i_StringForSearch.length())
            {
                endOfStringToSearch = true;
            }

            else if(i_StringForSearch.charAt(strForSearchIndex) == i_SubStringToFind.charAt(subStrToFindIndex))
            {
                isThereASequenceOfMatching = true;
                if(subStrToFindIndex == i_SubStringToFind.length() -1 )
                {
                    foundSubString = true;
                }
                subStrToFindIndex++;
                strForSearchIndex++;
            }

            else if(i_StringForSearch.charAt(strForSearchIndex) != i_SubStringToFind.charAt(subStrToFindIndex))
            {
                if(isThereASequenceOfMatching)
                {
                    subStrToFindIndex = 0;
                    isThereASequenceOfMatching = false;
                }
                strForSearchIndex++;
            }
        }

       return foundSubString;
    }

最佳答案

  1. 回答你的问题:是的,算法是O(n+m)。每个 迭代增加strForSearchIndex,所以最多有n 迭代。 [这是假设 i_StringForSearch.length() 完成 在 O(1) 中,这通常是正确的。

  2. isSubstring("aaab","aab") == false 的反例算法错误

  3. 你可能想看看 Knuth Morris Pratt algorithm和/或 Rabin-Karp algorithm和/或 Aho-Corasick Algorithm

关于时间复杂度的算法回顾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12261806/

相关文章:

java - 给定 +ve 个整数数组,找出在 O(n) 时间和常数空间中出现奇数次的数字。

algorithm - 给定一个具有不同值的预排序数组,找到满足 A[i]=i 的 x

performance - 巴比伦方法的时间复杂度

javascript - JAVASCRIPT中js indexOf()方法背后的算法

algorithm - 计算满足要求的可能排列数

Java - "not"扫描仪问题

基于多个可能的匹配匹配人的算法

c++ - 随机访问至少 O(ln N) 且删除至少 O(ln N) 的数据结构 [不重复]

algorithm - 如果 Y 可以在多项式时间内还原为 X,那么 X 至少和 Y 一样硬是怎么回事?

c# - 提高C#代码效率的方法