ソートされた配列をマージするアルゴリズムを作成する必要があります。ここに私がやったことです:ソートされた配列アルゴリズムをマージする
import sys
lists = [[1,2,3],
[-100, 70],
[23, 50]]
pivot = [0] * len(lists) # [0, 0, 0]
finalSorted = []
for _ in range(sum(len(x) for x in lists)): # quantity of items in 2D array
smallest = sys.maxint
index_of_smallest = -1
for indx, list in enumerate(lists):
if pivot[indx] < len(list):
current = list[pivot[indx]]
if current <= smallest:
smallest = current
index_of_smallest = indx
finalSorted.append(smallest)
pivot[index_of_smallest] = pivot[index_of_smallest]+1
print(finalSorted) #[-100, 1, 2, 3, 23, 50, 70]
質問:
- が、これはこれを行うための最善の方法ですか?
- アルゴリズムの複雑さは
kn^2
ですか?ここで「k」は平均配列長であり、n
は配列数です。 k
がはるかに大きく、n
より大きい場合にのみ適していますか?そのようなk
とn
のポイントはどこにありますか?
ヒープ付きの方が良いソリューションだと思います。 012Hを使用して、 –
http://www.geeksforgeeks.org/merge-k-sorted-arrays/ 'O(kn * logk)'。 –