Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Передача вместе с сообщением некоторого хеша - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Если каждого консольного процесса существует свой дескриптор буфер экрана, то где именно он находится? http://www.cyberforum.ru/cpp-beginners/thread948497.html
То есть фишка в чём: если мы создадим консольный процесс, а потом ИЗМЕНИМ буфер экрана и сделаем его активным, то чёрта с два мы туда что-нибудь запишем общеизвестными функциям, например system...
C++ Кодировка в консоли (на ЕГЭ) В этом году буду писать экзамен, но дело в том, что в visual studio setlocale(LC_ALL,"Rus"); не приводит ни к чему (знаю, что в самой консоли надо настраивать другой шрифт, который поддерживает... http://www.cyberforum.ru/cpp-beginners/thread948490.html
Убрать из слова каждую вторую гласную букву в диапазоне от 8 до 13 буквы C++
тема: текстовые файлы. убрать из слова каждую вторую гласную букву в диапазоне от 8 до 13 буквы.
C++ Файловый ввод-вывод в задаче
Не понимаю как составить вывод данных из файла в задаче (см.ниже), я вообще запутался с вводом выводом, помогите растолковать. Если cout (ostream) выводит текст, почему тогда объект fout (ofstream...
C++ Поиск циклов отрицательной стоимости http://www.cyberforum.ru/cpp-beginners/thread948437.html
Добрый день помогите с написание программы. Суть такова. На вход в программу подается в .txt граф представленный в таблице смежности. допустим перейти от A к B стоит -5 от B к C стоит 2 от C к D...
C++ как сложить/умножить/найти большее/найти меньшее/найти средние число привет всем подскажите как сложить/умножить/найти большее/найти меньшее/найти средние число из например 10 введенных чисел, в одной программе.Всем заранее респект. подробнее

Показать сообщение отдельно
Sivilan
6 / 6 / 0
Регистрация: 17.03.2013
Сообщений: 66

Передача вместе с сообщением некоторого хеша - C++

04.09.2013, 22:33. Просмотров 387. Ответов 1
Метки (Все метки)

При передаче информационных сообщений по каналам связи часто возникают ошибки, и получается что полученное сообщение отличается от отправленного. Для борьбы с этим применяют различные коды обнаружения ошибок, а также корректирующие коды, позволяющие исправлять наиболее вероятные ошибки. Одним из методов обнаружения ошибок является передача вместе с сообщением некоторого хеша — контрольной суммы, которую можно рассчитать для полученного сообщения и сравнить с контрольной суммой исходного сообщения.
В этой задаче вам необходимо будет реализовать коррекцию ошибок в полученном сообщении с помощью контрольной суммы, которая рассчитывается как полиномиальный хеш. Будем считать, что передается некоторая битовая строка, хранящаяся как двоичное число из n бит. Если пронумеровать биты числа с нуля, начиная с младшего, то полиномиальный хеш рассчитывается по следующей формуле:
h(a) = (a0 + a1t + a2t 2 + ... + ai t i + ... + an − 1t n − 1) mod M, где ai — i -й бит числа.
В этой задаче всегда t = 239, M = 109 + 7.
Принимающая сторона получает, возможно искаженное, сообщение и полиномиальный хеш, рассчитанный для отправленного сообщения. Считается, что сам хеш передается без ошибок. Исправление ошибок происходит по методу наибольшего правдоподобия — необходимо найти сообщение, отличающееся от полученного в минимальном числе бит, и имеющее хеш, равный полученному.
Формат входных данных
Первая строка содержит единственное число K (1 ≤ K ≤ 10) — количество переданных сообщений. Каждая из следующих K строк содержит описание переданного сообщения — три целых числа n (1 ≤ n ≤ 34) — длина сообщения, m (0 ≤ m < 2n ) — число, двоичная запись которого задает битовую строку полученного сообщения и h (0 ≤ h < 109+7) — полученный хеш.
Суммарная длина всех переданных сообщений в одном тесте не превосходит 100.
Формат выходных данных
Для каждого сообщения в отдельной строке необходимо вывести единственное число «−1», если это сообщение невозможно расшифровать, иначе необходимо сначала вывести число d — минимальное количество ошибок и далее в этой же строке d чисел — номера битов, которые были искажены при передаче. Если возможных ответов несколько, выведите любой.
Примеры
Входные данные Выходные данные
3
2 2 239
1 0 1
2 2 238
0
1 0
-1
Идея заключается в том, что необходимо отдельно посчитать хеши для всевозможных вариантов первых n/2 бит сообщения и отдельно для всевозможных вариантов остальных n − n/2 бит сообщения. В каждой половине получится максимум 217 = 131072 вариантов. Поскольку нам необходимо получить сообщение с фиксированным хешом h, то каждому варианту значения хеша для первой половины бит h1 в пару сопоставляется не более одного значения хеша для второй половины бит h2 такое, что h = (h1 + h2) mod M.
Осталось научиться для каждого варианта h1 быстро находить соответствующее значение h2. Для этого можно воспользоваться такими структурами данных, как set в C++ .И, наконец, необходимо из всех найденных пар подходящих значений h1 и h2 выбрать ту, в которой изменилось минимальное число бит по сравнению с принятым сообщением m.Помогите с кодом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru