DBMSプロジェクトの外部マージソートを実装しようとしています。私はそれぞれ20ページで3つのファイルを持ち、バッファサイズは20ページです。 これらはそれぞれ私が今ソートしています。したがって、20ページの3つのファイルすべてがソートされます。今私は各ファイル(6x3 = 18ページ)と1ページの6ページを持って来る必要が合併中の出力を書き込む。そして、これは完全なファイルをソート済みにするために4回行わなければなりません。 しかし、これらのファイルをすべてマージするのは難しいですか?任意のステップすべてのページがバッファサイズに持ち込まれることを確認する3ファイルのマージを実行する方法。すべての再帰関数? すべてのファイルの内容は配列a [fileno] [pageno]形式で格納されます 例a [1] [20] = 5は、ファイル1の20ページ目に5というデータがあることを意味します。 ファイルのページが整数を保持していると仮定します。外部マージソート
Q
外部マージソート
-1
A
答えて
1
3ウェイマージを行うと仮定すると、それは3つの入力と1つの出力であり、1回だけ行う必要があります。バッファーを4ページに分けて、それぞれ5ページ。 3ファイルの最初の5ページを読み込み、それぞれを5ページバッファに読み込みます。 3つのバッファのそれぞれの最初のレコードを比較して3つの方法のマージを開始し、最小のものを出力バッファに移動します。出力バッファがいっぱいになると(5ページ)、書き出して続けます。入力バッファが空になったら、そのファイルの次の5ページを読み込みます。
3つの入力ファイルのいずれかの終わりに達すると、コードは2ウェイマージに切り替わります。コードを単純化するには、ファイル関連のパラメーターをファイル0とファイル1のパラメーターにコピーします。ファイル2が最初に空になったら、何もする必要はありません。最初にファイル1が空になったら、ファイル2のパラメータをファイル1にコピーします。ファイル0が最初に空になったら、ファイル1のパラメータをファイル0にコピーし、ファイル2のパラメータをファイル1にコピーします。次に、ファイル0とファイル1を使用して2ウェイをマージします。
2つの入力ファイルの終わりに達すると、残りのファイルをコピーするようにコードが切り替わります。ファイル0が最初に空になったら、ファイル1のパラメータをファイル0にコピーします。その結果、コピーコードは常にファイル0で動作します。
関連する問題
- 1. マージソート - 範囲外のベクトルのサブスクリプト
- 2. マージソート
- 3. Java、マージソート
- 4. マージソート順(
- 5. マージソートのpython 3
- 6. 反復Javaマージソート
- 7. 文字のマージソート
- 8. Haskellのマージソート
- 9. マージソートの問題
- 10. 不正なマージソート
- 11. 再帰的マージソートC++
- 12. Javaマージソートの実装
- 13. C++マージソートの問題
- 14. 再帰マージソートとPython
- 15. マージソートのベース条件
- 16. マージソート(セグメンテーションフォールト(Xore Dumped))C++
- 17. 変更されたマージソートの実行時間とマージソートの比較
- 18. 3方向マージソートCプログラム
- 19. Pythonのマージソートの問題
- 20. 間違ったマージソート結果
- 21. 分析マージソートの複雑
- 22. マージソートや用語の定義
- 23. マージソートによるオブジェクトプロパティのソート
- 24. マージソートを使用するスキームベクトル
- 25. マージソート(N * [N]をログ)ランタイム
- 26. 配列インデックスバインドされたマージソート
- 27. (C++)マージソートの実行時間
- 28. パラレルマージを伴う並列マージソート
- 29. 反復/非再帰マージソート
- 30. C:結合リストのマージソート