基本情報技術者試験的な備忘録(アルゴリズム 過去問 午後問8全般の解く時のメモ)

20230430基本情報技術者試験的な備忘録(アルゴリズム 過去問 午後問8全般の解く時のメモ)

 

アルゴリズム素人です。
基本情報技術者試験素人です。
以下違いだらけです。(解説ではありません)

2023年以降、「疑似言語の記号」は出ないのかもしれないが、見慣れていないのでややこしい。

また、問題を解くには、「トレース」が必須らしいが、それだけで解けない気がする。
素人の自分でプログラム(VBAですが)を書く場合、アルゴリズムはあまり考えない。
無駄な長いプログラムになっても、分かりやすさ重視。
分からなくなったら、とにかく実行して結果を見る。
と思ってきたが、試験ではそうもいかないか。

試験は、本番環境の他人のプログラムを見て、実践的に直す感じか。(試しができないので、紙でトレース?)
(勉強します。)

ここに書いたのは、過去問午後問8 全般的なアルゴリズムの注意点です。自分用。


以下メモ
//////////////////////////////////////////////////////
●トレースの意味:
トレースだけでなく、図を考えてみる(特に配列)←今見ても意味分からない(なんだっけ)

●全体の意味をつかむ:
・・・最初や最後の処理などの動きをつかむのが面倒。
時間もかかるのでどこまで把握するか。←2023年以降の問題なら全部把握できるか?

 

 

 

●プログラムの変数の名前つけ方:(自分とは違う)
R・・・返却値(-1は終了や何もしない場合多そう)
C・・・カウントが多いか
init・・・初期
dunp・・・印刷(ごみ?)


●疑似言語:さんかく(多分2023年以降出ない)

- else
    (else以下けっこう大事。何も記載なくてもelseの下のfalseでカウントなど上がる処理多い。)

案外、条件分岐のelseのfalseで出たりするので、理解する時に重要

(例)
▲ S[L+1] = 0
|  命令1
| 命令2
| R =0

|  C = C+1 

 上記の命令1、命令2は重視するが、R =0、C = C+1が分からないとややこしくなる。
(だいたい、リターンやカウント) 


↑上がわからないとサブルーチンの中しか解けない

分岐など分かりにくい・・・「それ以外」が理解しにくい(どこからどこに行くのか)


●疑似言語:しかく
■ ループ 条件

分かりにくいが、条件を抜ける場合、条件で使っている条件(変数の値)は変わっている(false)
(例)
■ ループ 条件 R = 0
|  命令

抜ける時は,R=-1など


結構ハマるループの使い方
2023年以降、この「疑似言語の記号」は出ないのかもしれないが、■はループ(while等)だと認識していないと間違える恐れあり。
(例)
■true
| ■x[i] < Pivot
| |    ・i ← i +1
| ■
|
|
|

上記だと、「2重にループ」がある。何となく、x[i] < Pivotをifだと勘違いすると、うまくトレースできない。
この問題は、基本情報技術者過去問題 平成27年春期 午後問8のアルゴリズムだけど、
特に、このiを数字を出すことが重要というより、ループを抜けた後のiの値が重要だったりする。
(x[i] < Pivotに該当しないiを探す→そのiを使って下に書かれた処理をするという感じ)

なかなか、記号だと分かりにくい。(記号でなくても素人なので分かりにくい・・・)
しつこいが、ループは、ループ抜けた後の値を求めて使うことが多いので注意が必要。
そのループにしても、書かれていない方の「抜ける条件」(ループが回る条件は重要でない)からなおややこしい。
(上記の場合、クイックソートの応用で、Pivotの値と配列の値を比較しているが、x[i] < Pivot(ピボットより小さい値が重要ではなく、実は、ピボット以上の値をループ外で処理している。))

 

●配列のトレース:
(・・・どうしようかと考えている。いい書き方ないのか?)
(1次元)配列だとインデックス(添え字)と中の値がある・・・値を入れ替えたりすると変わるので、それぞれ書く必要が・・・
自分なりのルールを模索中。

 


●selectの引数は、配列、全体要素数、細かい変数の順番が多いか?