@ Притам Банерджи написал -
O(N( nlogn + n))
, что фактически составляет O(Nlog(n))
На самом деле это не так .
Я описываю это более четко вместе с кодом.
N=int(input())
for _ in range(N): # O(N)
S=0
n=int(input())
# The following line is O(n)
A=list(map(int, input().split()))[:n] #Assume amount of inputs to be strictly of n numbers
# This line is also O(n)
B=list(map(int, input().split()))[:n]
A.sort();A.reverse() # this is O(nlog(n))
B.sort();B.reverse() # this is also O(nlog(n))
for i in range(0,len(A)): # Here range is n (same as len(A)) # this is O(n)
if A[i]>=B[i]:
S=S+B[i]
else:
S=S+A[i]
print(S)
Итак, в целом O(N( n + n + nlog(n) + nlog(n) + n)
Мы можем рассчитать следующим образом -
O(N( n + n + nlog(n) + nlog(n) + n)
= O(N( 3n + 2nlog(n))
= O(N (n + nlog(n)) (we can eliminate const number when determining complexity)
= O(N(nlog(n)) (as n > nlog(n), so we can eliminate the small part)
= O(N*nlog(n))
Таким образом, общая сложность составляет O(N*nlog(n)
, , а не O (Nlog (n) .
Есть большая разница между O(N*nlog(n)
и O(Nlog(n)
.
Надеюсь, что это post вам очень поможет.
Спасибо.