너무 계산 비용이 다음내가 좋아하는 코드 블록을 수행 할 필요가
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
그래프에 두 개의 노드, 그리고 나는하지 않는 한 착각하면 인접 목록 인 [r1, r2]
을 사용하여 x
과 y
이 연결되어 있는지 확인합니다. 즉, 질문에 대한 대답을 시도합니다. "i
r1(i)
또는 r2(i)
에 x
과 y
두 가지를 찾을 수 있습니까?"
이 작업을 반복해야합니다. r1
과 r2
은 모두 수천 개의 고유 값 (1의 순서로 그래프에있는 노드 수)을 포함 할 수 있으며 길이는 수십만 (1 정도의 가장자리 수)입니다.
내 프로파일 러는 주석으로 표시 한 두 줄은 실행 시간의 99 %를 소비하며 프로그램 실행에는 상당한 시간이 걸리므로 궁금합니다. 얼마나 더 최적화 할 수 있습니까? 최소한의 계산 시간에 대한 근본적인 제한은 무엇이며, 그것과 얼마나 가깝습니까?
또한이 특정 코드를 다른 언어로 아웃소싱하는 것이 매우 쉽습니다. 상당한 성능 향상을 가져올 수 있습니까?
하나 이상의 'i'가있을 수 있습니까? 그렇다면 모든 것이 필요합니까 아니면 첫 번째/마지막일까요? –
이론 상으로는 그래프에 방향이 없기 때문에 내 데이터에 하나 이상의 'i'가 없어야합니다. 실제로는 데이터가 더러운 경우가 있습니다. 어쨌든, 나는 처음이나 마지막을 필요로하지 않는다. 나는 단지 그러한 'i'가 존재하는지 알고 싶다. 하지만 당신의 대답이 이것에 의존한다면,'r1' /'r2'에 대해 몇 가지 전처리를 할 수 있습니다. 그리고'i'는 주어진'x'-'y' 쌍에 대해 한번 이상 발견되지 않을 것입니다. . – Superbest