Деление массива(как дерево)
Массив м.б любого размера(длина массива -четное число)
import numpy as np
Y=list()
for i in range(1,9):
Y.append(i)
MASS=list()
j=0
while len(Y)!=2:
j+=2
delit=int(len(Y)/2)
MASS.append(np.array_split(Y,j))
Y=np.array_split(Y,delit)
Понятно, что это бред... Может есть идеи?
Решение:
j=0
i=0
while i!=len(Y):
i+=1
j = int(len(Y)/(2**i))
print(j)
try:
MASS.append(np.array_split(Y,j))
except ValueError:
pass
Ответы (2 шт):
Автор решения: Danis
→ Ссылка
Если я вас правильно понял то так:
arr = list(range(1, 9))
res = [arr[i:i+2] for i in range(0, len(arr), 2)]
Автор решения: Qwertiy
→ Ссылка
Очень похоже на дерево отрезков
- Чётной длины недостаточно, нужна степень двойки.
- Нулевой индекс выкидываем и используем [1..2k+1-1].
- Для вершины
iпотомками являютсяi*2иi*2+1. - Вершины с номерами [2k..2k+1-1] хранят данные.
- Вершины с номерами [1..2k-1] хранят агрегированные значения.
- Каждая вершина покрывает весь треугольник под собой.
┌───────────── 01 ─────────────┐
┌───── 02 ─────┐┌───── 03 ─────┐
┌─ 04 ─┐┌─ 05 ─┐┌─ 06 ─┐┌─ 07 ─┐
08 09 10 11 12 13 14 15
