Java 这个暴力算法是NP难的吗?

Java 这个暴力算法是NP难的吗?,java,string,algorithm,time-complexity,np,Java,String,Algorithm,Time Complexity,Np,这是我们在项目管理系统中使用的一种蛮力算法,用于从摘要中提取关键字。蛮力算法的时间复杂度是多少?它是NP难,NP完全,在NP中,还是在P中 这是算法: public static int search(String pattern, String text) { int M = pattern.length(); int N = text.length(); for (int i = 0; i < N - M; i++) { int j; for (j = 0;

这是我们在项目管理系统中使用的一种蛮力算法,用于从摘要中提取关键字。蛮力算法的时间复杂度是多少?它是NP难,NP完全,在NP中,还是在P中

这是算法:

public static int search(String pattern, String text) {
  int M = pattern.length();
  int N = text.length();
  for (int i = 0; i < N - M; i++) {
    int j;
    for (j = 0; j < M; j++) {
      if (text.charAt(i+j) != pattern.charAt(j)) {
         break;
      }
    }
    if (j == M) {
      return i;
    }
  }
  return -1;
}
publicstaticint搜索(字符串模式、字符串文本){
int M=pattern.length();
int N=text.length();
对于(int i=0;i
首先,只有问题可以是NP,或NP-难,或NP-完全,或p,因此询问您的特定算法是NP-难还是NP-完全是没有意义的

您拥有的特定算法是朴素的字符串搜索算法。给定长度为m的文本字符串和长度为n的模式字符串,它在时间O((m-n+1)n)内运行。这是一个输入字符串大小的多项式,因此这个问题-字符串搜索问题-属于类P。它也在NP中,因为P中的每个问题都在NP中,但不知道这个问题是NP难还是NP完全,因为解决这个问题将决定P=NP


当你发现自己在强迫某件事情时,问自己你的解决方案是否太慢,或者你试图解决的问题是否能更有效地解决是有道理的。因此,查找问题并了解它的相关知识是很好的。在您的情况下,有更好的字符串搜索算法;Knuth-Morris-Pratt算法运行在最坏情况下的时间O(m+n),Rabin-Karp算法平均运行在时间O(m+n)并且非常容易实现,而Boyer-Moore算法在许多情况下可以运行在次线性时间。但是,暴力算法的效率不如这些算法,这一事实与NP的完整性无关。

标题语法不完全清楚,请查看……在代码中,存在两个嵌套的for循环。如果M足够小或M在有限范围内变化,时间复杂度为N阶。如果M变化很大,时间复杂度为(N*M)阶。我想知道属于哪一类,如NP难(非确定性多项式),NP完全(非确定性,P型(多项式)当我使用模式匹配的bruite force算法来分析摘要或文本文档中的关键字时,我的问题来了……我如何决定该算法将属于哪一类???