HOME»基本情報技術者試験掲示板»令和3年 問6について
投稿する
すみません。聞き方が悪かったかもしれません。
「一意に復号可能ではない」ことを示すには、そのような例を頑張って見つけるしか方法はない、ということで良いでしょうか?
これもNo.5の木を描くことによって示すことができます。
すみません。問題のa,b,c,dについてハフマン木を描いてウが導かれることはわかりましたが、イについて木を描くやり方がよく分からず...
ハフマン符号の性質として、ある文字に対応するビット列が、他の文字に対応するビット列の接頭辞になることはない(wikipediaより)、ということなので、これに反しているイは、ハフマン符号ではない => 一意に復元できない、という考え方でも良いでしょうか?
ありがとうございます。
令和3年 問6について [5359]
なるせさん(No.1)
令和3年 問6について質問です。
https://www.fe-siken.com/kakomon/03_menjo/q6.html
解説では、イの選択肢について、「符号化後のビット列に"00110"があった場合、abc(00110)とaada(00110)の区別がつかないので、元のメッセージに一意に復号することができません。」と書いてあります。
このように「復元することができない」ことを示すには例を一つ挙げれば良いですが、「復元することができる」ことはどうやって示すことができますか?
エの場合は「各文字が2ビットずつなので一意の復号が可能です。」という解説で納得できましたが、ウについては分かりませんでした。
https://www.fe-siken.com/kakomon/03_menjo/q6.html
解説では、イの選択肢について、「符号化後のビット列に"00110"があった場合、abc(00110)とaada(00110)の区別がつかないので、元のメッセージに一意に復号することができません。」と書いてあります。
このように「復元することができない」ことを示すには例を一つ挙げれば良いですが、「復元することができる」ことはどうやって示すことができますか?
エの場合は「各文字が2ビットずつなので一意の復号が可能です。」という解説で納得できましたが、ウについては分かりませんでした。
2024.03.16 23:32
nsさん(No.2)
★FE シルバーマイスター
先頭からビット列を見ていき、
①1ビット目が0であれば"a"と判断、1であれば②へ進む
②2ビット目が0であれば2ビットあわせて"b"と判断、1であれば③へ進む
③3ビット目が0であれば3ビットあわせて"c"と判断、1であれば3ビットあわせて"d"と判断
を繰り返すことで復元可能です。
選択肢エは元の文字列1文字あたりのビット数が全て同じなので、ビット列の途中や後ろから処理することも可能ですが、選択肢ウの場合は必ず先頭から順に処理する必要があります。
①1ビット目が0であれば"a"と判断、1であれば②へ進む
②2ビット目が0であれば2ビットあわせて"b"と判断、1であれば③へ進む
③3ビット目が0であれば3ビットあわせて"c"と判断、1であれば3ビットあわせて"d"と判断
を繰り返すことで復元可能です。
選択肢エは元の文字列1文字あたりのビット数が全て同じなので、ビット列の途中や後ろから処理することも可能ですが、選択肢ウの場合は必ず先頭から順に処理する必要があります。
2024.03.17 06:36
なるせさん(No.3)
ありがとうございます。
新たな質問になってしまうのですが、同様の方法でイについても判別可能でしょうか?
自分で試してみましたが、途中でわからなくなってしまいました。
①1ビット目が0であれば②へ進み、1であれば③へ進む
②2ビット目が0であれば対応する文字はない(?)、1であれば2ビットあわせて"b"と判断
③2ビット目が0であれば2ビットあわせて"c"と判断、1であれば2ビットあわせて"d"と判断
aが判断できないから、復元不可能と考えて良いのでしょうか?
新たな質問になってしまうのですが、同様の方法でイについても判別可能でしょうか?
自分で試してみましたが、途中でわからなくなってしまいました。
①1ビット目が0であれば②へ進み、1であれば③へ進む
②2ビット目が0であれば対応する文字はない(?)、1であれば2ビットあわせて"b"と判断
③2ビット目が0であれば2ビットあわせて"c"と判断、1であれば2ビットあわせて"d"と判断
aが判断できないから、復元不可能と考えて良いのでしょうか?
2024.03.17 14:22
nsさん(No.4)
★FE シルバーマイスター
選択肢イは「一意に復号可能」ではない方法です。
例えば、"010"というビット列があった場合、"0 / 10"と見れば"ac"、"01 / 0"と見れば"ba"と復号されます。ビット列に変換したことにより、元の文字列が何であったか分からなくなってしまいました。
このように1つのビット列から複数通りの文字列に復号できてしまう方法は「一意に復号可能」ではない、ということになります。
例えば、"010"というビット列があった場合、"0 / 10"と見れば"ac"、"01 / 0"と見れば"ba"と復号されます。ビット列に変換したことにより、元の文字列が何であったか分からなくなってしまいました。
このように1つのビット列から複数通りの文字列に復号できてしまう方法は「一意に復号可能」ではない、ということになります。
2024.03.17 14:45
jjon-comさん(No.5)
★FE ゴールドマイスター
キーワード「ハフマン木」でネット検索して解説記事を見つけてください。
問題文で提示されたビット列がどのように作られているか分かります。
問題文で提示されたビット列がどのように作られているか分かります。
2024.03.17 18:18
なるせさん(No.6)
> nsさん
すみません。聞き方が悪かったかもしれません。
「一意に復号可能ではない」ことを示すには、そのような例を頑張って見つけるしか方法はない、ということで良いでしょうか?
2024.03.18 09:20
jjon-comさん(No.7)
★FE ゴールドマイスター
> 「一意に復号可能ではない」ことを示す
これもNo.5の木を描くことによって示すことができます。
2024.03.18 13:10
なるせさん(No.8)
> jjon-comさん
すみません。問題のa,b,c,dについてハフマン木を描いてウが導かれることはわかりましたが、イについて木を描くやり方がよく分からず...
ハフマン符号の性質として、ある文字に対応するビット列が、他の文字に対応するビット列の接頭辞になることはない(wikipediaより)、ということなので、これに反しているイは、ハフマン符号ではない => 一意に復元できない、という考え方でも良いでしょうか?
2024.03.18 17:12
jjon-comさん(No.9)
★FE ゴールドマイスター
(No.8に対して)
はい,その考え方で大丈夫です。
2値符号化のための木は二分木であり,一方の枝に0を,他方の枝に1を割り当てます。そして符号化したい文字を「葉(leaf)」に対応付けることができればそれは「一意に復号可能」です。
この問題の選択肢ウはこんな感じ。二分木のイラストを描くことができないので,文字位置がズレるようなら等幅フォントのテキストエディタなどに貼り付けてください。
それに対して,選択肢イはこうなります。
No.8でおっしゃっているとおり,文字aに対応するビット列「0」が、他の文字bに対応するビット列「01」の接頭辞になっているので,一意に復号できません。
はい,その考え方で大丈夫です。
2値符号化のための木は二分木であり,一方の枝に0を,他方の枝に1を割り当てます。そして符号化したい文字を「葉(leaf)」に対応付けることができればそれは「一意に復号可能」です。
この問題の選択肢ウはこんな感じ。二分木のイラストを描くことができないので,文字位置がズレるようなら等幅フォントのテキストエディタなどに貼り付けてください。
+―+
|0|…文字a
+―+―+
|1|0|…文字b
| +―+―+
| |1|0|…文字c
| | +―+
| | |1|…文字d
+―+―+―+
|0|…文字a
+―+―+
|1|0|…文字b
| +―+―+
| |1|0|…文字c
| | +―+
| | |1|…文字d
+―+―+―+
それに対して,選択肢イはこうなります。
+―+
|0|…文字a
| +―+
| |1|…文字b
+―+―+
|1|0|…文字c
| +―+
| |1|…文字d
+―+―+
文字aに対応する「0」は「葉(leaf)」ではないので,一意に復号できません。|0|…文字a
| +―+
| |1|…文字b
+―+―+
|1|0|…文字c
| +―+
| |1|…文字d
+―+―+
No.8でおっしゃっているとおり,文字aに対応するビット列「0」が、他の文字bに対応するビット列「01」の接頭辞になっているので,一意に復号できません。
2024.03.18 18:54
なるせさん(No.10)
> jjon-comさん
ありがとうございます。
2024.03.21 00:16