1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
|
|
1 | |
Обратимое перемешивание массива26.12.2017, 13:00. Показов 1103. Ответов 14
Метки нет (Все метки)
Здравствуйте! Хочу написать функцию, которая будет перемешивать массив с помощью числа сида. В конце будет известно перемешанный массив и массив до перемешивания. Нужно так же по этим двум массивам без проблем определить число сид без брута, которое использовалось для перемешивания. Никак не догоню, как же такое реализовать, ломаю голову неделю уже. Буду рад за любую помощь по теме)
0
|
26.12.2017, 13:00 | |
Ответы с готовыми решениями:
14
Перемешивание многомерного массива Обратимое шифрование в php Обратимое шифрование данных Случайное перемешивание массива с использованием буферного массива |
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
|
|
02.01.2018, 17:44 | 2 |
допустим число 1 и три элемента в массиве - 0, 1, 2
на основании размера массива получаем максимальное число цифр в номере его элемента - 1 1. берём первую цифру, 1, значит нам требуется одноциферный номер 2. берём следующую цифру, её нет, значит цикл повторять не будем, заменим отсутствующую цифру на 0 3. приведём число 0 к набору элементов массива, если бы это было 9 мы бы поделили на 3 и получили остаток от деления 4. итак мы будем работать с нулевым элементом 5. дальше подумаем что с ним делать, повторим пункты 1-4, но на этот раз получим число сдвига, 0 циферный номер преобразуем к одноциферному (у нас же диапазон циферности 1-1), число 0 воспримем как отсутствие сдвига и вернём исходный массив 6. повторим все пункты, если у нас ещё остались цифры например число 1231 и массив 0,1,2 1. одноциферный номер 2, значит будем двигать цифру 2 2. одноциферный (3=>1) номер 2, значит будем двигать её на 2 вправо 3. в результате массив 0,1,2 => 2,0,1 => 0,2,1
0
|
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
|
|
03.01.2018, 01:40 [ТС] | 3 |
Немного не понял ваш пример, у меня в массиве будет около 50 000 значений и диапазон каждого от 1 000 до 50 000-60 000
0
|
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
|
|
03.01.2018, 06:50 | 4 |
исходное число воспринимаем как последовательность чисел, дающих подсказку, какой элемент сдвигать и на сколько в право
в результате массив можно перемешать, перемешивание обратимое, так как мы знаем, какой элемент и на сколько сдвигали вправо значения элементов роли не играют, перешивание идёт по ключам элемента массива, а они (если массив не ассоциативный) имеют номер 0,1,2 и т.д.
0
|
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
|
|
04.01.2018, 17:41 [ТС] | 5 |
я пытаюсь написать алгоритм, который будет перемешивать используя одно целое число, и чтобы имея два массива можно было без проблем получить число сид и число не должно быть больше 2 миллиардом. Думаю здесь нужна как минимум какая-то формула математическая.
0
|
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
|
|
05.01.2018, 10:36 [ТС] | 7 |
ну тогда непонятно, каким образом алгоритм используя число сид будет перемешивать массив
0
|
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
|
|
05.01.2018, 15:42 [ТС] | 9 |
но элементов в массиве будет около 50 000. Нужно чтобы число было не больше 4 миллиардов
0
|
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
|
|
05.01.2018, 18:06 | 10 |
можно зациклить смещения, цифры 01234 - будут сдвигать элемент вправо, 56789 - влево, или наоборот
когда цифры числа расходовались, а элементы ещё не все сдвинуты можно склеивать остаток с новым числом например число 123, с помощью него сдвинем первые 3 элемента, потом 4,5,6 элемент и т.д.
1
|
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
|
|
05.01.2018, 22:21 [ТС] | 11 |
а каким образом можно получить число сид на основе двух массивов? если можно, приведите пример на php
0
|
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
|
|
06.01.2018, 21:29 [ТС] | 13 |
Хммм, чем функция implode() поможет в моей задачи, когда просто соединяет массивы, как в вашем примере?
0
|
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
|
|
10.01.2018, 12:49 [ТС] | 15 |
Спасибо за идею, думаю при наличии мозгов можно добиться неплохих результатов в разного рода задачах, напишу алгоритм взяв за основу число сид с перестановками и зацикливанием, поэкспериментирую под решение своей задачи
0
|
10.01.2018, 12:49 | |
10.01.2018, 12:49 | |
Помогаю со студенческими работами здесь
15
Перемешивание массива Перемешивание массива Перемешивание массива Перемешивание массива Перемешивание массива на месте Перемешивание значений массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |