Мне нужно выполнить блок кода, подобный следующему:
x = some_number;
y = some_other_number;
u = a_vector_of_numbers;
v = another_vector_of_numbers;
% u and v are of equal size
r1 = ((x == u) | (x == v)); % Expensive!
r2 = ((y == u) | (y == v)); % Expensive!
q = any(r1 & r2);
Вы можете думать об этом как: x
и y
- два узла на графике, и если я не ошибаюсь,это проверяет, связаны ли x
и y
, используя список смежности [r1, r2]
.Другими словами, я пытаюсь ответить на вопрос: «Существует ли такой индекс i
, что x
и y
могут быть найдены в r1(i)
или r2(i)
?»
Iнужно делать это неоднократно.И r1
, и r2
могут содержать до тысячи уникальных значений (количество узлов на графике порядка 10 4 ), а их длина составляет сотни тысяч (количество ребер напорядка 10 6 ).
Мой профилировщик говорит мне, что две строки, которые я указал в комментариях, занимают 99% времени выполнения, и моей программе требуется много времени для запуска, поэтому яЯ задаюсь вопросом: сколько еще это может быть оптимизировано?Каков фундаментальный предел минимального времени вычислений и насколько я близок?
Кроме того, было бы довольно легко передать этот конкретный код на другой язык.Может ли это когда-нибудь привести к значительному увеличению производительности?