Делает любой знает, существует ли способ произвести 2D массив из 1D массив, где строки в 2D сгенерированы путем повторения соответствующих элементов в 1D массив.
Т.е.:
1D array 2D array
|1| |1 1 1 1 1|
|2| |2 2 2 2 2|
|3| -> |3 3 3 3 3|
|4| |4 4 4 4 4|
|5| |5 5 5 5 5|
Вы можете сделать это с помощью функции ПОВТОР :
>> A = (1:5).'
A =
1
2
3
4
5
>> B = repmat(A,1,5)
B =
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
РЕДАКТИРОВАТЬ: БОНУСНЫЙ ОТВЕТ! ;)
Для вашего примера, REPMAT - самая простая в использовании функция. Однако еще одна интересная функция, о которой следует знать, - это KRON , которую вы также можете использовать в качестве решения следующим образом:
B = kron(A,ones(1,5));
Для небольших векторов и матриц KRON может быть ] немного быстрее, но немного медленнее для больших матриц.
Если дерево является рекурсивно определенной структурой данных, которая может быть пустой или узлом с левым и правым поддеревьями (например, деревья поиска или куча), то естественное определение состоит в назначении 0 пустому дереву и 1 + высоты верхнего поддерева непустому дереву.
Если дерево является графом, то естественное определение является самым длинным путем от корня к листу, поэтому дерево только корня имеет 0 глубины. Обычно ты даже не считаешь пустые деревья в этом случае.
-121--2320265-Высота дерева - это длина самого длинного пути к терминальному узлу в любом из его нижестоящих элементов.
Википедия говорит, что высота пустого дерева равна -1 . Я не согласен. Пустое дерево - это буквально просто дерево, содержащее один терминальный узел (нулевое или специальное значение, представляющее пустое дерево). Поскольку узел не имеет дочерних элементов, длина самого длинного пути должна быть пустой суммой = 0, а не -1.
Аналогично, непустое дерево имеет два дочерних элемента, поэтому по определению существует по крайней мере путь > = 1 к терминальному узлу.
Мы могли бы определить наше дерево следующим образом:
type 'a tree =
| Node of 'a tree * 'a * 'a tree
| Nil
let rec height = function
| Node(left, x, right) -> 1 + max (height left) (height right)
| Nil -> 0
-121--2320266- В духе бонусных ответов, вот некоторые из моих собственных:
Пусть A = (1:5) '
С помощью индексов [быстрее, чем repmat]:
B = A (:, one (5,1
Использование матричного внешнего продукта:
B = A * единиц (1,5)
Использование bsxfun () [не лучший способ выполнения]
B = bsxfun (@ plus, A, нули (1,5))
% # или
B = bsxfun (@ times, A, единицы (1,5))
Вы можете попробовать что-то вроде:
a = [1 2 3 4 5]'
l = size(a)
for i=2:5
a(1:5, i) = a(1:5)
Цикл просто продолжает добавлять столбцы в конец.