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]
-
反復マージソート用のPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、反復によるマージソートの概念を使用して配列をソートする必要があります。 ここでは、最大の要素を最後に配置します。これは、配列がソートされるまで繰り返されます。 次に、以下の実装のソリューションを見てみましょう- 例 # iterative way def mergeSort(a): current_size = 1 # traversing subarrays while current_size <
-
ヒープソート用のPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、ヒープソートの概念を使用して配列を並べ替える必要があります。 ここでは、最大の要素を最後に配置します。これは、配列がソートされるまで繰り返されます。 それでは、以下の実装のソリューションを見てみましょう- 例 # heapify def heapify(arr, n, i): largest = i # largest value l = 2 * i + 1 # left r = 2 * i + 2 #