首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >朴素算法实现

朴素算法实现
EN

Stack Overflow用户
提问于 2019-02-07 10:56:25
回答 1查看 113关注 0票数 0

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

代码语言:javascript
复制
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 ");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-07 11:17:39

你的算法复杂度不是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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54565638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档