異種文字数に関しては整合するようになった

α=15, ε=4,γ=12のときの異種文字数がおかしい.上から見てくると,α=7で{7, 1, 7, 1,}が1となり,その次の{8, 4, 8, 4, }が3,{9, 9, 9, 9, }が2,{10, 4, 4, 4, }が1と軒並みおかしい.12行目では{0, 0, 0, 0, }で2となっている.異種文字数のカウントはBuildMatrix,それを読んでBuildPowerGridでマトリックスに表示しているはずだが,どちらが間違っているのだろう?

配列の内容はcharNVが{0, 12, 4, 9, 4, 0},charNHが{0, 1, 3, 2, 1, 2, 2, 0}となっているので,配列の中身がそのまま表示されている.つまり,配列の内容が間違っている.ただし,charNV(1)=12はマトリックスでは9と表示されているので,食い違いがある.charNHとcharNVの値はGetCharNumHとGetCharNumVで取り出している.⇒原因はわかった.縦数列では横数列のように周期で区切ることができないという点が見落とされている.つまり,セグメントというのは単なる区切りであり,周期ではないということがよく理解されていない.言い換えると縦数列の検定では検定区間をγより短くはできない.別の言葉で言えば,縦周期Yが区間と誤認されている.

いまの場合はγ=12でY=6だが,縦周期Yで繰り返されるという仮定で動作している.これは誤りだ.

BuildMatrixとBuildPowerGridで区間γに対応するよう修正した.これで概ね異種文字数の表示は正しくなったように思われるが,まだ二三不審な点がある.γ=12のマトリックスで最下行の異種文字数のうち最左の9というのはおかしい.0~11までの数字が現れるのだから,12でなくてはならない.また,12行目と24行目の最初の数字は0になっているにも関わらず,異種文字数は2となっている.

charNV(1)=12となっているのに,表示が9となっているのはなぜか?かなり微妙な問題だ.charNV配列の長さはX+Zで事例ではX=2, Z=1となっている.BuildPowerGridではこの標準配列を使ってテーブル上の任意の矩形領域を表示しようとしているため,列番号から標準配列のインデックスへの変換を行っているが,この論理の中に列番号がゼロになった場合はXに読み替えるという処理が入っている.この辺りで誤動作しているものと思われる.

マトリックス先頭列+jの値がXより小さい場合は変換しないで直接適用するように書き換えておこう.⇒解決したようだ.事例ではγ=12となっているので,αが12の倍数であれば剰余は0でなくてはならないから,12行目,24行目の最左ノードが0であるというのは正しい.従って,異種文字数が2となっている方が間違っているように思われる.⇒上記と同様な仕組みになっている.行がγの倍数のときはYで置き換えるようになっている.Yでなくて,γでなくてはならない.

修正して動作するようになった.これで異種文字数に関しては整合するようになったのではないかと思う.upsilonつまりYを参照しているところはすべて点検しておく必要がある.⇒一応OKのようだ.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA