跳到主要内容

電気通信大学 情報理工学研究科 情報学専攻 2021年8月実施 選択問題 アルゴリズムとデータ構造

Author

祭音Myyura (co-authored with GPT 5.6 SOL)

Description

配列で表した最大ヒープに対する下向き調整関数 algo、ヒープソート algo1、ボトムアップ構築 algo2 を追跡せよ。また、先頭 kk 要素を用いて第 kk 小要素を求める algo3 の空欄を補え。使用する配列は

A=(30,28,23,20,25,19,21,8,6,15,11,4,9,12,2),B=(20,19,16,15,18,14,8),X=(35,15,40,20,55,5,65,25,45,70,30,45,50,10,60)\begin{aligned} A&=(30,28,23,20,25,19,21,8,6,15,11,4,9,12,2),\\ B&=(20,19,16,15,18,14,8),\\ X&=(35,15,40,20,55,5,65,25,45,70,30,45,50,10,60) \end{aligned}

である。

题目描述

追踪最大堆的下滤、堆排序和自底向上建堆过程,并补全利用大小为 kk 的最大堆求第 kk 小元素的程序。

Kai

1.

0 始まりの添字より、

(a) 12,(b) 25,(c) 8 個.\boxed{\text{(a) }12,\qquad \text{(b) }25,\qquad \text{(c) }8\text{ 個}}.

2.

根を 1010 にして下向き調整すると、交換は

1028,1025,101510\leftrightarrow28,\qquad 10\leftrightarrow25,\qquad 10\leftrightarrow15

の 3 回である。したがって、

A=(28,25,23,20,15,19,21,8,6,10,11,4,9,12,2)\boxed{ A=(28,25,23,20,15,19,21,8,6,10,11,4,9,12,2)}

であり、(S) の実行回数は 3\boxed{3} 回である。

3.

各回の algo 実行後は次のとおりである。

nn(S) の回数配列 BB
52(19,18,16,15,8,14,20)(19,18,16,15,8,14,20)
42(18,15,16,14,8,19,20)(18,15,16,14,8,19,20)
31(16,15,8,14,18,19,20)(16,15,8,14,18,19,20)
21(15,14,8,16,18,19,20)(15,14,8,16,18,19,20)
11(14,8,15,16,18,19,20)(14,8,15,16,18,19,20)
00(8,14,15,16,18,19,20)(8,14,15,16,18,19,20)

よって最終的に昇順に整列される。

4.

X=(70,55,65,45,35,50,60,25,20,15,30,45,5,10,40)\boxed{ X=(70,55,65,45,35,50,60,25,20,15,30,45,5,10,40)}

となる。algo2 は、葉でない節点を添字の大きい順に下向き調整するため、配列をボトムアップに最大ヒープへ変換する。

5.

先頭 kk 要素を最大ヒープとして保つ。根より小さい要素を見つけたときだけ根と交換し、先頭 kk 要素を再びヒープ化すれば、走査後の根は第 kk 小要素となる。したがって、

(1) >,(2) a,0,k1.\boxed{\text{(1) }>,\qquad \text{(2) }a,\,0,\,k-1}.