🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

3回答

2146閲覧

2分探索木の最小値探索で最も探索に手数のかかる順番

Morimokuseijin

総合スコア7

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2020/12/06 14:30

編集2020/12/06 14:39

2分探索木に関しての質問です。
空の木にデータ 1, 2, 3, 4, 5, 6, 7 をある順番で挿入して 2 分探索木を得る。このと
き,最小値の探索に最も手数のかかる(最も多くの節点を訪問しなければならない)よ
うな 2 分探索木が得られるのは,どのような順番でデータを挿入したときかを答えなさ
い。

解答:
1を一番最後に挿入したとき。

これで合ってますか?
よろしくお願いします。

もし間違っていましたら、正答をお願いします。

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

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

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

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

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

Y.H.

2020/12/06 15:07

> 1を一番最後に挿入したとき。 なぜこの回答に至ったか質問に記載できますか?
Zuishin

2020/12/07 01:54

本当にこれだけしか情報がないのであれば問題は成立していません。 恐らくあなたが欠席した授業にその他の条件があります。ここではなく友達に聞いてください。
guest

回答3

0

解答:
1を一番最後に挿入したとき。

これで合ってますか?
よろしくお願いします。

そのような問題文が出題されるときには,背景として「2分探索木への挿入というのはこれこれこういう処理である」という前提的な話が前もって与えられているハズと思うので,それに沿って考えれば良い.
(逆に言えば,その場に設けられているそういった前提を明示しなければ外部の者には答え難いということになる.)

さて,
「1を最後に挿入する」が正答か否かに関しては,1を最後とするパターンというのは何種類か考えられるから,それらのパターンを用いた挿入処理を実際に考えてみれば判定できるであろう.

例えば,
今私の頭の中にあるシンプルな挿入処理で考えてみる.
要素数が多いと話が面倒になるので,ここでは{1,2,3,4}の4要素だけの例で考えてみる.

  • 4,2,3,1 の順で挿入することを考えると,ルートが4になり,1の場所へのルートからの経路は 4→2→1 となる.
  • 2,3,4,1 の順で挿入することを考えると,ルートは2になり,1の場所へのルートからの経路は 2→1 となる.

この時点で1の深さが異なっているから,「1を最後に挿入する」では正答とはならないであろう.

投稿2020/12/07 01:44

編集2020/12/07 01:47
fana

総合スコア11990

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

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

0

2分探索木の組み上げ方は何種もあるので一意には定まらない。

投稿2020/12/06 14:35

episteme

総合スコア16612

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

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

Morimokuseijin

2020/12/06 14:37

ご回答ありがとうございます。 大学の授業の問題で、 問題 2.空の木にデータ 1, 2, 3, 4, 5, 6, 7 をある順番で挿入して 2 分探索木を得る。このと き,最小値の探索に最も手数のかかる(最も多くの節点を訪問しなければならない)よ うな 2 分探索木が得られるのは,どのような順番でデータを挿入したときかを答えなさ い。 という問題があるのですが、この場合はどのように解答すればよいのか、ご教授お願い致します。
episteme

2020/12/06 14:41 編集

いやだから、回答のとおり。 最も素朴(単純)な実装なら、そのデータ列を逆順に挿入したとき。 理由を考えるのはアナタ。
Morimokuseijin

2020/12/06 14:41 編集

ご返答ありがとうございます。 では、大学で出されている問題は成立しないということですか? 問題にその他の情報が一切ないものなので...
Morimokuseijin

2020/12/06 14:42

7654321で挿入したときということですか?
episteme

2020/12/06 14:42

大学で出されたのなら、問題に不備がある旨を説明すれば(心ある教師なら)合格にしてくれるんじゃないかな。
episteme

2020/12/06 14:43

> 7654321で挿入したときということですか? なぜそうなるかが説明できればいいんじゃない?
Morimokuseijin

2020/12/06 14:43

これでどうですか? 7654321で挿入したとき。
Morimokuseijin

2020/12/06 14:45

〇か×かで言うとどっちですか?
episteme

2020/12/06 14:48

「7654321で挿入したとき」に最も手数がかかるか否かはあなたが考えることでしょ?
Morimokuseijin

2020/12/06 15:00

当該サイトは、分からないことがあったら聞くという認識で活用させていただいております。 従って、 「「7654321で挿入したとき」に最も手数がかかるか否かはあなたが考えることでしょ?」 という解答は不適切なものであると思います。自身で考えて分かるものは、こちらのサイトで質問などはしません。 今回の件は、次週の授業で解答が発表されると思われますので、しっかり、正答を発表させていただきます。では、この件においては、失礼いたします。 ご回答ありがとうございました。次回も機会があればよろしくお願いします。
episteme

2020/12/07 03:31 編集

> 自身で考えて分かるものは、こちらのサイトで質問などはしません。 https://teratail.com/help/avoid-asking ↑ココをご一読ください。 「何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。 問題や質問は実際に調査や作業に取り組み、具体的なところで生まれると考えるためです。 まずは実際に作業に取り組み、つまづいたところで投稿をしてみてください。」とあります。 二分探索木に要素を挿入/検索するコードを書いたことあるなら、 どんな場合に検索手順が大きくなるか理解できるはずですから。
guest

0

最小値の探索に最も手数のかかる(最も多くの節点を訪問しなければならない)よ

うな 2 分探索木が得られるのは,どのような順番でデータを挿入したときかを答えなさ
い。

2分木の実装を、要素を追加したときにそのノードの値より小さい値は左、大きい値が右に追加するという実装と仮定します。
最小値を探す場合は、値が小さいノードが左側にあるので、全ノードを探索する必要はなく、左側のノードを葉に到達するまで辿っていけばよいことがわかります。
「最小値の探索に最も手数のかかる」ということは「左側のノードを辿っていったときの深さが最大」ということで、「全部の値が左側にぶら下がっているような木が作成される要素の挿入順序」が答えです。

そのような2分木が作成される挿入順序は「7, 6, 5, 4, 3, 2, 1」で深さが「7」となる一通りです。

1を一番最後に挿入したとき。

1を最後に挿入の条件だけではだめです。
例えば、(6, 2, 7, 4, 3, 5, 1) とした場合、深さ3なので、深さが最大とはなりません。

イメージ説明


頭でイメージするのが難しい場合は、実際にプログラムを書いて確かめてはどうでしょうか。
要素数7ということは、7!=5040通り試せば答えが見つかるので、全探索でも計算可能です。

投稿2020/12/07 02:17

編集2020/12/07 02:18
tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問