Java 如何通过导线模拟错误的位传输?
所以我有以下的家庭作业,但我不明白到底是什么过程。以前有没有人见过这个问题,或者真正理解逻辑应该是什么?我不需要代码,我知道如何编程,但我不知道该怎么做 考虑一条数据逐位传输的导线。偶尔,一点或一组 连续位传输错误。如果前一位传输正确,则 当前位错误传输的概率为0.1。如果前一位是 传输错误,当前位也被错误传输的概率 是0.3。编写一个名为BitError.java的程序,模拟一百万次的传输 位,并打印出错误传输的位的百分比。 (提示:根据理论,预期答案为12.5%。)Java 如何通过导线模拟错误的位传输?,java,probability,Java,Probability,所以我有以下的家庭作业,但我不明白到底是什么过程。以前有没有人见过这个问题,或者真正理解逻辑应该是什么?我不需要代码,我知道如何编程,但我不知道该怎么做 考虑一条数据逐位传输的导线。偶尔,一点或一组 连续位传输错误。如果前一位传输正确,则 当前位错误传输的概率为0.1。如果前一位是 传输错误,当前位也被错误传输的概率 是0.3。编写一个名为BitError.java的程序,模拟一百万次的传输 位,并打印出错误传输的位的百分比。 (提示:根据理论,预期答案为12.5%。) 他们想让你写一个模拟器。
他们想让你写一个模拟器。你做了一个循环,进行一百万次迭代,每次迭代代表一个比特的传输。每次您根据这两条规则随机决定位的传输是否正确,并保持计数
最后,您的模拟将告诉您正确传输了多少位(显然应该接近87.5%)。这就是为什么它被称为家庭作业。。。。它被降格了,以至于你不知道该做什么 这个问题与递归和迭代有关。给定当前状态(无论前一位是否正确传输),您可以计算当前位正确传输的概率。之后,简单的概率(如乘法)为12.5%。你甚至可以在不循环所有位的情况下完成它,这取决于你知道多少统计数据 最后,您应该了解所有关于递归的知识。这就是作业的真正意义所在。基本情况(即第一位)是什么,递归步骤是什么(即此后的每一位)?一旦理解了这一点,编写Java应该很容易。好的,因此需要逐位“传输”数据,并在每次迭代中计算概率
让我们考虑,第一比特的传输是具有前面正确传输的比特的概率。这意味着第一位正确传输的概率为0.9
下一次迭代:如果第1位传输正确,则概率为0.9表示正确,否则概率为0.7表示事件发生的概率,如下所示
// Generate random bit either a 0 or a 1
int bit = RandInt(0,1)
// Assume first bit was correct
bool bPreviousWasCorrect = false;
Loop 1 million times
double probBitIsCorrect = RandUnif(0,1) // get a random number between 0 and 1
if bPreviousWasWrong then
// if an error has occured then a 2nd error occurs with prob 0.3
if (probBitIsCorrect < 0.3) then
Set bPreviousWasWrong to true
increment number of wrong bits
else
Set bPreviousWasWrong to false
increment number of correct bits
end if
else
if (probBitIsCorrect < 0.1) then
Set bPreviousWasWrong to true
increment number of wrong bits
else
Set bPreviousWasWrong to false
increment number of correct bits
end if
Display results when done
//生成0或1的随机位
int位=RandInt(0,1)
//假设第一位是正确的
bool bPreviousWasCorrect=错误;
循环100万次
double-ProbbitsRect=RandUnif(0,1)//获取一个介于0和1之间的随机数
如果以前的错误,那么
//如果发生错误,则会发生第二个错误,错误概率为0.3
如果(ProbbitsRect<0.3),则
将BPPreviousWasError设置为true
增加错误位数
其他的
将BPPreviousWasError设置为false
增加正确位的数量
如果结束
其他的
如果(ProbbitsRect<0.1),则
将BPPreviousWasError设置为true
增加错误位数
其他的
将BPPreviousWasError设置为false
增加正确位的数量
如果结束
完成后显示结果
你到底在哪里用这个碰壁?你想自己解决这个问题,并且把它当作家庭作业,这很好。然而,如果我们不知道你的处境,我们很难帮助你:)主持人注:请保持建设性的评论和主题。如果你不想回答这个问题,没有什么强迫你去做的,所以问题是我不知道我需要采取什么步骤。好吧,每个循环都可以用递归来代替,但是一百万次没有尾部调用优化的迭代会破坏你的调用堆栈。。。