Извините, это вопрос из трех частей.Я продолжаю пытаться получить первую часть, и я думаю, что если я получу это, все остальное встанет на свои места, но мое время работы не совсем правильное.Я понимаю, что существует n итераций, но не то, как рассчитать количество итераций внутреннего цикла без использования значения j
. Рассмотрим следующую основную проблему.Вам дан массив A, состоящий из n целых чисел A [1], A [2], ... A [n].Вы хотите вывести двумерный массив B размером n на n, в котором B [i, j] (для i = j, поэтому не имеет значения, что выводится для этих значений.) Вот простой алгоритмрешить эту проблему.
For i=1, 2,...,n
For j=i+1, i+2, ... n
Add up array entries A[i] through A[j]
Store the result in B[i,]]
Endfor
Endfor
(a) Для некоторой функции f, которую вы должны выбрать, задайте границу формы O (f (n)) для времени выполнения этого алгоритма на входе размераn (т. е. ограничение числа операций, выполняемых алгоритмом).
(b) Для этой же функции f покажите, что время выполнения алгоритма на входе размера n также составляет ~ 2(е (п)).(Это показывает асимптотически жесткую границу ® (f (n)) во время выполнения.)
(c) Хотя алгоритм, который вы проанализировали в частях (a) и (b), является наиболее естественным способомрешить проблему - в конце концов, он просто перебирает соответствующие записи массива B, заполняя значения для каждого - он содержит некоторые крайне ненужные источники неэффективности.Дайте другой алгоритм для решения этой проблемы с асимптотически лучшим временем выполнения.Другими словами, вы должны разработать алгоритм со временем выполнения O (g (n)), где limn -> бесконечность g (n) / f (n) = O.