ソフトウエア開発技術者試験のための勉強をしています。
ハミング符号では、例えば情報ビット4ビットには誤り検出ビット3ビットが必要で、この3ビットは情報ビット4ビットのどこに入れても良いとあります。この方式の前提は、あらかじめ送信側と受信側で誤り検出ビットの位置を決めてあるからですよね?つまり受信側が、受け取ったビット列のどこが誤り検出ビットなのかを知らなければ誤りの検出や訂正は出来ない、と理解しています。
よって、「ハミング符号によるチェック方式において”1001101”というビット列を受け取ったが、正しくない。どのビットが誤っているかを示しなさい。」という問題(翔泳社ソフトウエア開発技術者2005年度版P85)は、どこが誤り検出ビットなのか書いていないので解けないと思うのですが、違うでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

> ハミング符号では、・・・この3ビットは情報ビット4ビットのどこに入れても


> 良いとあります。
> この方式の前提は、あらかじめ送信側と受信側で誤り検出ビットの位置を
> 決めてあるからですよね?
その通りです。

> つまり受信側が、受け取ったビット列のどこが誤り検出ビットなのかを知らなければ
> 誤りの検出や訂正は出来ない、と理解しています。
それで正しいです。
その上、さらにビット間の演算式(チェック式)も知っている必要が有ります。

> 「ハミング符号によるチェック方式において”1001101”というビット列を
> 受け取ったが、正しくない。どのビットが誤っているかを示しなさい。」
> という問題(・・・)は、どこが誤り検出ビットなのか書いていないので解けない・・・。
その通り解けません。

あくまでもビット配列と演算式が規定されていないと解く事は出来ません。
ビット配列については質問者さんの言われるように、単なる約束事ですから
送信者と受信者が一致していればどのように決めてもいいのです。
事実、書物によってビット配列は色々です。

蛇足ですが、誤りビット1ビットを簡単に見つけられるビット配列をご紹介します。
これを理解するとハミング符号が身近になります。

X1 X2 X3 P3 X4 P2 P1
Xが情報ビット、Pが検査ビットです。ビットに前から順に7から1の番号を打ちます。
判定式は
X1+X3+X4+P1=0
X1+X2+X4+P2=0
X1+X2+X3+P3=0
です。
ここで、例えばX3ビットが間違うと1行目と3行目の式がエラーになります。
つまりP1とP3に関する式ですね。
ビット番号に着目して見ましょう。
X3は5番目、P1は1番目、P3は4番目で、1+4=5でX3が誤りと言うことを示しています。
他のビットでも試して見てください。
    • good
    • 0
この回答へのお礼

明快な回答ありがとうございます。
なるほど、教えていただいたビット配列を使うと間違っているビットがどこなのか簡単にわかりますね。とても便利です。

ところで、細かい点なのですが確認させてください。
> ビット間の演算式(チェック式)も知っている必要が有ります。

これは厳密には、演算式そのものは知らなくても最低限偶数パリティか奇数パリティかさえわかっていればよいのでしょうか?
受信側では誤り検出ビットを1つずつ判定式に含め、各情報ビットを必ず2回以上判定式に使う、という条件さえ満たして任意の判定式を作れば判定できてしまうような気がするのですが。
例えば上記例でいうと、判定式は以下のいずれでも誤りの判定は出来るのではないかと考えました。(もちろんこれらのパターンでは教えていただいた簡単な間違いビットの計算方法は使えなくなりますが)

A)X1を3つにするパターン
X1+X3+X4+P1=0
X1+X2+X4+P2=0
X1+X2+X3+P3=0

B)X2を3つにするパターン
X2+X3+X4+P1=0
X1+X2+X4+P2=0
X1+X2+X3+P3=0

C)X3を3つにするパターン
X1+X3+X4+P1=0
X2+X3+X4+P2=0
X1+X2+X3+P3=0

D)X4を3つにするパターン
X1+X3+X4+P1=0
X1+X2+X4+P2=0
X2+X3+X4+P3=0

お礼日時:2005/04/03 21:13

No.2です。

追加質問にお答えします。

> 厳密には、演算式そのものは知らなくても最低限偶数パリティか奇数パリティかさえ
> わかっていればよいのでしょうか?
それではだめでしょうね。
演算式というのは質問者さんの言われるA,B,C,D各パターンの内のどれか
(あるいは別のもの)ということです。
これが分らないと、仮に誤り検出は出来たとしても、誤り訂正は出来ません。
ハミング符号は1ビットの誤りは訂正でき、2ビットまでの誤りは検出できる仕様です。

例で説明します。
Aパターンで1010を変換するとP1P2P3が010となります。
これが1110010と誤って受信されたとするとAパターンではP2P3の誤りを検出し、
DパターンではP2だけの誤りを検出します。
従ってあらかじめAパターンである事を知っておかないと誤りビットの特定が出来ない、
つまり訂正が出来ないという事になります。
    • good
    • 0
この回答へのお礼

なるほど、やってみると確かにそうですね。
すっきりしました。
どうもありがとうございました。

お礼日時:2005/04/04 22:03

通常、「4ビットの情報ビット」+「3ビットのチェックビット」を付加して、「符号全体長は7ビット」としていると思います。



正確な問題文が手元に無いので何とも言えませんが、
その問題は、「情報処理技術者試験の過去問」でしょうか?それとも、「翔泳社作成の練習問題」でしょうか?

後者の場合問題そのものに間違いがある可能性も否定できないと思います。

過去問の一例を参考URLとしてリンクします。
「ソフトウエア開発技術者」⇒「平成15年」⇒「問66」を選択して下さい。

参考URL:http://smickey.cool.ne.jp/cgi-bin/text/textprint …
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。教えていただいたサイトの問題ならば納得がいきます。
この問題は翔泳社作成の練習問題だと思います。
問題文はこれで全てで、補足の絵や図などはありません。
この問題の正誤も気になるのですが、理論的に、送信側が適当に(勝手に)誤り検出ビットを情報ビットに混ぜて送って、それで誤りの検出や訂正が出来るものなのかを知りたいと思っています。
受信側で何か数学的な処理を施せば誤り検出ビットがどれかわかるとか。
ネットで符号理論の講義資料などをいろいろ調べましたが、ハミング符号の作り方などは書いてあってもこの点が書いてあるものが見つけられませんでした。

お礼日時:2005/04/03 17:11

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q最小ハミング距離とは?

2つの符号語U、Vについてのハミング距離d_H(U,V)として表す時、線形符号Cに対して
最小ハミング距離は
  min d_H(U,V)
U≠V(U,V∈C)

と表せるそうなのですが、この式の意味がいまいちわかりません。
ハミング距離は
U=(0 1 1 0 1 0 1 1 )
V=(1 0 1 1 0 0 0 1 )
だとしたら、
5になります。

Aベストアンサー

min X とは、集合Xの要素のうちで最小のもの、を表す記号です。たとえば、
min{4,5,6} = 4

 で、minを使って、ご質問にある命題をきちんと表記すると、
「最小ハミング距離は
min{x|∃U∃V(U∈C ∧ V∈C ∧ U≠V ∧ x=d_H(U,V))}
である。」
となります。言い換えると「最小ハミング距離とは、『U,Vが符号語であって、U≠Vであるときに生じ得る最小のd_H(U,V)』である」ってことに他なりません。
 なお、U≠Vの条件が出てくるのは、この制限を付けないと
min{x|∃U∃V(U∈C ∧ V∈C ∧ x=d_H(U,V))}=0
が自明に成り立つからです。(それはもちろんd_H(U,U)=0だから。)
 てことは、もっと普通に言うなら、
「符号Cの最小ハミング距離とは、Cに含まれる2つの符号語の間の、0でない最小のハミング距離の事である。」

 さて、
min{x|∃U∃V(U∈C ∧ V∈C ∧ U≠V ∧ x=d_H(U,V))}
の最初のxのところにx=d_H(U,V)を代入して略記する流儀があるので、これを
min{d_H(U,V))|∃U∃V(U∈C ∧ V∈C ∧ U≠V)}
と書くのはちっともおかしくない。また、{}の中にある論理式の∃記号を省略するのもよくやることなんで、
min{d_H(U,V))|U∈C ∧ V∈C ∧ U≠V}
またU∈C ∧ V∈Cを略してU,V∈Cとも書きますね。
min{d_H(U,V))|U,V∈C,U≠V}
符号Cの話をしてるんですから、文脈からUV∈Cは言わずもがなの当たり前であり、
min{d_H(U,V))|U≠V} (U,V∈C)

 かくて、
min d_H(U,V))U≠V(U,V∈C)
と書いたら
min{x|∃U∃V(U∈C ∧ V∈C ∧ U≠V ∧ x=d_H(U,V))}
という意味だぐらい分かってよ、って事になるわけです。

 つーことで、これは符号理論とも最小ハミング距離ともほとんど関係がないご質問ですね。なおstomachmanはむやみな略記は嫌いです。略記のせいで間違えるってことが、本当に多いもんですから。

min X とは、集合Xの要素のうちで最小のもの、を表す記号です。たとえば、
min{4,5,6} = 4

 で、minを使って、ご質問にある命題をきちんと表記すると、
「最小ハミング距離は
min{x|∃U∃V(U∈C ∧ V∈C ∧ U≠V ∧ x=d_H(U,V))}
である。」
となります。言い換えると「最小ハミング距離とは、『U,Vが符号語であって、U≠Vであるときに生じ得る最小のd_H(U,V)』である」ってことに他なりません。
 なお、U≠Vの条件が出てくるのは、この制限を付けないと
min{x|∃U∃V(U∈C ∧ V∈C ∧ x=d_H(U,V))}=0
が自明に成り立...続きを読む

Qハミングコードを使っての訂正(キャッシュ)

下にある、6-bit data words をシングル エラー コレクション ハミング コードをつかって書き直せ。
という問題なんですが。ハミングコードエラーを出すとすると、6bitなのでものすごい大きい数になってしまうことが予想されて、不に落ちない感じがします。しかも書き直せと書いてあるんですよねぇ。。いったい何から初めてどうすればいいのか分かりません。。ヒントでもいいのでいただけると、ありがたいです。
よろしくお願いします。

Rewrite the following 6-bit data words using a single error correction Hamming code:
A 100 011
B. 110 010

Aベストアンサー

↓の問15のように4ビット+3ビットの例がよく使われます。
6ビットでも8ビットでも+4ビットにすれば16ビットまで表せますので
問題ありません。
後は1ビットどこに追加するかということと
式を1個追加して整理することですね。

参考URL:http://www.mirai.ne.jp/~suehiro/am/h0904/1-h9am11-20.htm#Q5

QCRCのアルゴリズムって、どんな計算するんですか?

こんにちはお世話になります。
私はネットワークに興味があるオジサンです。
先日、データリンク層のプロトコル群を勉強していたとき、誤り訂正でCRCが出てきました。誤り訂正ではパリティーチェックやチェックサム等は聞き覚えがありましたが、CRCは始めて見たので興味を持ち少し調べてみようと思いました。
それが間違いの元でした。
インターネットでCRCの構造を詳しく解説するサイトが少なく、その解説は難しすぎて手におえません。
数学にはめっぽう弱い私には、多項式同士の加減乗除算などは頭痛の肥やしにしかなりません。
今ではCRCが気になって勉強に集中できない状態です。
そこで、表題にもあるCRCのアルゴリズムを、何方か分かり易く教えてくださいませんか。もしくは、CRCのアルゴリズムを簡単に解説している書籍をご存知でしたら教えてください。
カテゴリー(本来は数学系?)が違うかもしれませんが、何卒よろしくお願い申し上げます。

Aベストアンサー

偶数パリティについておさらいすると、1 となるビットの個数が偶
数になるように、検査ビットを定めるというものですよね?で、検
査側では、1 の個数を数えて奇数だとエラーと判断するわけです。

実は、この偶数パリティというチェックのしかたは、CRC の一種な
んです。CRC では、ある特定の生成多項式を使いますが、CRC の生
成多項式として x + 1 を使ったものが偶数パリティです。

多項式の加減乗除で頭痛ということなら、ちょっと説明が厳しいの
ですが、2進数の加減乗除はできるでしょうか?これがだいじょう
ぶなら、1+1=0(つまり、0-1=1)という世界での2進数の加減乗除
を考えるということでも同じです。

この場合、x+1 という多項式は、11 と考えます。(xのi乗の係数
を第iビットの値とみなす)

例えば、10110 というデータに対して、11 という生成多項式で
CRC の検査ビットを求めるには、生成多項式の桁数-1=1ビット
分データを左にシフトして、101100 を得ます。この値を、上の特
殊な2進数の世界で、生成多項式の 11 で割ります。そうすると、
商として 11011、余りとして 1 が得られます。試しにやってみて
ください。この余りを、101100 から引いて(特殊な2進数の世界で
は足すのと同じ)やると、101101 が出ます。これが送るべき符号
ということになります。実際、1の個数は偶数ですので、付け足し
たビットが偶数パリティとなっていることがわかります。

余りの分を引いたわけですから、このデータは 11 で割り切れるは
ずですので、検査側では 11 で割って、余りが 0 であることを確
認すればいいわけです。

この生成多項式の選び方で、検査の能力が変わってきます。やみく
もに選んだら、検査能力がまったくなくなります。通常の CRC は、
それを考慮してうまく多項式を作ってあるというだけのことです。

なぜ 11 なら偶数パリティと同じなのかとか、生成多項式をどう選
べばいいかとかについては、符号理論の勉強が必要です。前者はそ
れほど難しくはないですが。

偶数パリティについておさらいすると、1 となるビットの個数が偶
数になるように、検査ビットを定めるというものですよね?で、検
査側では、1 の個数を数えて奇数だとエラーと判断するわけです。

実は、この偶数パリティというチェックのしかたは、CRC の一種な
んです。CRC では、ある特定の生成多項式を使いますが、CRC の生
成多項式として x + 1 を使ったものが偶数パリティです。

多項式の加減乗除で頭痛ということなら、ちょっと説明が厳しいの
ですが、2進数の加減乗除はできるでしょうか?こ...続きを読む

QC言語 配列の長さの上限

C言語で配列Array[N]の長さNの上限っていくらなんでしょうか?
もし可能なのであれば上限を2147483647にしたいのですが、方法を教えてください。

Aベストアンサー

そもそもWindowsの32bit版はアプリが仮想メモリ空間を2GBしか使えません。2GBを超えるには64bit版が必要です。
たとえ64bit版OSだとしても添え字が2147483647って、単純なintの配列だとしても4x2147483647=8GB必要ですね。実メモリ16GBとかのPCを用意しますか?
そもそも配列で2147483647個必要なアルゴリズムに問題ありだと思います。

Q可到達行列について教えてください!

自分の中では、
「隣接行列に単位行列を足したものを累乗していき、いくら累乗しても変わらなくなったものが可到達行列。そうなるまでにN回累乗したとすると、行列が1の成分のところにはN回以下の移動で行けて、0のところは何回移動しても行けない」
と整理していたんですが、
授業で、テニス選手の対戦成績表が与えられて、『強さの順序を可到達行列から求めよ』という問題が出され、対応できないことがわかりました。

どう解けばいいんでしょうか。困っています!

Aベストアンサー

すみません。#6は取り下げさせてください。

私の思っているようなすっきりとしたランク付けはできそうにないとはまだ思うし
質問者さんも同様に思われているんだと思うんですが
それでもそこを考えろというのが、課題を出された方の意図なのかもしれませんし
ここに書かれただけの話なら、私にはこれ以上のアドバイスはできません

Q2進数の除算について

タイトルどおり、2進数の除算についてわからいので質問をします。
(1)割り切る方法と(2)余りを出す回答があるようなのですが、どこのサイトを見てもいまひとつ理解ができなくて困っています。何か具体的な例を挙げていただきたいと思います。

それに加えて、前者の割り切る方法の結果から分かること(法則性)も知りたいのですが、両者について分かる方がいらっしゃれば、どうかお力添えをお願いします。

Aベストアンサー

> また追加で質問なのですが、先の100001÷110=101…11で
> (1)余りを出す
> (2)割り切る という二つの計算方法があるらしく、これは(1)の計算方法なのですが、(2)の割り切るとはいったいどのような方法なのでしょうか?

多分ですが、「小数を使って割りきれ」ということだと思います。

       101
   ―――――――
110)100001
     110
    ――――
      100
        0
      ―――
      1001
       110
      ――――
        11

↓(1/2の位に進む)

       101
   ―――――――――
110)100001.0
     110
    ――――
      100
        0
      ―――
      1001
       110
      ――――
        11 0

↓(商の1/2の位の数は1)

       101.1
   ―――――――――
110)100001.0
     110
    ――――
      100
        0
      ―――
      1001
       110
      ――――
        11 0
        11 0
        ――――
           0

商は101.1

> また、その割り切った結果から何が分かるのでしょうか?

分かりません。

10進数ではどんな有限小数も、(2^n)(5^m)で割りきれます(n, mは0以上の整数)。
逆に(2^n)(5^m)で表せない数(例えば6)で割ると、割り切れない場合があります。

対して2進数では、どんな有限小数も(2^n)で割りきれます(nは0以上の整数)。
逆に(2^n)で表せない数(例えば10)で割ると、割り切れない場合があります。

そういったわり算に関する話がありますが、
先ほどのわり算1個だけからそんな結論を得るのは不可能だと思います。

> (1)2進数の補数計算の方法に関して4つまとめる

(1)の「4つ」とは何が4つなのでしょうか?
「たし算、ひき算、かけ算、わり算の4つの計算方法についてまとめなさい」ということでしょうか?
だとしたら、それぞれの計算方法について説明すれば良いと思います。
小学校の算数の教科書には、10進数のたし算やひき算や
かけ算やわり算のやり方が書いてありますよね。
あれを2進数版に書き直すような感じでいいのではないでしょうか?

まず1桁のたし算から始めて、その後繰り上がりの概念を利用して2桁以上のたし算を説明し、
次にたし算の筆算のやり方を……といった感じでやれば良いと思います。

ここの環境だと筆算の繰り上がりや繰り下がり等が表記できないので、
申し訳ないですが、計算方法のまとめを書くのは無理です。

> (2)2進数の1の補数が,ビット毎の0・1反転で得られることを証明

1の補数の定義を知らないので、大したアドバイスはできません。
とりあえず、思いついたことを書いておきます。

1桁の2進数aをビット反転させると、(1 - a)になります。

a = 0の時、(1 - a) = 1
a = 1の時、(1 - a) = 0

次に2桁以上の2進数のビット反転を考えます。
ある2進数Xのn桁目の数をx_nと表現します(x_n = 0, 1)。
この時、Xをビット反転させた数のn桁目の数は(1 - x_n)で表せます。
これは先ほどの、「1桁の2進数aをビット反転させると(1 - a)となる」という話と同じです。

後はこの「n桁目の数がx_nの2進数」と「n桁目の数が(1 - x_n)の2進数(ビット反転させた2進数)」を比較し、
1の補数の定義と合致しているかを確認すればいいと思います。

> また追加で質問なのですが、先の100001÷110=101…11で
> (1)余りを出す
> (2)割り切る という二つの計算方法があるらしく、これは(1)の計算方法なのですが、(2)の割り切るとはいったいどのような方法なのでしょうか?

多分ですが、「小数を使って割りきれ」ということだと思います。

       101
   ―――――――
110)100001
     110
    ――――
      100
        0
      ―――
      1001
       110
     ...続きを読む

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Qべき乗

べき乗とは一体なんですか?
ウィキを見ても理解できませんでした。
2の2乗は2×2ですが、
2のマイナス2乗は一体どのような式なのですか?

Aベストアンサー

算数の延長線上だけの概念だけだといまいち理解出来ないですよね。
べき乗って要は指数なんですけど、
そういう難しい話を出来るだけ捨てて、算数の世界で説明出来る位まで掘り下げて説明します。

例えば 10の2乗は100、10の3乗は1000となります。
これを数字の動きに目を合わせてもう一度、書いてみます。
00010.00000 ←これを2乗すると↓
00100.00000 //10という値が左に1つずれた結果が答え

00010.00000 ←これを3乗すると↓
01000.00000 //10という値が左に2つずれた結果が答え

こういう風に表す事が出来ます。
じゃあ、10のマイナス2乗ってなった場合はどうなるのかというと、
00010.00000 ←これを-2乗する↓
00000.01000 //10という値が右に3つずれた結果が答え

という答えになります。
1を基準点として、右や左にいくつずれるか。
これがべき乗なのです。


で、2のべき乗を考えた時は、
全部2進数で考える必要があります。
00010.00000 ←2進数で表した数値の2
00100.00000 ←2乗した結果。数値で言うと4
00010.01000 //-2乗した結果。数値で言うと0.25


これで何となく分かっていただけたでしょうか?
ちなみに37のx乗を計算するみたいな時があったとしたら、
それは37進数で考えるという計算が必要になるのです。

算数の延長線上だけの概念だけだといまいち理解出来ないですよね。
べき乗って要は指数なんですけど、
そういう難しい話を出来るだけ捨てて、算数の世界で説明出来る位まで掘り下げて説明します。

例えば 10の2乗は100、10の3乗は1000となります。
これを数字の動きに目を合わせてもう一度、書いてみます。
00010.00000 ←これを2乗すると↓
00100.00000 //10という値が左に1つずれた結果が答え

00010.00000 ←これを3乗すると↓
01000.00000 //10という値が左に2つずれた結果が答え

こういう風...続きを読む

Q正規マルコフ情報源のエントロピーについて

次の行列であらわされる正規マルコフ情報源のエントロピーを計算せよ、という課題を出されました
(すでに回収も終わっているのでカンニングにはなりません、念のため)

P=| 0.2 0 0.8 |
  | 0.4 0.6 0 |
| 0 0.3 0.7 |

まず定常確率を求めたのですが求まった定常確率が間違っていたようなのです。
以下に求める際に用いた式を載せますので間違っている点があればご教授ください。
また、その後のエントロピーの計算に関しても経過と答えを載せてほしいです。

P(0)=0.2P(0)+0.8P(2)
P(1)=0.6P(1)+0.4P(0)
P(2)=0.7P(2)+0.3P(1)

P(0)+P(1)+P(2)=1

この式を解くと各値が1/3となりました。

最後に私はこの辺をあまり理解できていないため質問文にも至らないところが多々あると思います。
そのようなことがあれば補足欄で説明したいと思います。

Aベストアンサー

> 定常確率に関して
> 口頭で各値が1/3に~なったと説明したところ教授にそれは違うと否定されていたんです。1/3で合っていたなら何故否定されたのでしょう?

状態確率が列ベクトルでなく行ベクトルなのです.だから,解くべき方程式は P x = x でなくて x P = x です.これを sum x = 1 のもとで解くと x = [3 6 8]/17 です.

状態確率が行ベクトルらしいことは,P を見てわかります.行ベクトルなら,ある状態,たとえば状態 1 にいると,次の状態が 1 である確率が 0.2,2 である確率が 0,3 である確率が 0.8 で,合計が 1 になります.もし列ベクトルだったら,たとえば状態 1 にいると,次の状態が 1 である確率が 0.2,2 である確率が 0.4,3 である確率が 0 になってしまい,合計が 1 になりません.


人気Q&Aランキング

おすすめ情報