2013-02-25 7 views
3

У меня возникли проблемы с назначением относительно времени выполнения.Время выполнения для алгоритма, суммирующего целые числа

Заявление о проблемах: «Изабель имеет интересный способ суммирования значений в массиве A из n целых чисел, где n - степень 2. Она создает массив B, равный половине A, и множества B [i] = A [2i] + A [2i + 1], для i = 0,1, ..., (n/2) -1. Если B имеет размер 1, то она выдает B [0]. , она заменяет A на B и повторяет процесс. Каково время ее алгоритма? "

Будет ли это рассматриваться как O (log n) или O (n)? Я думаю, что O (log n), потому что вы продолжаете разделять массив пополам, пока не получите окончательный результат, и я считаю, что основа O (log n) заключается в том, что вы не проходите всю структуру данных. Однако, чтобы вычислить сумму, вы должны получить доступ к каждому элементу массива, что заставляет меня думать, что это может быть O (n). Любая помощь в понимании этого была бы весьма признательна.

ответ

2

Как вы поняли, вам нужно получить доступ ко всем элементам, чтобы вычислить сумму. Так что ваше предложение:

Я считаю, что основа O (журнал N) является то, что вы не пересекаете всю структуру данных

не держат. Вы можете смело игнорировать возможность использования алгоритма O(log n).

Что касается O(n) или что-то другое, вам нужно подумать о том, сколько операций будет выполнено в целом. George Skoptsov's answer дает хороший намек на это. Я просто хотел бы обратить внимание на факт (по собственному опыту), который, чтобы определить «время работы», нужно учитывать все: доступ к памяти, операции, ввод и вывод и т. Д. В вашем простом случае просмотр доступа (или количества сумм) может быть достаточно, но на практике у вас могут быть очень искаженные результаты, если вы не смотрите на проблему со всех сторон.

+0

Это, безусловно, домашнее задание ... Я думаю, нам следует избегать явного ответа на эти проблемы. –

+0

@GeorgeSkoptsov Я согласен, и я думаю, что ваш ответ был лучше моего.Было много обсуждений по мета-вопросам о том, как решать домашние вопросы, и я вспоминаю, что они должны рассматриваться как обычные вопросы. Но я мог ошибаться (или политика могла измениться) – mgibsonbr

+0

Хех, я не следую мета ... Я не согласен с этой политикой. Я могу понять, помогая кому-то двигаться вперед с проблемой, но не предоставляя решение человеку, которому явно было предложено вывести его на свой страх и риск. –

2

Я считаю, что основа O (log n) заключается в том, что вы не пересекаете всю структуру данных .

Нет оснований для убеждений или догадок. Пройдем через алгоритм мысленно. Сколько рекурсий будет для массива A размера n? Сколько сумм будет для каждой рекурсии (когда массив A имеет размер n)?

  • Первый запуск: n/2 сложений, n получает доступ к элементам A
  • .
  • .
  • .
  • Последний запуск: 1 суммирование, 2 доступ к элементам A

Сколько трасс есть общее? Когда вы суммируете это, какова максимальная мощность n?

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