当たるかもしれない競馬予想

あまり当たらないけど、たまに当たる競馬予想です。
ちょっとプログラムのことも書こうかな

情報処理試験(H20春) ソフトウェア開発技術者 午前問9~10

2008-04-30 | 情報処理
問9 葉以外の節点はすべて二つの子を持ち、根から葉までの深さがすべて等しい木を考える。この木に関する記述のうち、適切なものはどれか。深さとは根から葉に至るまでの枝の個数を表す。

ア 枝の数がnならば、葉を含む節点の個数もnである。
イ 木の深さがnならば、葉の個数は2^(n-1)
ウ 節点の個数がnならば、深さはlog2nである。
エ 葉の数がnならば、葉以外の節点の個数はn-1である。

解答


解説
これもよくでる木の問題ですねぇ。私は大嫌いです。
一応問題文の木は図のようなものでしょうかねぇ。
と一応図は貼っておきますが、まぁ、小さくて見えないので、念のためこんなものも書いてみました。

(*に意味はありません。Web表示したときに変にならないようにしただけの文字です。)


├───────────┐
│**********************│
節**********************節
│**********************│
├────┐************├─────┐
│********│************│**********│
節********節************節**********節
│********│************│**********│
├─┐****├─┐********├─┐******├─┐
│**│****│**│********│**│******│**│
葉**葉****葉**葉********葉**葉******葉**葉

この図は、問題文で言えば、深さが3の木を表しています。
これで選択肢を検証してみましょう。

ア 枝の数がnならば、葉を含む節点の個数もnである。
検証
枝の数は、2+4+8=14になります。
対して、節の個数は、1+2+4+8=15になります。
よって、誤りとなります。

イ 木の深さがnならば、葉の個数は2^(n-1)
検証
深さは3です。葉の数は8ですから、8=2^3!=2^(3-1)
よって、誤りとなります。

ウ 節点の個数がnならば、深さはlog2nである。
検証
節点の個数は、選択肢アで検証したとおり15です。
log215はちょっと求めづらいですねぇ。
15は2^3と2^4の間にあるので、
log215は3から4の間の数になります。
何となく正しいような間違っているような。

エ 葉の数がnならば、葉以外の節点の個数はn-1である。
検証
葉の数は8個です。拝外の節点数は7=8-1です。
何となく正しそうな気がします。
じつは、これが正解なんですねぇ。
「葉以外の節点はすべて二つの子を持ち、根から葉までの深さがすべて等しい木」なので、葉の数は、等比数列になり、具体的には、初項が1、公比が2の等比数列になります。
ただし、初項は深さ0の葉の数を表します。

よって深さと葉の数は以下の式で求められます。

An = 2^n An:葉の数 n:深さ

また、深さnの(葉を含む)節点の数は、公比数列の和で求められるので、以下のように求められます。

Sn-1 = (1-2^(n+1))/(1-2) = 2^(n+1)-1

ここで問題文の葉以外の節点数は2^(n+1)-1-2^nで求まります。この式を変形します。

2^(n+1)-1-2^n = 2*2^2-1-2^n=2^n(2-1)-1 = 2^n-1

となります。2^nは葉の数なので、葉の数-1が葉以外の節点の数になります。
よって、選択肢エが正解になります。
ちなみに各選択肢を正解にする文章は多分以下の通りでしょう。

ア 枝の数がnならば、葉を含む節点の個数はn+1である。
イ 木の深さがnならば、葉の個数は2^n
ウ 葉の個数がnならば、深さはlog2nである。

難易度(1(易)~5(難))
3 私が苦手と言うのも含めて、こんなもんでしょう。


問10 ビット列X1X2X3X4X5X6X7X8X9=010111111とY1Y2Y3=111に対して、次のアルゴリズムで表示されるkの変化はどれか。

k = 1;
d = 1;
while d ≠ 0;
print k;
if Xk ≠ Y1; ------(1)
d = 1;
esle if Xk+1 ≠ Y2; -----(2)
d = 2;
else if Xk+2 ≠ Y3; -----(3)
d = 3;
else
d = 0;
end if
k = k + d; ------(4)
end while;

ア 1,2,3,4
イ 1,2,4
ウ 1,3,4
エ 1,4

正解



解説
この問題は、愚直にやっていくしかないですねぇ。
最初にk = 1、d = 1になっているので、最初は1が表示されますねぇ。
次に(1)の条件式をチェックします。
Xk = X1 = 0
Y1 = 1
if Xk ≠ Y1は成立するので、d = 1に成ります。
(4)式で kは2になります。そして、2が表示されます。
また、(1)の条件式をチェックします。
Xk = X2 = 1
Y1 = 1
if Xk ≠ Y1は成立しないので、(2)の条件式をチェックします。
Xk+1 = X(2+1) = X3 = 0
Y2 = 1
if Xk+1 ≠ Y2;は成立するので、d = 2に成ります。
(4)式でkは4に成ります。そして、4が表示されます。

まぁ、ここまでで1,2,4と表示されるイが正解となります。

難易度(1(易)~5(難))
1


コメントを投稿