Home > 一般 > 問題が気に食わん

問題が気に食わん

  • 2013-08-20 (Tue) 13:47
  • 一般

院試に二分探索木の実装に関する問題が出てたのだけど,「既存の木に与えられた要素を挿入する関数を実装せよ」という問題の後に「その実装を使った時,次の配列のうち,その要素を順番に挿入した時に下図の木になるのはどれか?」という問題があった.手前の要素挿入の実装には特に制限が書かれておらず(二分探索木であればいい),「木と要素を取って木を返す」という関数の型が決まっているだけで.

前半の挿入の実装に関して想定される解答は,ルート要素との大小関係で左または右に降りてって葉っぱに要素を追加して戻るという実装だろう.普通はこれを答えるはず.だけど,要素挿入に関する仕様が特に定められていないので,例えば「一直線の木にして挿入ソートする」という実装も正解になる.もちろんローテーションして平衡化しても正解には変わりないはず.ぶっちゃけ同じ要素を格納する二分木なんぞ大量にあるので,その構築方法もたくさん考えられる.でもまあ,その内どれかを答えておけば前半は正解.

んで問題,というか変なのが後半.前半の解答が出題者の想定通りの場合には,後半の問題で与えられる配列達のうちひとつのみが与えられた木にちょうど対応し,この問題に正答できる.が,前半で想定外の実装を答えておくと,後半で与えられた全ての配列に対して与えられた木を生成できず,答えが無くなって詰む.問題に出ていた木は一直線ではなく,したがって,例えば一直線の木にして挿入ソートするという実装を前半で答えておいた場合,前半は正解だが後半は問題が成立しないという状況に陥る.

まあ,次の問題で困るような奇抜な回答をするなという意図なのかも知れんけど.後ろの問題を考慮して前半の問題の(非常識な)正答を破棄しなければならないとかいう問題構成は如何なものか.もうちょい想定外への配慮が必要な気が……

★下記に2つの英単語をスペースで区切って入力してください

Home > 一般 > 問題が気に食わん

Search
Feeds

Page Top