HOME»基本情報技術者試験掲示板»【助けて】平成26年秋問8エディットグラフ
投稿する
【助けて】平成26年秋問8エディットグラフ [1933]
受験者さん(No.1)
平成26年秋問8エディットグラフ(編集距離)についてです。
設問文の以下の箇所の理解に苦しんでます。
ご助言頂けると幸いです。
ーーーーーーーーーー
[プログラム]
○整数型:D[Str1Len+1,Str2Len+1],X,Y
ーーーーーーーーーーー
【具体的な疑問点】
なぜ+1するのか?、+1は必須か?
【疑問の背景】
設問文(1)の中に、「配列の添字は0から始まる」とあるので、+1は必須ではなく、D[Str1Len,Str2Len]でも良いのでは?と考えています。
どなた様か、ご助言頂けると幸いです。
設問文の以下の箇所の理解に苦しんでます。
ご助言頂けると幸いです。
ーーーーーーーーーー
[プログラム]
○整数型:D[Str1Len+1,Str2Len+1],X,Y
ーーーーーーーーーーー
【具体的な疑問点】
なぜ+1するのか?、+1は必須か?
【疑問の背景】
設問文(1)の中に、「配列の添字は0から始まる」とあるので、+1は必須ではなく、D[Str1Len,Str2Len]でも良いのでは?と考えています。
どなた様か、ご助言頂けると幸いです。
2019.09.22 01:16
昔取った人さん(No.2)
【要点】
D[]はD[0,0]からD[Str1Len,Str2Len]まで必要とするので、宣言の時点で + 1した要素数を指定しなければならない。
D[Str1Len,Str2Len]と宣言するとD[0,0]からD[Str1Len - 1, Str2Len - 1]までしか確保されず、配列のサイズが不足してしまう
【配列の宣言と使用可能な範囲】
話を簡単にするため、まずは1次元配列で説明します。
配列の添え字が0から始まる。ということは、
整数型:A[5]
と宣言した配列A[]は、A[0], A[1], A[2], A[3], A[4]の5個の要素を持つことになります。0から4までで5個です
逆に言うと、この宣言ではA[5]はありません。A[5]が必要ならば
整数型:A [6]
と宣言しなければいけません。
つまり、A[0]からA[X]まで必要となるならば、配列を宣言する時点で
整数型:A [X + 1]
としてやればいいのです。
整数型:A [X]
と定義した場合は、A[0]からA[X-1]までしか確保されないので、A[X]は使えません。
これは2次元配列でも同じことですから、D[0,0]からD[M,N]まで必要ならば
整数型: D[M + 1, N + 1]
と宣言する必要があります。
この辺りの事情は、問題文の(1)でも触れられています。Str1の1文字目がStr1[0]、2文字目がStr1[1]ですから、最後の文字はStr1[Str1Len - 1]になります。Str1[Str1Len]は存在しません。
【問題に立ち返って】
問題文中の(4)にあるように、D[X,Y]は、エディットグラフの点(0,0)から、点(X,Y)までの最短移動距離が格納される配列です。
そして編集距離の定義(問題文(2)の②)から、エディットグラフの点(0,0)から点(Str1Len,Str2Len)までの最短移動距離、すなわちD[Str1Len, Str2Len]がStr1とStr2の編集距離となります。
ということは、D[]はD[0,0]からD[Str1Len, Str2Len]まで必要となるので、
整数型: D[Str1Len + 1, Str2Len + 1]
と定義してやる必要があるわけです。
D[]はD[0,0]からD[Str1Len,Str2Len]まで必要とするので、宣言の時点で + 1した要素数を指定しなければならない。
D[Str1Len,Str2Len]と宣言するとD[0,0]からD[Str1Len - 1, Str2Len - 1]までしか確保されず、配列のサイズが不足してしまう
【配列の宣言と使用可能な範囲】
話を簡単にするため、まずは1次元配列で説明します。
配列の添え字が0から始まる。ということは、
整数型:A[5]
と宣言した配列A[]は、A[0], A[1], A[2], A[3], A[4]の5個の要素を持つことになります。0から4までで5個です
逆に言うと、この宣言ではA[5]はありません。A[5]が必要ならば
整数型:A [6]
と宣言しなければいけません。
つまり、A[0]からA[X]まで必要となるならば、配列を宣言する時点で
整数型:A [X + 1]
としてやればいいのです。
整数型:A [X]
と定義した場合は、A[0]からA[X-1]までしか確保されないので、A[X]は使えません。
これは2次元配列でも同じことですから、D[0,0]からD[M,N]まで必要ならば
整数型: D[M + 1, N + 1]
と宣言する必要があります。
この辺りの事情は、問題文の(1)でも触れられています。Str1の1文字目がStr1[0]、2文字目がStr1[1]ですから、最後の文字はStr1[Str1Len - 1]になります。Str1[Str1Len]は存在しません。
【問題に立ち返って】
問題文中の(4)にあるように、D[X,Y]は、エディットグラフの点(0,0)から、点(X,Y)までの最短移動距離が格納される配列です。
そして編集距離の定義(問題文(2)の②)から、エディットグラフの点(0,0)から点(Str1Len,Str2Len)までの最短移動距離、すなわちD[Str1Len, Str2Len]がStr1とStr2の編集距離となります。
ということは、D[]はD[0,0]からD[Str1Len, Str2Len]まで必要となるので、
整数型: D[Str1Len + 1, Str2Len + 1]
と定義してやる必要があるわけです。
2019.09.22 19:49
受験者さん(No.3)
この投稿は投稿者により削除されました。(2019.09.23 12:58)
2019.09.23 12:58
受験者さん(No.4)
昔取った人さん
ご丁寧なご回答ありがとうございます。
配列宣言時の[]には要素数を入れるということが自身の頭から抜けていたため、疑問が生じていたことが特定でき、全体的に理解に至ることができました。
本当に助かりました。
ご丁寧なご回答ありがとうございます。
配列宣言時の[]には要素数を入れるということが自身の頭から抜けていたため、疑問が生じていたことが特定でき、全体的に理解に至ることができました。
本当に助かりました。
2019.09.23 13:05