Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
1

Обратимое перемешивание массива

26.12.2017, 13:00. Показов 1103. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Хочу написать функцию, которая будет перемешивать массив с помощью числа сида. В конце будет известно перемешанный массив и массив до перемешивания. Нужно так же по этим двум массивам без проблем определить число сид без брута, которое использовалось для перемешивания. Никак не догоню, как же такое реализовать, ломаю голову неделю уже. Буду рад за любую помощь по теме)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2017, 13:00
Ответы с готовыми решениями:

Перемешивание многомерного массива
Нужно, чтобы на экране вопросы и варианты ответов на них выходили в случайном порядке. Как...

Обратимое шифрование в php
Простой пример : <?php // Шифрование данных $кеу = "это КЛЮЧ"; $text = "Сообщение, которое...

Обратимое шифрование данных
Написал недавно обратимую шифровку данных, захотел поделиться и выслушать мнения по поводу нее :-)...

Случайное перемешивание массива с использованием буферного массива
Всем привет, кто может помочь, нужно тоже самое, но на C# const N = 100; var ...

14
ytf
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
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
03.01.2018, 06:50 4
Цитата Сообщение от jerekito Посмотреть сообщение
Немного не понял ваш пример
исходное число воспринимаем как последовательность чисел, дающих подсказку, какой элемент сдвигать и на сколько в право

в результате массив можно перемешать, перемешивание обратимое, так как мы знаем, какой элемент и на сколько сдвигали вправо

значения элементов роли не играют, перешивание идёт по ключам элемента массива, а они (если массив не ассоциативный) имеют номер 0,1,2 и т.д.
0
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
04.01.2018, 17:41  [ТС] 5
я пытаюсь написать алгоритм, который будет перемешивать используя одно целое число, и чтобы имея два массива можно было без проблем получить число сид и число не должно быть больше 2 миллиардом. Думаю здесь нужна как минимум какая-то формула математическая.
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
04.01.2018, 18:12 6
а я думаю формула не требуется
0
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
05.01.2018, 10:36  [ТС] 7
ну тогда непонятно, каким образом алгоритм используя число сид будет перемешивать массив
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
05.01.2018, 12:16 8
Цитата Сообщение от jerekito Посмотреть сообщение
каким образом алгоритм используя число сид будет перемешивать массив
есть число 1261496378916
берем число 1 и 2 - сдвигаем первый элемент вправо на 2 позиции
берем число 6 и 1 - сдвигаем шестой элемент вправо на 1 позицию
и т.д.
0
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
05.01.2018, 15:42  [ТС] 9
но элементов в массиве будет около 50 000. Нужно чтобы число было не больше 4 миллиардов
0
ytf
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
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
06.01.2018, 18:18 12
PHP
1
2
3
$a=[1,2,3];
$b=[1,2,3,4];
$c=implode("",$a).implode("",$b);
0
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
06.01.2018, 21:29  [ТС] 13
Хммм, чем функция implode() поможет в моей задачи, когда просто соединяет массивы, как в вашем примере?
0
ytf
276 / 259 / 185
Регистрация: 15.08.2017
Сообщений: 1,483
07.01.2018, 11:37 14
вопрос

Цитата Сообщение от jerekito Посмотреть сообщение
чем функция implode() поможет в моей задачи
ответ

Цитата Сообщение от jerekito Посмотреть сообщение
получить число сид на основе двух массивов
0
1 / 0 / 0
Регистрация: 03.08.2017
Сообщений: 37
10.01.2018, 12:49  [ТС] 15
Спасибо за идею, думаю при наличии мозгов можно добиться неплохих результатов в разного рода задачах, напишу алгоритм взяв за основу число сид с перестановками и зацикливанием, поэкспериментирую под решение своей задачи
0
10.01.2018, 12:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2018, 12:49
Помогаю со студенческими работами здесь

Перемешивание массива
как переписать мой код так чтоб программа печатала функцию несколько раз.и чтоб ответы Rand не...

Перемешивание массива
Здравствуйте, не понимаю как перемешать массив. Напишите пожалуйста(ссылки кидать не надо, уже...

Перемешивание массива
Есть массив: l = .Как можно его перемешать, чтобы в итоге: 1.) Позиция каждого элемента отличалась...

Перемешивание массива
Есть массив из 4 слов нужно в список перемешать их и записать все эти четыре слова в листбокс,...

Перемешивание массива на месте
Посмотрел в доках и не увидел подобной функции. Добавлено через 17 минут function...

Перемешивание значений массива
Имеется массив нужно перемешивать их значения. помогите пожалуйста! Dim myarray(15) As Integer...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru