Я использую алгоритм, показанный ниже, для построения определенных матриц для применения допинга кода в сценарии квантовой коррекции ошибок.Матрицы являются двоичными и должны соответствовать определенному набору законов построения:
Должно быть p
строк с одной записью единицы.Остальные записи этой строки будут нулевыми, что соответствует двоичной природе матриц.Кроме того, эти записи должны быть размещены в разных столбцах для каждой строки.Другими словами, записи единиц измерения в этих p строках не могут быть размещены в одном и том же столбце, они не могут перекрываться.
Остальные строки должны содержать определенное числоединичные записи, sb_degree
.Как я объясню вкратце, в этом и заключается проблема.
Чтобы матрица подходила для требуемых целей (допирование квантового кода LDPC), в каждой строке и столбце должен быть хотя бы одинединица входа.По сути, матрица не может иметь всю нулевую строку или столбец.
Мой код работает достаточно хорошо для определенных комбинаций параметров входного алгоритма: p
(количество строк сединичная запись), m1
(количество строк в M), N
(количество столбцов в M) и sb_degree
(количество единиц в строках, имеющих более одной записи в единицу).Например, у него нет проблем с поиском матриц при условии, что значения p и sb_degree не слишком велики или малы соответственно.Однако из-за характера проблемы, которую решают эти матрицы, мне требуются матрицы с большим значением 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