如何分析以下代码的时间复杂度?

时间:2018-09-25 05:48:19

标签: java algorithm time-complexity

class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = '__all__' def to_representation(self, instance): rep = super(UserSerializer, self).to_representation(instance) rep['company_name'] = instance.company_name.name return rep还是O(n^6)

O(n!)

分析:

public boolean isScramble(String s1, String s2) { 
    return isScramble(s1, 0, s1.length(), s2, 0); 
} 

private static boolean isScramble(String s1, int begin1, int end1,
                                  String s2, int begin2) { 
    final int length = end1 - begin1; 
    final int end2 = begin2 + length; 

    if (length == 1) return s1.charAt(begin1) == s2.charAt(begin2); 

    for (int i = 1; i < length; ++i) 
        if ((isScramble(s1, begin1, begin1 + i, s2, begin2) && 
             isScramble(s1, begin1 + i, end1, s2, begin2 + i)
            ) || 
            (isScramble(s1, begin1, begin1 + i, s2, end2 - i) && 
             isScramble(s1, begin1 + i, end1, s2, begin2))) 
           return true; 

    return false; 
} 

1 个答案:

答案 0 :(得分:-1)

尝试这样的事情:

private static int ord = 1;

public boolean isScramble(String s1, String s2) { 
    boolean b = isScramble(s1, 0, s1.length(), s2, 0);
    System.out.println("The order is: " + [insert your classname here].ord);
    return b;
}

private static boolean isScramble(String s1, int begin1, int end1, String s2, int begin2) { 
ord++;
final int length = end1 - begin1;

然后使用递增的字符串大小(n)运行它,并记下ord如何随n增加。这将为您提供正确的O标记。基本上,您只需计算递归函数被调用的次数。