基本情報技術者試験〔科目B〕2022年サンプル問題 問1(文法問題)
問1. 次の記述中の□に入れる正しい答えを、解答群の中から選べ。
プログラムを実行すると、”□” と出力される。
〔プログラム〕
1: 整数型: x ← 1
2: 整数型: y ← 2
3: 整数型: z ← 3
4: x ← y
5: y ← z
6: z ← x
7: y の値と zの値 を個の順にコンマ区切りで出力する。
解答:3, 2
〇予備実験
・Javaでコーディングして、処理時間を計測した。
public class Main {
public static void main(String[] args) {
// 変数の初期化
int x = 1;
int y = 2;
int z = 3;
// 値の入れ替え
x = y;
y = z;
z = x;
// y と z の値を出力
System.out.println(y + ", " + z);
}
}
処理時間: 20.8992 ms
・Pythonでコーディングして、処理時間を計測した。
# 変数の初期化
x = 1
y = 2
z = 3
# 値の入れ替え
x = y
y = z
z = x
# y と z の値を出力
print(f"{y}, {z}")
処理時間: 0.189066 ms
予備実験結果
プログラム言語の違いが処理時間に及ぼす影響について
Chat-GPTによる解答
VS Codeで上記コードを入力して出力した結果は、Javaが20ms、Pythonが0.18ms とのことですが、この違いは以下の理由で妥当と言えます。
1. Javaの処理時間が大きい理由
JVM(Java Virtual Machine)の起動時間:
Javaプログラムを実行すると、最初にJVMが起動し、クラスのロードや初期化が行われます。このオーバーヘッドが処理時間に含まれるため、短いプログラムでも数ミリ秒以上の時間がかかることがあります。
NanoTimeのオーバーヘッド:
System.nanoTime() は高精度ですが、内部的な処理に少し時間がかかります。
Javaのランタイム最適化:
Javaのランタイム環境は、プログラムの実行中に最適化が進むため、短いプログラムでは十分な最適化が行われない場合があります。
2. Pythonの処理時間が小さい理由
軽量なインタープリタ型:
Pythonはインタープリタ型で、短いスクリプトの実行に適しているため、JVMのような起動のオーバーヘッドがありません。
timeモジュールの精度:
time.time() の精度はミリ秒単位程度で、非常に軽量な計測です。ただし、ナノ秒単位の計測には向いていません。
補足
プログラムの短さの影響:
今回のプログラムは非常に短いため、計測された時間のほとんどが環境固有のオーバーヘッドに起因します。プログラムが長くなるほど、このオーバーヘッドの影響は小さくなり、より正確な比較ができます。
誤差の可能性:
Pythonの0.18msは非常に短い時間であり、計測精度の限界で誤差が含まれる可能性もあります。
結論
Javaの20msとPythonの0.18msという結果は、環境や実行方法を考慮すると妥当です。
実際の性能比較をする場合、処理時間が明確に測定できるような、より複雑で計算量の多いプログラムを用いることをお勧めします。
以上。