时间复杂度的算法评估

时间:2012-09-04 10:42:44

标签: algorithm complexity-theory time-complexity

  1. 我想知道这在最坏的情况下是否有效Θ(n+m)
  2. n的大小为i_StringForSearchm的大小为i_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 个答案:

答案 0 :(得分:1)

  1. 回答你的问题:是的,算法是O(n+m)。每 迭代次数增加strForSearchIndex,因此最多n 迭代。 [这是假设i_StringForSearch.length()已完成 在O(1),这通常是真的。

  2. isSubstring("aaab","aab") == false

  3. 的计数器示例错误
  4. 您可能希望查看Knuth Morris Pratt algorithm和/或Rabin-Karp algorithm和/或Aho-Corasick Algorithm