ヒープ操作
次のコードを実行したときの出力として、正しいものを1つ選べ。
import heapq
h = []
for x in [5, 1, 3]:
heapq.heappush(h, x)
print(heapq.heappop(h), h[0])
- A
5 1 - B
1 5 - C
3 1 - D
1 3
正解と解説を見る
正解:D
ヒープは、h[0] が常に最小値になるリスト。heappush・heappop はどちらも O(log n)。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `import heapq` | — |
| 2 | `h = []` | h = [] |
| 3 | `for x in [5, 1, 3]:` | x = 5 |
| 4 | `heapq.heappush(h, x)` | h = [5], x = 5 |
| 5 | `for x in [5, 1, 3]:` | x = 1 |
| 6 | `heapq.heappush(h, x)` | h = [1, 5], x = 1 |
| 7 | `for x in [5, 1, 3]:` | x = 3 |
| 8 | `heapq.heappush(h, x)` | h = [1, 5, 3], x = 3 |
| 9 | `for x in [5, 1, 3]:` | x = 3 |
| 10 | `print(heapq.heappop(h), h[0])` | h = [3, 5] |
| 結果 | 実際の出力 | 1 3 |
- A
誤り。最小値が取り出される。
- B
誤り。次の最小値は 3。
- C
誤り。先に取り出されるのは最小の 1。
- D
正しい。
heappopは最小値を取り出し、残りの先頭(h[0])が次の最小値。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。