計算量の見積りについて *C言語
解決したいこと
計算量の見積りについての質問です。
今回、現状の知識の限りで計算量の考察をしてみました。
その結果を下記に上げるので是非添削していただきたいです。
また目的がテスト対策なので、記述の仕方も含めて、総合的に評価していただけたらなと思います。結果だけでなく、その過程の導出方法についても指摘があれば是非お願いいたします。
下に、考察結果と、考察対象となったソースコードが載っています。
補足情報
ソースコードに書かれている,1から21までの数字はグラフの1から21までの数字に対応しています。
グラフに、入っている色の入った横棒は、それぞれ各ループの始点と終点に対応しています。
該当するソースコード
ソースコードを入力
#include <stdio.h>
#include <stdlib.h>
#define N 8
#define M 9999
int a[N+1][N+1]=
{{0,0,0,0,0,0,0,0,0},
{0,0,1,7,2,M,M,M,M},
{0,1,0,M,M,2,4,M,M},
{0,7,M,0,M,M,2,3,M},
{0,2,M,M,M,M,M,5,M},
{0,M,2,M,M,0,1,M,M},
{0,M,4,2,M,1,0,M,6},
{0,M,M,3,5,M,M,0,2},
{0,M,M,M,M,M,6,2,M}};
int main()
{
int j,k,p,start,min,
leng[N+1],/
v[N+1],//
index[N+1];//
printf("始点");scanf("%d",&start);
①for(k=1;k<=N;k++)
{
②〜③ leng[k]=M;v[k]=0;
}
④leng [start]=0;
⑤index[start]=0;//
⑥for(j=1;j<=N;j++){
⑦min=M;//
⑧ for(k=1;k<=N;k++){
⑨ if(v[k]==0&&leng[k]<min){
⑩ p=k;min=leng[k];
}
}
<11> v[p]=1;
<12> if(min==M){
printf("グラフは連結していない。");
<13>exit(1);
}
<14>for(k=1;k<=N;k++)
{
<15>if((leng[p]+a[p][k])<leng[k])
{
<16>leng[k]=leng[p]+a[p][k];
<17>index[k]=p;
}
}
}
<18>for(j=1;j<=N;j++)
{
printf("%3d : %d",leng[j],j);
<19> p=j;
<20>while(index[p]!=0){
printf("<― %d",index[p]);
<21> p=index[p];
}
printf("\n");
} return 0;
}
例)
def greet
puts Hello World
end