✍️

[ただの興味と趣味!] 言語によってどれくらい処理の速さが変わるのか

2024/04/19に公開

大学でアルゴリズムに関してコードを書くことがあり、実際に二つの言語で考えたのでその結果の共有をします。

今回の問題はこちら

** 最大の利益 **
FX取引では、異なる国の通貨を交換することで為替差の利益を得ることができます。例えば、1ドル100円の時に 1000ドル買い、価格変動により 1ドル 108円になった時に売ると、(108円 − 100円) ×1000ドル = 8000円の利益を得ることができます。

ある通貨について、時刻 tにおける価格 Rt(t=0,1,2,,,n−1)が入力として与えられるので、価格の差 Rj−Ri(ただし、j>iとする) の最大値を求めてください。

入力
最初の行に整数 nが与えられます。続く n行に整数 Rt(t=0,1,2,,,n−1
) が順番に与えられます。

出力
最大値を1行に出力してください。

制約
2≤n≤200,000
1≤Rt≤109

というものでした。
それに対しての参考コードがこちら

.go
package main

import "fmt"

func main() {
	var n int
	var maxv = -1000000000

	x := 0
	fmt.Scan(&n)
	for i := 0; i < n; i++ {
		var a int
		fmt.Scan(&a)
		if i == 0 {
			x = a
		} else {
			if maxv < a-x {
				maxv = a - x
			}
			if x > a {
				x = a
			}
		}
	}
	fmt.Println(maxv)
}
.c
#include <stdio.h>

int main() {
    int n;
    int maxv = -1000000000;
    int x = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        int a;
        scanf("%d", &a);
        if (i == 0) {
            x = a;
        } else {
            if (maxv < a - x) {
                maxv = a - x;
            }
            if (x > a) {
                x = a;
            }
        }
    }
    printf("%d\n", maxv);
    return 0;
}

この結果、20万個の要素が入力された場合にかかった時間が
Go言語では1.13秒
C言語では0.01秒
と圧倒的でした。

また、100万回のHello Worldを出力する際の時間を測ったところ
Go言語では3.344878834s
(buildからでは約2.44秒)

C言語では0.133959

結論:C言語は軽い!

少しだけアルゴリズムにハマった瞬間でした

Jboy王国メディア

Discussion