見出し画像

基本情報技術者試験〔科目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が20msPythonが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という結果は、環境や実行方法を考慮すると妥当です。

  • 実際の性能比較をする場合、処理時間が明確に測定できるような、より複雑で計算量の多いプログラムを用いることをお勧めします。

以上。


いいなと思ったら応援しよう!