質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

2215閲覧

k番目に小さい数を出力する選択アルゴリズム

kentodebusu

総合スコア4

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/11/20 09:56

k番目に小さい数を出力する選択アルゴリズムのプログラムがわかりません
再帰を使ってやるらしいのですが全くわかりません
どなたか教えてください!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2019/11/20 10:11

再帰を使えっていう課題なんでしょうかね?
guest

回答2

0

ソートアルゴリズムは色々とありますが、
普通にソートをすれば、あとは k 番目に小さい値を取れば終了です。

例えばリストをクイックソートをして、k 番目に小さい値を取るというのは簡単そうです。
これも再帰を使っています。

ただ、恐らく題意としては、
二分ヒープを使って欲しいのかなと推測しています。

なぜなら全部をソートしなくても k 番目に小さい値を取れるので、
全てをソートするのに比べて、計算量が少し少なくて済むからです。

リストを heapify して、そのあと heappop を k 回せばいけますね。
heapify, heappop 共に再帰を使用しています。

python

1# 2# 対話モード >>> にコピペで 3# 実行できます。 4# 5from heapq import heapify, heappop 6heap = [3, 9, 4, 1, 6, 8, 0, 5, 2, 7] 7 8# heapify 9heapify(heap) 10 11# heappop 12k = 3 13for _ in range(k - 1): 14 heappop(heap) 15 16print(heappop(heap))
>>> print(heappop(heap)) 2 >>>

ソースコードは、ここ。

ソースコードの解説は、ここ。

ただこれだけでは説明が足りないかなと思います。
友達に相談して、乗り切ってください笑

投稿2019/11/20 10:43

編集2019/11/20 10:47
nico25

総合スコア830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

k番目に小さい数を知るためには、その数より小さい数をk-1個みつけて、他にはその数より小さい数がないという判断をしないといけません。
ということで、全体を昇順にソートして、そのk番目を見るということになります。
再帰は使う必要が無くて、ソートすればいいだけです。

投稿2019/11/20 13:48

otn

総合スコア84559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問