Javaなどのバイトコードプログラムをインタプリタで実行する方法と,コンパイルしてから実行する方法を,次の条件で比較するとき,およそ何行以上のバイトコードであれば,コンパイル方式の方がインタプリタ方式よりも処理時間(コンパイル時間も含む)が短くなるか。
〔条件〕
(1) 実行時間はプログラムの行数に比例する。
(2) 同じ100行のバイトコードのプログラムをインタプリタで実行すると0.2秒掛かり,コンパイルしてから実行すると0.003秒掛かる。
(3) コンパイル時間は100行当たり0.1秒掛かる。
(4) コンパイル方式の場合は,プログラムの行数に関係なくファイル入出力,コンパイラ起動などのために常に0.15秒のオーバヘッドが掛かる。
(5) プログラムファイルのダウンロード時間など,そのほかの時間は無視して考える。
正答4
解説
正解は4です。
この問題は、インタプリタ方式とコンパイル方式の処理時間を行数の式で表し、逆転する行数を求めるものです。
【計算】
プログラムの行数をn行とします。
インタプリタ方式は100行で0.2秒なので、1行当たり0.002秒で、処理時間は0.002n秒です。
コンパイル方式の実行時間は100行で0.003秒なので、1行当たり0.00003秒です。
コンパイル時間は100行で0.1秒なので、1行当たり0.001秒です。
これに固定のオーバヘッド0.15秒が加わり、処理時間は0.00103n+0.15秒です。
コンパイル方式が短くなる条件は、0.00103n+0.15<0.002nです。
整理すると、0.00097n>0.15となります。
n>0.15÷0.00097で、nは約154.6より大きくなります。
したがって、およそ155行以上でコンパイル方式の方が短くなります。
【選択肢別解説】
1:× 50行では、インタプリタ方式0.1秒に対し、コンパイル方式は約0.20秒かかります。
2:× 75行では、インタプリタ方式0.15秒に対し、コンパイル方式は約0.23秒かかります。
3:× 125行では、インタプリタ方式0.25秒に対し、コンパイル方式は約0.28秒かかります。
4:○ 155行では、インタプリタ方式0.31秒に対し、コンパイル方式は約0.3097秒となり、初めてコンパイル方式が短くなります。
【ポイント】
コンパイル方式は、固定のオーバヘッドがある代わりに1行当たりの時間が短いという特徴があります。
行数が多いほどコンパイル方式が有利になるので、二つの式が等しくなる行数を求めるのが解き方の基本です。