Java 如何通过导线模拟错误的位传输?

Java 如何通过导线模拟错误的位传输?,java,probability,Java,Probability,所以我有以下的家庭作业,但我不明白到底是什么过程。以前有没有人见过这个问题,或者真正理解逻辑应该是什么?我不需要代码,我知道如何编程,但我不知道该怎么做 考虑一条数据逐位传输的导线。偶尔,一点或一组 连续位传输错误。如果前一位传输正确,则 当前位错误传输的概率为0.1。如果前一位是 传输错误,当前位也被错误传输的概率 是0.3。编写一个名为BitError.java的程序,模拟一百万次的传输 位,并打印出错误传输的位的百分比。 (提示:根据理论,预期答案为12.5%。) 他们想让你写一个模拟器。

所以我有以下的家庭作业,但我不明白到底是什么过程。以前有没有人见过这个问题,或者真正理解逻辑应该是什么?我不需要代码,我知道如何编程,但我不知道该怎么做

考虑一条数据逐位传输的导线。偶尔,一点或一组 连续位传输错误。如果前一位传输正确,则 当前位错误传输的概率为0.1。如果前一位是 传输错误,当前位也被错误传输的概率 是0.3。编写一个名为BitError.java的程序,模拟一百万次的传输 位,并打印出错误传输的位的百分比。 (提示:根据理论,预期答案为12.5%。)


他们想让你写一个模拟器。你做了一个循环,进行一百万次迭代,每次迭代代表一个比特的传输。每次您根据这两条规则随机决定位的传输是否正确,并保持计数


最后,您的模拟将告诉您正确传输了多少位(显然应该接近87.5%)。

这就是为什么它被称为家庭作业。。。。它被降格了,以至于你不知道该做什么

这个问题与递归和迭代有关。给定当前状态(无论前一位是否正确传输),您可以计算当前位正确传输的概率。之后,简单的概率(如乘法)为12.5%。你甚至可以在不循环所有位的情况下完成它,这取决于你知道多少统计数据

最后,您应该了解所有关于递归的知识。这就是作业的真正意义所在。基本情况(即第一位)是什么,递归步骤是什么(即此后的每一位)?一旦理解了这一点,编写Java应该很容易。

好的,因此需要逐位“传输”数据,并在每次迭代中计算概率

让我们考虑,第一比特的传输是具有前面正确传输的比特的概率。这意味着第一位正确传输的概率为0.9

下一次迭代:
如果第1位传输正确,则概率为0.9表示正确,否则概率为0.7表示事件发生的概率,如下所示

  • 生成0和1之间的统一随机数
  • 如果生成的数量小于发生事件的概率,则事件发生
  • 您的代码应该如下所示

    // 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
    增加正确位的数量
    如果结束
    完成后显示结果
    
    你到底在哪里用这个碰壁?你想自己解决这个问题,并且把它当作家庭作业,这很好。然而,如果我们不知道你的处境,我们很难帮助你:)主持人注:请保持建设性的评论和主题。如果你不想回答这个问题,没有什么强迫你去做的,所以问题是我不知道我需要采取什么步骤。好吧,每个循环都可以用递归来代替,但是一百万次没有尾部调用优化的迭代会破坏你的调用堆栈。。。