2015-02-02 4 views
-2

Моя цель - убедиться, что временная сложность операции цикла for не превышает длину обеих строк. Таким образом, в этом примере O (m-n) не может быть больше O (28), если бы я считал правильным. Я почти уверен, что это точно так же, как длина, но я не очень хорошо знаком с Time Complexity.Как вычислить сложность времени

Итак, мой вопрос в том, какая временная сложность для циклов for?

Итак, я понял, что временная сложность m * n, которая будет больше длины обеих строк. Я знаю, что он нахмурился, но кто-нибудь может понять, как его уменьшить?

Чтобы быть ясным, программа проверяет строку String, чтобы увидеть, содержит ли она какие-либо символы в наборе строк. Если он соответствует, программа должна печатать индекс первого совпадения, чем выход. Это еще одно заявление, которое я собираюсь добавить позже.

Код:

String str = "ThisIsTesTingComplexity"; 
String set = "t9123"; 

for(int j = 0;j<str.length();j++) 
    for(int i = 0;i<set.length();i++) 
     if(str.charAt(j)==set.charAt(i)) 
      System.out.print(j);    

ответ

0

Здесь вы явно имеющие O(n*m) временную сложность в. Просто подсчитайте количество итераций ваших циклов: для каждой итерации первого цикла второй цикл выполняет m итераций и содержит n итераций первого цикла. CQFD.

+0

Да, я понял после дальнейшего поиска. Теперь я не знаю, как еще уменьшить временную сложность. Мне нужно избавиться от квадратичного, как ..... ..... –

+0

Программа проверяет строку String, чтобы увидеть, содержит ли она какие-либо символы в наборе строк. Если он соответствует, программа должна печатать индекс первого совпадения, чем выход. Это еще одно заявление, которое я собираюсь добавить позже. –

+0

И есть ли особая причина, почему вы не используете реальный 'Set' вместо String? По крайней мере, вы можете использовать отсортированный 'char []' он все равно будет лучше – Dici

Смежные вопросы