【问题标题】:Algorithm review for time complexity时间复杂度的算法回顾
【发布时间】:2012-09-04 10:42:43
【问题描述】:
  1. 我想知道这在最坏的情况下是否像Θ(n+m)那样工作?

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;
    }

【问题讨论】:

  • 我认为算法是错误的。 isSubstring("aaab","aab") == false

标签: algorithm complexity-theory time-complexity


【解决方案1】:
  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

【讨论】:

  • 好的,免费的计算时间复杂度的工具,你知道吗?
  • @JavaSa:这样的算法不存在。它与Halting Problem 密切相关(没有通用算法可以确定另一个算法是否会停止)。我相信有启发式方法,但恐怕我不熟悉这些。
猜你喜欢
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
相关资源
最近更新 更多