Моя задача - закодировать машину-загадку. Я почти сделал это, но единственное, что меня тормозит, это то, что весь код в каждом случае должен выполняться менее чем за 3 секунды. Существуют тысячи переменных, таких как [1000+], поэтому мне нужно оптимизировать мой код. Первое, что я хотел бы изменить, это моя функция обмена. Я слышал о чем-то вроде циркулярного массива, но я не уверен, как это работает. Обычно дело в том, что перед каждым кодированием мне нужно один раз повернуть ротор. Думаю, если число превысит тысячи, это может занять много времени, есть идеи для этого? Во-первых, у меня есть класс, в котором хранилище использует только роторы, поскольку я могу объявить их любым числом, но перед каждым кодированием я объявляю, сколько их, а затем я устанавливаю их положение как обычный алфавит 1 2 3 4, набор ротора для 1 2 4 3 и каждый ротор цифрового кодирования вращается до 2 4 3 1, затем 4 3 1 2, затем 3 1 2 4 et c ... и то же самое в обратном порядке.
for(int i=0;i<ile_rotorow_wiad;i++)
{
rotory_uzyte[i].copy(rotory[wiadomosc.jakie_rotory[i]],ile_liter, rotory_rev[wiadomosc.jakie_rotory[i]]);
rotory_uzyte[i].Obroc(wiadomosc.pozycja[i], ile_liter);
}
это код, который выполняется каждые 1 oop пока «загадочное сообщение» не равно 0.
rotory_uzyte[0].Obroc(2, ile_liter);
функция Obro c:
void Rotor::Obroc(int pozycja, int ile)
{
for(int i=0;i<pozycja-1;i++)
{
for(int j=0;j<ile-1;j++)
{
swap(pozycje[j],pozycje[j+1]);
swap(pozycje_rev[j],pozycje_rev[j+1]);
}
}
}
Как видно из больших чисел, оно бесполезно и займет так много времени. Любые идеи, как оптимизировать это, если это делает "круги" как круги, я не могу назвать это. Как я уже говорил, круговой массив будет хорошей вещью? Как это должно выглядеть тогда?