- 締切済み
アルゴリズムによる整列方法について
以下の問題を授業外課題として出されましたがわかりません。身近に分かる人物もいません。 先生も答えてくれません。 解答お待ちしております。 1.以下の文章の空欄を埋めよ.但し,((14)),((15)) については,選択肢から最も適切なものを選び,記号で答えよ.加えて,解答の過程を詳しく述べよ。 高速な整列として以下のアルゴリズムによる方法を考える.以下では,整数データを昇順に配列するも のとする. 前段階として,データを半々に二つのグループ I と II に分割し,それぞれを独立に整列する. while (両グループに要素が残っている) do if (グループ I の最小要素 < グループ II の最小要素) then グループ I の最小要素を出力場所に移し,グループ I からは削除する else グループ II の最小要素を出力場所に移し,グループ II からは削除する endif done while (グループ I に要素が残っている) do グループ I の要素を出力場所に移し,グループ I からは削除する done while (グループ II に要素が残っている) do グループ II の要素を出力場所に移し,グループ II からは削除する done この整列に要する計算量 T(n) を求める.但し,n は整列するデータの量である.前段階の整列では,半分のデータ量の整列を 2 回行うので ((1)) だけの計算を要する.次に,3 個の while 反復のいずれについても, 「反復を 1 回行うごとに要素が一つだけ出力場所に移動する」 ことから,3 個を合計すると反復の中身は正確に ((2)) 回実行されることが分かる.1 回の実行に a だけの時間がかかるものとすれば,全体で ((3)) となる.従って次の関係式が成り立つ. T(n) = ((4)) 簡単のため,n = 2^p であるとすると, T(n) = ((5))×T(2^((6)) ) + ((7)) = ((8)) × T(2^((9)) ) + 2 × ((7)) ・ ・ ・ = ((10)) × T(2^0) + ((11)) T(2^0) = ((12)) なので,T(n) を a と n のみを用いて表すと, T(n) = ((13)) であり,これは, ((14)) に比例し,計算量のオーダーは ((15)) といえる. ((14)),((15)) の選択肢 a. n b. n^2 c. 2^n d. n log n e. log n f. いわゆる「指数オーダー」であり,アルゴリズムとして全く実用に耐えない g. いわゆる「バカソート」と同じであり,n がごく小さい場合を除いて実用には適さない h. 経験上最速とされるソート法には及ばないが,それほど大きくない n に対しては実用に耐える i. 経験上最速とされるソート法と同じであり,十分大きい n に対しても実用に耐える
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
- kmee
- ベストアンサー率55% (1857/3366)
- Tacosan
- ベストアンサー率23% (3656/15482)
お礼
#1さんにもお答えしたとおり、全く分からないのです。最初から、何を言っているのかわかりません。 前段階の話からついていけません。 前段階で整列?が必要なのでしょうか? 何回?それはどのようにすれば求まりますか?(n-2)回とかでしょうか? 14と15の選択肢ですが、選択肢を見た感じ、片方(14)にlogなどが入り、もう片方(15)は言葉だろうな、という漢字のレベルでは認識していました。