2015-10-28 10 views
-3
def sumarray(a) 
    q = Queue.new 
    for i in 0..(a.length-1) 
     q.enqueue(a[i]) 
    end 
    sum = 0 
    while q.length > 0 
     sum = sum + q.dequeue 
    end 
    return sum 
end 

Предположим, что реализация очереди используется в приведенном выше алгоритме:Стек и очередь сложность,

операции Enqueue представляет собой О (1) операции Dequeue представляет собой О (к), где к есть число элементов в настоящее время очередь Принимая во внимание операции очереди, какова общая сложность алгоритма для sumarray?

Может кто-нибудь объяснить, как сложность получается? Благодаря!

+0

Это где я должен нарисовать линию и сказать, идут Google большое обозначение O , Там объясняется слишком много информации. Пусть Google покажет вам дорогу. –

ответ

0

Это, надеюсь, очевидно, что это первый цикл О (п), где п = a.length

for i in 0..(a.length-1) 
    q.enqueue(a[i]) 
end 

Второй цикл выполняется n раз, и q.dequeue О (п) так, что дает нам O (п)

while q.length > 0 
    sum = sum + q.dequeue 
end 

Таким образом, общая сложность является худшим из тех, что о (п)

Теперь вы можете сказать, что с q уменьшается каждая итерация, этот аргумент упрощается. Так что давайте суммируем все сложности q.dequeue.

O(n) + O(n-1) + O(n-2) + O(n-3) ... O(1) 

Это похоже на последовательность треугольных чисел? Таким образом, мы знаем формулу

n + (n-1) + (n-1) + ... + 1 = n*(n+1)/2 

или

(n*n + n)/2 

Отбросив постоянный коэффициент и меньшая сложность порядка оставляет n*n

+0

Я думаю, что это то, что вы повторяете n раз. Или k раз в случае проблемы. Таким образом, dequeue является частью процесса итерации. Вы все еще выполняете шаги O (n) в реальном цикле. Тот факт, что шаги на каждой итерации цикла также принимают O (k), поскольку шаг dequeue дается принять время O (k), что заставляет его перейти к O (k^2). Таким образом, мы выполняем k шагов на каждой итерации для k итераций. Это будет равно k * k = k^2. Я все еще думаю, что он должен это сделать, чтобы увидеть столько примеров, сколько ему нужно. –

+0

Мой плохой, я имел в виду, что ей нужно. Проклятие быть разработчиком. Иногда мы забываем, что в человеческом роде есть еще один секс. К счастью, в офисе они становятся все реже и реже. Очень приветствуемое изменение :). –

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