Я использую алгоритм, показанный ниже, для построения определенных матриц для применения легирования кода в сценарии квантовой коррекции ошибок. Матрицы являются бинарными и должны подчиняться определенному набору законов построения:
Должно быть
p
строк с одним элементом. Остальные элементы этой строки будут нулевыми, как и подобает бинарной природе матриц. Кроме того, эти записи единиц должны быть помещены в разные столбцы для каждой строки. Другими словами, единицы измерения в этих p строках не могут быть помещены в один и тот же столбец, они не могут перекрываться.Остальные строки должны содержать определенное количество единиц измерения,
sb_degree
. Как я объясню вкратце, в этом и заключается проблема.Чтобы матрица подходила для требуемых целей (легирование квантового LDPC-кода), в каждой строке и столбце должна быть хотя бы одна единичная запись. По сути, в матрице не может быть нулевой строки или столбца.
Мой код работает достаточно хорошо для определенных комбинаций входных параметров алгоритма: p
(количество строк с одной единичной записью), m1
(количество строк M), N
(количество столбцов M) и sb_degree
(количество единиц). в строках, содержащих более одной единицы измерения). Например, у него нет проблем с поиском матриц при условии, что значения p и sb_степень не слишком велики или малы соответственно. Однако из-за характера проблемы, которую эти матрицы призваны решить, мне нужны матрицы с большим значением p
(около 65% значения m1
) и малым значением sb_degree
. Это становится проблемой для моего алгоритма, так как малые значения sb_degree
делают поиск матрицы, удовлетворяющей второму и третьему требованиям построения, сложной задачей.
В идеале я хотел бы иметь возможность ускорить этот поиск, чтобы я мог получить в свои руки тип матриц, который мне нужен, чтобы помочь в моих исследованиях квантовой коррекции ошибок. Я включил свой код Matlab, чтобы обеспечить контекст того, как я строю матрицы. Я был бы признателен, если бы кто-нибудь из вас мог придумать способ ускорить мой код или придумать другой способ выполнения построения этих матриц.
Алгоритм называется M = Create_Doping_Matrix(m1,N,p,sb_degree)
и реализован следующим образом
M = zeros(m1,N);
p_indexes = randperm(m1,p);
all_indexes = 1:m1;
idx = ~ismember(all_indexes,p_indexes);
loc = find(idx~=0);
c_indexes = randperm(N,p);
% Create the rows with a single unit entry
for ii=1:p
M(p_indexes(ii),c_indexes(ii)) = 1;
end
M_orig = M;
% Create the rows with more than a single unit entry
for jj = 1:length(loc)
M(loc(jj), randperm(N,sb_degree))=1;
end
while nnz(sum(M,1)) ~= N % Check that there are no all-zero rows
M = M_orig;
for jj = 1:length(loc)
M(loc(jj), randperm(N,sb_degree))=1;
end
end