プロが教える店舗&オフィスのセキュリティ対策術

C言語を用いて、

x→ 0 or 1
y→ 0 or 1

P(y=0|x=1) = P(y=1|x=0) = p
P(y=0|x=0) = P(y=1|x=1) = 1-p

を各ビット独立に達成する、プログラムを組みたいと思っています。

具体的にはNビットの 0 or 1 の系列を発生させて、
上記の確率で各ビットを独立に反転させたNビットの 0 or 1 の系列を得たいと思っています。

ですが、どう組めばよいか分かりません・・・

どなたかアドバイス、参考となるサイトを教えていただけないでしょうか・・・

A 回答 (2件)

懐かしい響き



const double p = 0.01; // 誤り率
const int N = 10000;  // ビット列の長さ
int x[N];  // 送信ビット列
int y[N];  // 受信ビット列

int rand_bin();     // 1 ビットの乱数を返す関数
double rand_real();  // [0,1] の一様乱数を返す関数

int main()
{
  int i;

  // 送信ビット列の生成
  for (i=0 ; i<N ; i++) {
    x[i] = rand_bin();
  }

  // 受信ビット列の計算
  for (i=0 ; i<N ; i++) {
    if (rand_real() < p) {// 一定の確率で
      y[i] = !x[i];// 誤り発生!
    } else {
      y[i] = x[i];
    }
  }

  // 後は、お好みで。

  return 0;
}

*注意*
 インデントのために、全角スペースを使っています。
 rand_bin と rand_real は別途定義してください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
ソースものせていただき、たすかりました!
「 if (rand_real() < p) { 」
この発想を思いつかなかったなかったです;;
ありがとうございます!

お礼日時:2010/11/22 15:08

・bit演算の知識。


・確率を表現するためのMathライブラリ関数についての知識。
・データ入出力の知識。
・Cの制御構造/基本文法についての知識。

――上記について不明点がどこにあるかを補足したほうが、回答が得られやすいかと。
たとえばbit演算できなくても、数字1文字「0」「1」の読み書きするプログラムをかけるならなんとかなりますし。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!
今後質問するときの参考にさせていただきます!!

お礼日時:2010/11/22 15:06

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