Как я могу симулировать ошибочную передачу битов через провод? - PullRequest
2 голосов
/ 17 августа 2011

Итак, у меня есть следующая домашняя работа, но я не совсем понимаю, каков этот процесс.Кто-нибудь видел этот вопрос раньше или действительно понимает, какой должна быть логика?Я не хочу код, я знаю, как программировать, но я точно не знаю, что здесь делать.

Рассмотрим провод, по которому данные передаются побитно.Иногда бит или группа последовательных битов передаются неправильно.Если предыдущий бит был передан правильно, вероятность того, что текущий бит передан неправильно, равна 0,1.Если предыдущий бит был передан неправильно, вероятность того, что текущий бит также передан неправильно, равна 0,3.Напишите программу под названием BitError.java, которая имитирует передачу миллиона битов и выводит процент неправильно переданных битов.(Подсказка: согласно теории ожидаемый ответ составляет 12,5%.)

Ответы [ 4 ]

2 голосов
/ 17 августа 2011

Вы проверяете вероятность события следующим образом

  1. Генерация случайного случайного числа от 0 до 1
  2. Если сгенерированное число меньше вероятности наступления события, то событие произошло

Ваш код должен выглядеть примерно так

// 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
1 голос
/ 17 августа 2011

Они хотят, чтобы вы написали симулятор. Вы делаете цикл, который делает миллион итераций, каждая из которых представляет передачу одного бита. Каждый раз, когда вы выбираете случайным образом, будет ли бит передан правильно или неправильно, основываясь на двух правилах, и ведете счет.

В конце ваша симуляция скажет вам, сколько бит было передано правильно (что, по-видимому, должно быть близко к 87,5%).

0 голосов
/ 17 августа 2011

хорошо, так что вам нужно «передавать» данные побитно и на каждой итерации вычислять вероятность.

давайте рассмотрим, что передача первого бита осуществляется с вероятностью бита с предыдущей правильной передачей. это означает, что вероятность первого бита для правильной передачи составляет 0,9

следующая итерация: если бит 1 был передан правильно, то вероятность 0,9 верна, в противном случае 0,7

0 голосов
/ 17 августа 2011

Вот почему это называется домашним заданием .... Оно разработано так, что вы точно не знаете, что делать.

Проблема связана с рекурсией и итерацией. Google: рекурсия .Учитывая текущее состояние (был ли предыдущий бит передан правильно или нет), вы можете рассчитать вероятность того, что текущий бит передан правильно.После этого просто вероятность (например, умножение) получить 12,5%.Вы даже можете сделать это без циклического прохождения всех битов, в зависимости от того, сколько статистики вы знаете.

В конце вы должны знать все о рекурсии.Это то, о чем действительно идет речь.Каков ваш базовый случай (т.е. первый бит) и каков ваш рекурсивный шаг (то есть каждый последующий бит)?Как только вы это поймете, написание Java должно быть простым.

...