天真的算法实现

时间:2019-02-07 02:56:25

标签: java algorithm

为什么朴素算法不具有o(n)时间复杂度? 这是我的Java代码,给了我预期的结果。 请解释这是怎么回事...

import java.util.*;
class NaiveAlgo{
    public static void main (String args[]){
        System.out.print("Enter the Text : ");
        Scanner inp1=new Scanner(System.in);
        String txt=inp1.nextLine();
        int lengthT=txt.length();

        System.out.print("Enter the Pattern : ");
        Scanner inp2=new Scanner(System.in);
        String ptn=inp2.nextLine();
        int lengthP=ptn.length();

        int i=0,j=0,index=0;

        while(j!=lengthP&& i!=lengthT){
            if(txt.charAt(i)==ptn.charAt(j)){
              i++;
              j++;
            }else{
              j=0;
              index++;
              i=index;
            }
        }

    if(index<lengthT)
            System.out.println("Index : "+index);
    else
            System.out.println("Not found ");
    }
}

1 个答案:

答案 0 :(得分:1)

您的算法不是O(n)复杂性。它不会执行线性搜索-这是在您将j=0i=index重置为字符不匹配时发生的。

使用ptn=xxxxytxt=xxxxxxxxxxxxxxxxxxxxy这样的夸张的最坏情况输入将不会有效,这会使我相信它是O(nm)。算法中的逻辑会重置ptn的计数器,并且只会将txt的索引加1。

您可以将执行与Boyer–Moore子字符串搜索算法进行比较,看看它与您的执行有何不同:

https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm