2015-05-17 2 views
-3

я нашел много решения, но никто не быстрее здесь проблема ...Шифр ​​дешифрования логика

MR «A» и MR «B» являются друзьями. Они хотят зашифровать их разговор. Поэтому они изобретают новый шифр. Каждое сообщение кодируется в его двоичное представление Затем записывается K раз, сдвинутое на 0,1, ⋯, K-1 бит.

Если B = 1001010 и K = 4 это выглядит так:

`1001010 
    1001010 
    1001010 
    1001010` 

, а затем выполняет операцию XOR и мы получаем

1001010 
    1001010 
     1001010 
     1001010 
    -------------- 
    1110100110 (ENCODED MESSAGE SEND TO B) 

сейчас, то это закодированное сообщение дается получатель (MR 'B') со следующей информацией

1) количество бит в исходной строке (например, 7 в нашем примере)

2) число смен мы, выполненные в исходной строке (здесь 4)

3) закодированные строки (здесь 1110100110)

MR 'B' должен найти ОРИГИНАЛ строки, которая 1001010

пожалуйста, помогите мне в логике, что, как я могу найти исходную строку я MR «B»

+0

Вы пробовали что-то, что у вас возникли проблемы с реализацией, или просто хотите, чтобы кто-то просто сказал вам ответ? –

+0

Почему вы хотите работать в этой области, если у вас нет интереса к этой проблеме? –

+0

Я пробовал, но мое решение принимает O (n^2) time @stvcisco – Harish

ответ

1

Простой, хотя это относится на math.stachexchange.com

во-первых, отметим, что исключающее будет 1, если N Умер 1 s нечетный, в противном случае 0.

Таким образом, мы можем работать в обратном направлении:

??????? 
??????? 
    ??????? 
    ??????? 
1110100110 

Первый 1, так что должно быть нечетное число 1 с, и есть только одно место, поэтому он должен быть 1! Мы можем скопировать его к остальным:

1?????? 
1?????? 
    1?????? 
    1?????? 
1110100110 

Второй говорит, что есть нечетное число 1 с, так что пространство должно быть 0:

10????? 
10????? 
    10????? 
    10????? 
1110100110 

Третий же, поэтому мы нужно добавить еще 0:

100???? 
100???? 
    100???? 
    100???? 
1110100110 

Четвертый номер 0, поэтому мы должны добавить 1 сделать ню mber из 1 с даже:

1001??? 
1001??? 
    1001??? 
    1001??? 
1110100110 

И так далее:

10010?? 
10010?? 
    10010?? 
    10010?? 
1110100110 

100101? 
100101? 
    100101? 
    100101? 
1110100110 

1001010 
1001010 
    1001010 
    1001010 
1110100110 

И вуаля!

Обратите внимание, что на самом деле это безопасно сделать это:

1001010 
100101 0 \ 
    10010 10 |--- Ignorable bits 
    1001 010/
1110100 

, потому что вы можете использовать тот же метод, чтобы получить ту же информацию.

+0

отлично работает ... спасибо @AJFarmer – Harish

+0

@Harish не проблема. Мне это показалось интересным, поэтому я работаю над решением Haskell. Благодаря! – AJFarmar

Смежные вопросы