2016-06-27 5 views
-4

У меня простая функцияУлучшить tempral сложность алгоритма

bool function(int*a,int n) 
{ 
    for(int i = 0; i<=n-1;i++) 
    if(a[i]==i) 
     return true; 
    return false; 
} 

, где a является отсортированный вектор, который содержит различные элементы и п является размер вектора.

Мне нужно улучшить временную сложность этого алгоритма. Моя первая мысль заключалась в использовании бинарного поиска, но я могу выяснить, как сделать рекурсию работой в этом случае. В основном функция проверяет наличие элемента в отсортированном массиве, для которого индекс равен элементу.

+1

«улучшить временную сложность»? Вы имеете в виду «уменьшить асимптотическое время выполнения»? – duskwuff

+0

@ duskwuff yes ... что-то вроде этого –

+0

Вы пытались изменить настройки оптимизации компилятора? –

ответ

3

Не предлагая полного решения, вы на правильном пути с бинарным поиском. Некоторые советы:

The A [я] 's различны и увеличивающиеся целые

Если [я] больше, чем я в какой-то момент, что это значит для [J], где J> я? (начинаются с [i + 1] по сравнению с i + 1)

Аналогично, если a [i] < i, что это означает для [j] для j < i?

Сложите эти факты вместе. Что это значит, когда a [i] «пересекает» i? Как вы находите, где это происходит?

+0

Это первая из многих лет: ответ, который пытается научить, как ловить рыбу (против раздачи «Филт-О-Рыба»), которая не получает мгновенно проголосовавшего за * «не предоставление решения» *. +1 для * * пересечения * * изображения. – IInspectable

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