01専門模擬問題用紙表紙フォーマットA

Similar documents
プログラム言語及び演習Ⅲ

PowerPoint Presentation

Microsoft PowerPoint - algo ppt [互換モード]

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

Microsoft PowerPoint - kougi10.ppt

Microsoft PowerPoint - 05.pptx

Taro-2分探索木Ⅱ(公開版).jtd

Microsoft PowerPoint - 6.pptx

memo

Microsoft Word - 13

Microsoft PowerPoint - 06.pptx

Taro-2分探索木Ⅰ(公開版).jtd

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

PowerPoint Presentation

データ構造

模擬試験問題(第1章~第3章)

Microsoft Word - no206.docx

Taro-スタック(公開版).jtd

Taro-リストⅠ(公開版).jtd

Microsoft PowerPoint - 7.pptx

memo

第2回

第2回

Microsoft PowerPoint - ca ppt [互換モード]

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

memo

二分木の実装

Microsoft PowerPoint - algo ppt [互換モード]

memo

Microsoft PowerPoint - kougi11.ppt

Taro-再帰関数Ⅲ(公開版).jtd

alg2015-4r2.ppt

PowerPoint プレゼンテーション

Taro-再帰関数Ⅱ(公開版).jtd

PowerPoint Presentation

alg2015-6r3.ppt

PowerPoint Template

Prog1_10th

PowerPoint プレゼンテーション

CプログラミングI

Microsoft Word - no12.doc

Microsoft Word - 中間試験 その1_解答例.doc

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

gengo1-11

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

INTRODUCTION TO ALGORITHMS

kiso2-09.key

データ構造

memo

自己紹介 ( 専門分野 ) プログラミング言語の研究 特に基礎理論 研究の出発点 : 自分がうまくプログラムが書けないのを言語のせいにする プログラムの間違いを自動発見する仕組みを作る そもそも間違いを犯しにくいプログラミング言語を作る

Microsoft PowerPoint - prog07.ppt

DA13

Taro-リストⅢ(公開版).jtd

PG13-6S

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

プログラミングI第10回

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

情報処理Ⅰ演習

論理と計算(2)

Microsoft PowerPoint - prog13.ppt

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Microsoft Word - no205.docx

Microsoft Word - no11.docx

Microsoft PowerPoint - DA1_2018.pptx

Microsoft PowerPoint - 5.pptx

Microsoft PowerPoint - kougi9.ppt

Microsoft Word - 12

長崎大学大学院生産科学研究科(博士前期課程)

Microsoft PowerPoint - 11.pptx

PowerPoint Presentation

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

アルゴリズムとデータ構造

Microsoft PowerPoint - 5Chap15.ppt

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

Microsoft Word - NonGenTree.doc

memo

Taro-最大値探索法の開発(公開版

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

program7app.ppt

2006年10月5日(木)実施

Microsoft PowerPoint - prog06.ppt

1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

Microsoft PowerPoint - prog08.ppt

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

C言語7

Prog1_6th

プログラミング実習I

Microsoft PowerPoint ppt

模擬試験問題(第1章~第3章)

PowerPoint Presentation

DVIOUT

Microsoft Word - Cプログラミング演習(11)

memo

人工知能入門

Taro-ポインタ変数Ⅰ(公開版).j

Prog1_15th

alg2015-3r3.ppt

Transcription:

広島市立大学大学院情報科学研究科 問 模擬問題 A データ構造とアルゴリズム (90 分 ) 科 目 データ構造とアルゴリズム 注意事項 本問題は, 平成 30 年度に実施される広島市立大学大学院情報科学研究科博士前期課程一般入 試のために作成した模擬問題です 筆記試験を学習する際の参考資料として使用して下さい

第 1 問 (1/2) 問 1 キューに値 x を追加する操作を enqueue(x), キューから値を取り除き, その値を返す操作を dequeue() とする 空のキューを用意し, 図 1.1 の操作を行ったとき, 操作終了後の変数 cと変数 dの値を答えよ enqueue(1) enqueue(6) enqueue(10) a = dequeue() b = dequeue() enqueue(a+b) c = dequeue() d = c - dequeue() 図 1.1 キューの操作 問 2 ハッシュテーブルとして長さnの配列 a[0],,a[n-1] を確保し, 配列 X[]={52,99,45,10,19,12,39 を内部ハッシュ法により管理する Xの各要素 xに対して, ハッシュ関数は h 0 (x) = x (mod n), 衝突時の再ハッシュ関数は h i (x) = h 0 (x) + i (mod n), i=1,2,3, で表されるとする X の全てのデータ X[0], X[1], の順にn=10のハッシュテーブルに入力した場合, ハッシュテーブルは最終的にどのようになるか,a[0],,a[n-1] の値を記述せよ 問 3 図 1.2 で示される二分木がある の中に書かれた数字は各節点 ( ノード ) に格納されている要素の値であり,root は二分木の根を指すポインタである 二分木の根から出発して, 全節点を通るプログラムである関数 func( 図 1.3) に,root を引数として渡した場合, 出力される要素の値を順に答えよ ただし, ノードの構造体は図 1.4で表現される root 5 3 8 7 9 6 1 2 4 図 1.2 二分木 void func(struct node *p){ if(p->left!=null) func(p->left); printf("%d ",p->element); // 出力 if(p->right!=null) func(p->right); 図 1.3 関数 func struct node { int element; // 要素 struct node *left; struct node *right; ; 図 1.4 節点の構造体 - 1 -

第 1 問 (2/2) 問 4 ある再帰的アルゴリズムのデータ数 n (n >= 1) に対する計算時間 T(n) は以下の漸化式で表される T(n) を n の多項式で表し, その結果をオーダー記法で記述せよ ただし,T(0)=0, c は定数とする 答えだけではなく, 解答に至った理由も書くこと T(n)=T(n-1)+c(n-1) - 2 -

第 2 問 (1/5) ヒープとは, 以下の条件を満たし, 各節点 ( ノード ) にデータ ( 値 ) を持つ2 分木である ( 条件 1) 木の高さを h とするとき, 深さ h-1 までの部分は完全 2 分木になっている 深さh の部分は木の左部分に詰められている ( 条件 2) ノード v の親を u とするとき, それぞれに保持されている要素 x v と x u は次の条件を満たす x v x u ヒープを n 個の要素 a[0],, a[n-1] で構成される配列で実現すると, ノード番号 i のノードが持つデータ ( 値 ) を要素 a[i] に格納し, 二つの子ノードが持つデータ ( 値 ) を要素 a[2i+1] と a[2i+2] に格納することになる ただし, 根のノード番号を 0 とし, 根が持つデータ ( 値 ) は a[0] に格納することとする 図 2.1 に各ノードに整数値を持つヒープの例を示す 図 2.1 ヒープとその配列による実現の例 - 3 -

第 2 問 (2/5) 問 1 今, 図 2.1 のヒープの根 (a[0]) を削除した後, 上述のヒープの ( 条件 1) と ( 条件 2) を満たすように, 以下の操作を行う なお, この操作を DELETEMAX と呼ぶことにする ( 手順 1) 木の最下段の最も右の要素を根 ( 配列の先頭 ) へ移す ( 手順 2) 以下の操作を根から始め, 交換が生じなくなるまで下へ向かって繰り返す なお, 以下の操作をDOWNMAXと呼ぶことにする 現在の節点を, その二つの子の大きい方の要素 ( 左の子のみであればその要素 ) と比較する 親の方が小さければそれと交換し, 交換先を現在の節点とする 図 2.1 に示すヒープに対してヒープの根 (a[0]=9) を削除した後, 木構造はどのように変化するか, 削除後のヒープの木構造を記述せよ 問 2 図 2.2 に示すプログラムリストは, 配列で表現されたヒープに対し DELETEMAX の操作を行う処理を実装したものの一部である 関数 downmax と関数 deletemax は, それぞれ DOWNMAX 操作および DELETEMAX 操作を行うものである なお, 関数 deletemax は, 削除したヒープの根の値がこの関数の返り値となる プログラムリスト中の (a) (i) を適切に埋めよ 問 3 図 2.1 に示すヒープに対してヒープの根 (a[0]=9) を削除する時, 図 2.2 の関数 deletemax を適用すると, ヒープが作成されるまでに複数回関数 downmax が呼び出される 関数 downmax が 2 回目と 3 回目に呼ばれた直後の配列 a の内容 a[0] a[8] を求めよ 問 4 図 2.3 に示す関数 heapify は, 入力された配列 a を, 図 2.2 の関数 downmax を用いてヒープの条件を満たすように並び替えるものである 図 2.4 を用いて, 関数 heapify の動作を説明する 図 2.4 において, 配列 a の最後尾の要素は a[8] で, その親は a[3] である 関数 downmax は, まず,a[3] に適用される (I) 次に,a[2](II), a[1](iii),a[0](iv) に順次適用されることにより, 最終的に配列 a 全体がヒープとなる 図 2.3 のプログラムリスト中の (a) (c) を適切に埋めよ - 4 -

第 2 問 (3/5) void downmax(int i, int *a, int n){ int j; int tmp; j=2*i+1; /* iの左の子 */ if(j>=n) return; if(j+1<n && (a) ) j=j+1; /* jはiの子で大きな値を持つ方 */ if( (b) ){ /* iとjの交換 */ tmp=a[i]; a[i]=a[j]; a[j]=tmp; downmax( (c), (d), (e) ); /* 再帰的実行 */ int deletemax(int *a, int n){ int max; max=a[0]; (f) /* 手順 1 */ downmax( (g), (h), (i) ); return(max); 図 2.2 DELETEMAX 操作を行うプログラム void heapify(int *a, int n){ int i; for( (a) ; (b) ; (c) ) downmax(i, a, n); 図 2.3 ヒープ作成を行うプログラム - 5 -

第 2 問 (4/5) 図 2.4 関数 heapify を用いたヒープ作成の過程 問 5 以下の空欄(a) (d) に当てはまるものを選択肢から選び, 答えよ n 個の要素からなるヒープについて考える このヒープの高さは (a) である DELETEMAX の操作について, 関数 downmax が呼ばれるのは, 最悪の場合で,a(a) 回となる 関数 downmax の処理時間は, 再帰呼出部分を除くと O( (b) ) であるため,DELETEMAX 操作全体の計算量は O( (c) ) となる DELETEMAX 操作で n 個の要素から値が最大のものを取り出した後, 残りの n-1 個の要素に対し, 再度 DELETEMAX 操作を適用する. この操作を, 残りの要素が 1 個になるまで繰り返し続けると,n 個の要素を大きい順に整列することができるが, この時, この整列にかかる計算量は O( (d) ) となる - 6 -

第 2 問 (5/5) (a) の選択肢 1 n 2 n 2 3 log 2 n 4 n log 2 n (b) の選択肢 1 1 2 n 3 n 2 4 log n (c) の選択肢 1 n 2 2 log n (d) の選択肢 1 n 2 2 log n 3 n log n 4 n 2 log n 3 n log n 4 n 2 log n - 7 -