Как я могу сделать мой расшифровать метод эффективнее?


Я делаю простой перестановочный шифр. Я тестирую программы со словом "компьютер" с секретным ключом "5,2,8,3,7,1,4,6", где шифрования метод поставить 5 буква 'U' в первой позиции, 2-я буква " О " на 2-е место, 8-я буква 'R' в 3-й позиции...

Так что на выходе будет:
оригинал: компьютер
зашифрован:uormecpt
расшифровывается:компьютер

Сейчас мой метод расшифровки имеет о(N^2). Как я могу сделать это быстрее?

Где символ[] г будет uormecpt. В Z[Дж] - 1-это смещение как мой итератор начинается с 0, но мой ключ начинается с 1.

public static char[] decrypt(char[] y, int[] z)
{
    char[] decrypted = new char[y.length];

    for (int i = 0; i < y.length; i++)
    {
        for (int j = 0; j < y.length; j++)
        {
            if (i == z[j]-1)
                decrypted[i] = y[j];
        }
    }

    return decrypted;
}


378
4
задан 16 апреля 2011 в 06:04 Источник Поделиться
Комментарии
1 ответ

Если вы можете предположить, что каждый индекс в зашифрованное сообщение включен в ключ, можно перебрать ключа и зашифрованных сообщений, помещая каждую букву в соответствующее гнездо расшифровать сообщение:

public static char[] decrypt(char[] encrypted, int[] key)
{
char[] decrypted = new char[encrypted.length];

for (int i = 0; i < encrypted.length; i++)
{
decrypted[key[i]] = encrypted[i];
}

return decrypted;
}

6
ответ дан 16 апреля 2011 в 06:04 Источник Поделиться