Как можно перемешать элементы массива в случайном порядке, сохраняя при этом исходный порядок элементов?

Как перемешать многомерный массив один раз для каждой копии сайта, чтобы порядок его элементов был рандомным, но сохранялся неизменным при каждом обновлении страницы?
  • 18 октября 2023 г. 13:18
Ответы на вопрос 2
Для перемешивания элементов массива в случайном порядке, сохраняя исходный порядок элементов, можно использовать алгоритм "Тасование Фишера — Йетса". Этот алгоритм заключается в следующем:

1. Начните с последнего элемента массива и идите в обратном порядке до первого элемента.
2. На каждом шаге выберите случайный индекс от 0 до текущего индекса (включительно).
3. Поменяйте местами текущий элемент с элементом, находящимся по выбранному индексу.

Пример реализации на языке Python:

```python
import random

def shuffle_array(array):
    for i in range(len(array)-1, 0, -1):
        j = random.randint(0, i)
        array[i], array[j] = array[j], array[i]

# Пример использования
my_array = [1, 2, 3, 4, 5]
shuffle_array(my_array)
print(my_array)
```

Чтобы перемешать многомерный массив один раз для каждой копии сайта, и при этом сохранить порядок элементов при каждом обновлении страницы, можно воспользоваться генерацией случайного числа на основе фиксированного "seed" (зерна), например текущего времени или фиксированного числа. Затем использовать это число в качестве семени для генерации случайных чисел при перемешивании массива.

Пример реализации на языке Python:

```python
import random

def shuffle_array(array, seed):
    random.seed(seed)
    for i in range(len(array)-1, 0, -1):
        j = random.randint(0, i)
        array[i], array[j] = array[j], array[i]
        
# Пример использования
my_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
seed = 12345  # Фиксированное число
shuffle_array(my_array, seed)
print(my_array)
```

При каждом обновлении страницы необходимо передавать одно и то же значение "seed" функции перемешивания, чтобы порядок элементов оставался неизменным. Значение "seed" можно хранить как переменную в коде или передавать через URL-параметры или кукисы при обновлении страницы.
Если в кэше отсутствуют данные, перемешайте массив и сохраните данные в кэше. В конце, возьмите данные из кэша.
Похожие вопросы