【Java】対称行列に値を入れるときの処理時間比較

課題で対称正方行列の対角線上以外に値を入れるといった課題が出されていたときに、パッと2つのやり方を思いつき、どっちの方が処理時間早いんだろ。と思ったので試してみた。

言語はProcessingというJavaっぽい言語での実装です。Javaでも動くはず。

単純にfor文で回す

3行3列の正方行列だとしたら

011
101
110

こんな感じのやつ.

まず思いついたのは、for文を回してif文で取り除く。

読み手にもこっちの方直感的にわかりやすいかなといった感じ。

10000行10000列の対称行列を作って処理時間を計測してみた。


int num = 10000 ;
int[][] array = new int[num][num] ;

for(int i = 0 ; i < num ; i++){
	for(int j = 0 ; j < num ; j++){
		if(i != j)
			array[i][j] = 1 ;
	}
}

// 結果Time:550.39496ms

 

続いて、

ひっくり返す方法

まず、
000
100
110

を考えて、対称なんだから要素番号を反対にすればいけるっしょ的な.


int num = 10000 ;
int[][] array = new int[num][num] ;

for(int i= 0 ; i < num-1 ; i++){
	for(int j = i+1 ; j < num ; j++){
		array1[i][j] = 1 ;
		array1[j][i] = 1 ;
	}
}


//結果Time:2431.4ms

 

意外な結果になった。

いじょー。

コメントを残す

メールアドレスが公開されることはありません。