У меня есть k отсортированных массивов, каждая длина n, и я хочу отсортировать их, чтобы был один отсортированный массив длины n * k. Я знаю, что могу многократно применять функцию слияния из сортировки слиянием. Однако я не понимаю, почему следующий код O (nk ^ 2) вместо O (nk). Я перебираю массив k один раз, и каждая подпрограмма слияния имеет линейное время по отношению к входным данным. Где я не прав? Как лучше понять время выполнения этого алгоритма?
def myMerge(left, right):
l, r = 0, 0
result = []
for i in left+right:
if left[l] <= right[r]:
result.append(left[l])
l += 1
if l >= len(left):
return result + right[r:]
else:
result.append(right[r])
r += 1
if r >= len(right):
return result + left[l:]
return result
#input
k = [[1,5,8],[2,7,9],[1,1,4]]
result = k[0]
for l in range(1,len(k)):
result = myMerge(result,k[l])