Перестановка символов с помощью спирального массива
intrlved = helintrlv(data,col,ngrp,stp)
[intrlved,state] = helintrlv(data,col,ngrp,stp)
[intrlved,state] = helintrlv(data,col,ngrp,stp,init_state)
intrlved = helintrlv(data,col,ngrp,stp) перестановка символов в data помещая их в массив с неограниченным числом строк по спирали, а затем помещая строки массива на выходе, intrlved. data должен иметь col*ngrp элементы. Если data является матрицей с несколькими строками и столбцами, она должна иметь col*ngrp строки, и функция обрабатывает столбцы независимо.
Функция использует массив для внутренних вычислений. Массив имеет неограниченные строки, индексированные на 1, 2, 3,..., и col столбцы. Разделы функций col*ngrp символы из входных данных в последовательные группы ngrp символы. Функция помещает k-ю группу в массив вдоль столбца k, начиная со строки 1 + (k-1) *stp. Позиции в массиве, не содержащие входных символов, имеют значения по умолчанию 0. Места выполнения функций col*ngrp символы из массива в выходных данных, intrlved, прочитав первое ngrp последовательно. Некоторые выходные символы являются значениями по умолчанию 0, а не входными символами; аналогично, некоторые входные символы остаются в массиве и не появляются в выходных данных.
[intrlved,state] = helintrlv(data,col,ngrp,stp) возвращает структуру, содержащую конечное состояние массива. state.value сохраняет входные символы, которые остаются в col столбцы массива и не отображаются в выходных данных.
[intrlved,state] = helintrlv(data,col,ngrp,stp,init_state) инициализирует массив с символами, содержащимися в init_state.value. Структура init_state обычно является state выходные данные предыдущего вызова этой же функции не связаны с соответствующим обращенным перемежителем. В этом синтаксисе некоторые выходные символы являются значениями по умолчанию 0, некоторые являются входными символами из data, и некоторые из них являются значениями инициализации из init_state.value.
В приведенном ниже примере целые числа изменяются от 1 до 24.
% Interleave some symbols. Record final state of array. [i1,state] = helintrlv([1:12]',3,4,1); % Interleave more symbols, remembering the symbols that % were left in the array from the earlier command. i2 = helintrlv([13:24]',3,4,1,state); disp('Interleaved data:') disp([i1,i2]') disp('Values left in array after first interleaving operation:') state.value{:}
Во время последовательных вызовов helintrlv, внутри нее создаются массивы из трех столбцов
[1 0 0; 2 5 0; 3 6 9; 4 7 10; 0 8 11; 0 0 12]
и
[13 8 11; 14 17 12; 15 18 21; 16 19 22; 0 20 23; 0 0 24]
Во втором массиве, показанном выше, 8, 11 и 12 являются значениями, оставшимися в массиве от предыдущего вызова функции. Указание init_state ввод во втором вызове функции приводит к использованию этих значений, а не значений по умолчанию 0.
Выходные данные этого примера приведены ниже. (Матрица была перенесена для отображения.) Чередующиеся данные поступают из четырех верхних строк трех столбцов, показанных выше. Обратите внимание, что некоторые символы в первой половине перемеженных данных являются значениями по умолчанию 0, некоторые символы во второй половине перемеженных данных остались в массиве от первого вызова helintrlvи некоторые из входных символов (20, 23 и 24) вообще не появляются в перемежающихся данных.
Interleaved data:
Columns 1 through 10
1 0 0 2 5 0 3 6 9 4
13 8 11 14 17 12 15 18 21 16
Columns 11 through 12
7 10
19 22
Values left in array after first interleaving operation:
ans =
[]
ans =
8
ans =
11 12
Пример на справочной странице для heldeintrlv также использует эту функцию.