C言語でスパース行列(疎行列)を判定するプログラムの作成方法
行列の要素の大部分がゼロである場合、その行列はスパース行列(疎行列)と呼ばれます。
例:3×3行列
1 1 0 0 0 2 0 0 0
この行列では、9個の要素のうち6個がゼロであり、大多数がゼロであるため、スパース行列に該当します。
問題
与えられた行列がスパース行列であるかどうかを判定します。
解決のアプローチ
行列内のゼロの個数が (行数 × 列数) ÷ 2 より大きいかどうかを確認します。
ゼロの個数が半分を超えていればスパース行列と判定し、そうでなければスパース行列ではないとします。
プログラム
以下は、与えられた行列がスパース行列かどうかを判定するC言語のプログラムです。
#include<stdio.h>
#include<stdlib.h>
int main(){
int row,col,i,j,a[10][10],count = 0;
printf("Enter row\n");
scanf("%d",&row);
printf("Enter Column\n");
scanf("%d",&col);
printf("Enter Element of Matrix1\n");
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
scanf("%d",&a[i][j]);
}
}
printf("Elements are:\n");
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
printf("%d\t",a[i][j]);
}
printf("\n");
}
/*checking sparse of matrix*/
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
if(a[i][j] == 0)
count++;
}
}
if(count > ((row * col)/2))
printf("Matrix is a sparse matrix \n");
else
printf("Matrix is not sparse matrix\n");
}プログラムの流れ
- ユーザーから行数と列数を入力として受け取ります。
- 行列の各要素を順番に入力します。
- 入力された行列を画面に表示します。
- 二重ループを使ってすべての要素を走査し、ゼロである要素の個数をカウントします。
- カウントしたゼロの数が
(row * col) / 2を超えていれば「スパース行列」、そうでなければ「スパース行列ではない」と出力します。
出力
上記のプログラムを実行すると、次のような結果が得られます。
Run 1: Enter row 3 Enter Column 2 Enter Element of Matrix1 1 0 2 0 2 0 Elements are: 1 0 2 0 2 0 Matrix is not sparse matrix Run 2: Enter row 3 Enter Column 2 Enter Element of Matrix1 1 0 0 0 0 0 Elements are: 1 0 0 0 0 0 Matrix is a sparse matrix
実行結果の解説
Run 1: 6個の要素のうちゼロは3個のみで、(3 × 2) / 2 = 3 を超えていないため、「スパース行列ではない」と判定されます。
Run 2: 6個の要素のうちゼロは5個あり、条件値3より大きいため、「スパース行列である」と判定されます。
このように、ゼロ要素の割合を基準にすることで、行列がスパース行列かどうかを簡単に判定できます。スパース行列は、メモリ節約や計算量削減のために特殊なデータ構造で効率的に扱われることが多く、科学技術計算や機械学習の分野でも重要な概念です。
-
【初心者向け】平行四辺形の外周(周長)を計算するC言語プログラム
本記事では、2つの辺の長さが与えられた平行四辺形の外周(周囲の長さ)を計算し、その結果を表示するC言語プログラムを紹介します。数式の考え方からアルゴリズム、実際のコードまで順を追って解説していきます。 平行四辺形とは? 平行四辺形とは、次のような性質を持つ四角形の一種です。 向かい合う2組の辺がそれぞれ平行である 向かい合う角の大きさが互いに等しい 2本の対角線が互いの中点で交わる 下の図では、「a」と「b」が平行四辺形の隣り合う2つの辺の長さを表しています。 平行四辺形の外周の求め方 平行四辺形の外周(周長)は、次の式で定義されます。 外周 = 2 × (a + b) = 2 ×
-
C言語で作る!キラキラ点滅するクリスマスツリー表示プログラム
今回は少しユニークなプログラミング課題を紹介します。C言語を使って、クリスマスツリーをランダムに表示する方法です。完成したツリーは、本物のクリスマスイルミネーションのようにキラキラと点滅して見えます。 クリスマスツリーの表示の仕組み クリスマスツリーを描くには、大きさの異なる三角形(ピラミッド)をいくつも縦に積み重ねて出力します。装飾的な葉っぱの部分には、あらかじめ用意した文字リスト(.・*・+・o・O)の中からランダムに1文字を選んで表示します。 ツリーの高さやランダム性の度合いは、ソースコード冒頭のマクロ定数を書き換えるだけで自由に調整できます。 点滅が実現される仕組み このプログラムのポ