2013-07-28 2 views
0

Я изо всех сил пытаюсь обмотать голову, выработав большое количество символов из кода.Big-O Обозначение и кодирование

Я понимаю основные шаги, т.е.

for (int i = 0; i < n; i++) будет O (п)

И

for (int i = 0; i < n; i++) 
    for (int j = 0; j < n; j++) 

будет O (п)

Я борюсь понять, где и как рассчитать логарифмические значения.

т.е.

Будет:

for (int i = 0; i < n * 2; i++) быть O (журнал N) или O (п § п) или O (журнал 2n) и т.д.

Может кто-то пожалуйста, продемонстрировать в виде кода в качестве примера и как была сформирована нотация.

Я исследовал и продолжаю получать примеры, когда сортировка касается, и списки измельчаются и т. Д., Что имеет смысл в форме, но я, похоже, не получаю, как применять это код, как указано выше.

Я новичок во всем кодировании и большой нотации.

Я знаком с объектами, классами, циклами, функциями, структурами и т. Д. Я занят изучением C++, поскольку это часть моего курса. Мой учебник не объясняет логарифмические вычисления большого числа очень хорошо или почти полностью.

+0

Ваш вопрос будет, вероятно, получите лучший ответ на http://programmers.stackexchange.com/. – BLaZuRE

+0

Это 'O (n)', так как вы делаете шаги «2n». –

+0

логарифм появляется, когда вы начинаете делить интервал, например. поиск дихотомии; когда вы работаете с сбалансированными деревьями (обрезать левую или правую ветви) и т. д. –

ответ

1

Можно представить код в виде рекуррентного соотношения:

T(n) = T(n-1) + 2 * c, where c = the inner part of the code,

, который мы будем делать 2 * n раз.

Предоставление нам решения, как: T(n) = 2 c n + c_1, where c_1 a constant

А поскольку 2 * c является постоянным, а второе слагаемое, а также постоянная спадает, мы можем написать:

O(n)

+0

Здравствуйте, добавьте в код некоторое форматирование, чтобы его было легче читать/понимать. Посмотрите [здесь] (https://stackoverflow.com/help/formatting) для получения дополнительной информации. – Chaithanya

+0

Спасибо, хорошие указатели. –

+0

Конечно, добро пожаловать! – Chaithanya

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