Как заполнить пустой массив разными числами, используя итеративные циклы без дублирования в python?
Я хочу сделать массив, как эта форма.
arr =[[1 2 3 4],
[1 2 3 4],
[2 2 3 4],
[5 5 5 4]]
У меня есть пять массивов для этого.
arr0= [[0 0 0 0],
[0 0 0 0],
[0 0 0 0],
[0 0 0 0]]
arr1= [[1],
[1]]
arr2= [[0 2],
[0 2],
[2 2]]
arr3= [[3],
[3],
[3]]
arr4= [[4],
[4],
[4],
[4]]
arr5= [[5],[5],[5]]
Но проблема в том, что последовательность массива не указана. Также не допускается дублирование массива. В этом случае, как сделать правильную форму массива, используя итеративные циклы?
Я думал, используя эту функцию и нарезку индекса,
# Usage:
# addAtPos(xycoor)
# - mat1 : matrix to be added
# - mat2 : add this matrix to mat1
# - xycoor: tuple (x,y) containing coordinates
def addAtPos(mat1, mat2, xycoor):
size_x, size_y = np.shape(mat2)
coor_x, coor_y = xycoor
end_x, end_y = (coor_x + size_x), (coor_y + size_y)
mat1[coor_x:end_x, coor_y:end_y] = mat1[coor_x:end_x, coor_y:end_y] + mat2
return mat1
но это действительно трудно сделать идеальную форму.. пожалуйста, помогите мне!
1 ответ
Это проблема оптимизации, и она может быть очень сложной.
Используя только простой цикл, вы застрянете, поэтому в какой-то момент вам придется вернуться назад на несколько ходов и повторить их в другой позиции.
Одна вещь, которую вы можете попробовать, - это использовать дерево, чтобы отслеживать возможные ходы и ходы, сделанные далеко. Кроме того, начав с использования "больших" фигур, вы сможете рано обрезать дерево.
Пример:
Возьмите матрицу 4 в качестве первой. У вас есть только 4 возможных места для этого: столбец 1,2,3 или 4, поэтому вы создаете 4 ветви от корневого узла.
Теперь, если вы возьмете часть 5, вы увидите, что она никуда не уместится, если ваш первый ход был в столбцах 1,2 или 3. Так что это позволит вам склониться к этим ветвям. Теперь вы точно знаете, что матрица 4 находится в 4-м столбце.
Точно так же на более глубоких уровнях вы будете сбрасывать позиции для других фигур, пока не найдете лист своего дерева (узел, где все ваши фигуры соответствуют матрице).
Однако обратите внимание, что если матрица слишком большая или у вас слишком много частей, этот алгоритм может занять слишком много времени для решения проблемы.