Java 该算法查找前缀的时间复杂度
我编写这个算法是为了检查数组中的一个字符串是否是另一个字符串的前缀。 复杂度为O(n*(n-1)*k),其中n是数组中的字符串数, K是字符串的最大长度。我是不是在这里做复杂性分析Java 该算法查找前缀的时间复杂度,java,algorithm,big-o,Java,Algorithm,Big O,我编写这个算法是为了检查数组中的一个字符串是否是另一个字符串的前缀。 复杂度为O(n*(n-1)*k),其中n是数组中的字符串数, K是字符串的最大长度。我是不是在这里做复杂性分析 public static void isPrefix(String[] strs){ for(int i=0; i<strs.length; i++){ for(int j=i+1; j<strs.length; j++){ String a = str
public static void isPrefix(String[] strs){
for(int i=0; i<strs.length; i++){
for(int j=i+1; j<strs.length; j++){
String a = strs[i];
String b = strs[j];
if(!commonStr(a,b).isEmpty()){
System.out.println(a + "->" + b);
}
}
}
}
private static String commonStr(String a, String b){
int smaller = Math.min(a.length(), b.length());
for(int k=0; k<smaller; k++){
if(a.charAt(k) != b.charAt(k)){
return "";
}
}
return a.substring(0,smaller);
}
public static void main(String[] args){
String[] strs = {"ab", "abc", "cde", "abef"};
isPrefix(strs);
}
publicstaticvoidisprefix(String[]strs){
对于(inti=0;i我相信你是对的。只是K不完全是
但是粗略地说,这样说是可以的
而且它是K*n*(n-1)/2
,因为您不检查所有
有序的一对字符串(只检查其中的一半)。
在你的例子中,你检查了6对夫妇,而不是12对
请注意,如果字符串长度介于100万到200万个字符之间,
但你的n只是说20、50或100,然后K占上风,这个估计值
要小心地解释。通常人们会期望n>>K,
我想这也是你的想法。可能是个愚蠢的问题(而且完全离题了)如果你添加或删除你的数组中的单词,并且想检查前缀的时间很多,也许你应该考虑使用另一种数据结构,例如TIE:是的,尝试是更好的,但是对于BIGO分析,只有StastOffice是好的,但是这里只想写算法和分析。为什么你只检查HA?如果?一半是平均值?最坏的情况应该是K*n^2?一半是正常的。您不需要检查(strs[1],strs[0]),前提是您已经检查了(strs[0],strs[1])。