Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでKソートされたリストをマージするプログラム


いくつかのリストがあるとすると、これらのリストはソートされています。これらのリストを1つのリストにマージする必要があります。これを解決するために、ヒープデータ構造を使用します。したがって、リストが[1,4,5]、[1,3,4]、[2,6]の場合、最終的なリストは[1,1,2,3,4,4,5,6]になります。 。

これを解決するには、次の手順に従います-

  • n:=リストのサイズ
  • ヒープ:=新しいリスト
  • インデックスiとリストの行[i]ごとに、
      を実行します。
    • 行が空でない場合、
      • ヒープに(row [0]、i、0)を挿入します
  • res:=新しいリスト
  • ヒープが空でない間は、
    • num、row、col:=ヒープの最上位要素
    • resの最後にnumを挿入
    • if col<リストのサイズ[行]-1、then
      • リスト[row、col + 1]、row、col+1をヒープに挿入
  • return res

理解を深めるために、次の実装を見てみましょう-

import heapq
class Solution:
   def solve(self, lists):
      n = len(lists)
      heap = []
      for i, row in enumerate(lists):
         if row:
            heapq.heappush(heap, (row[0], i, 0))
         res = []
         while heap:
            num, row, col = heapq.heappop(heap)
            res.append(num)
         if col < len(lists[row]) - 1:
            heapq.heappush(heap, (lists[row][col + 1], row, col + 1))
      return res
ob = Solution()
lists = [[],[],[11, 13],[],[4, 4, 14],[4],[11],[1, 8]]
print(ob.solve(lists))

入力

[[],[],[11, 13],[],[4, 4, 14],[4],[11],[1, 8]]

出力

[1, 4, 4, 4, 8, 11, 11, 13, 14]

  1. 反復マージソート用のPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、反復によるマージソートの概念を使用して配列をソートする必要があります。 ここでは、最大の要素を最後に配置します。これは、配列がソートされるまで繰り返されます。 次に、以下の実装のソリューションを見てみましょう- 例 # iterative way def mergeSort(a):    current_size = 1    # traversing subarrays    while current_size <

  2. ヒープソート用のPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、ヒープソートの概念を使用して配列を並べ替える必要があります。 ここでは、最大の要素を最後に配置します。これは、配列がソートされるまで繰り返されます。 それでは、以下の実装のソリューションを見てみましょう- 例 # heapify def heapify(arr, n, i):    largest = i # largest value    l = 2 * i + 1 # left    r = 2 * i + 2 #