) Я пытаюсь найти временную сложность этой функции в тета-нотации. Теперь n - положительное целое число, а lst - это список с двумя числами.
(define (func n lst)
(if (= n 0) lst
(accumulate append null
(map (lambda (x)
(func (- n 1) (list x x)))
lst))))
Как вы знаете, временная сложность добавления равна (n), где n - общий размер списков. Я попытался увидеть, что произойдет, если я буду рассматривать добавление и накопление как функции Θ (1), тогда я получаю:
T (n) = 2T (n-1) + Θ (1), что равно -> Θ (2 ^ n)
Означает ли это, что фактическая временная сложность этой вещи в тета-нотации намного больше, чем Θ (2 ^ n)?
Я даже не уверен, что прав только с этим предположением, и в любом случае, я не знаю, что делать, если мне нужно принять во внимание и накопление, и добавление ...
Я потратил на это время зря, и я действительно не понимаю, почему я не могу понять это я сам ... Любая помощь будет с удовольствием оценена.
кстати, вот код накопления:
(define (accumulate op init lst)
(if (null? lst)
init
(op (car lst)
(accumulate op init (cdr lst)))))