Matlab에서 Microsoft Kinect로 캡처 한 3D 점 구름에서 그래프를 만들고 싶습니다. 약 100K 포인트에 불과합니다.Matlab에서 O (n^2) 및 O (n^3) 증가 spurs n ~ 100K
load('Points_Sample1.mat')
Points=single(Points);
x=Points(1,:);
y=Points(2,:);
z=Points(3,:);
tic
for i=1:n
xi=x(i);
yi=y(i);
zi=z(i);
for j=1:n
xj=x(j);
yj=y(j);
zj=z(j);
end
end
toc
결과이다 : 말하면
Elapsed time is 122.398886 seconds.
루프 간단한 122 초가 걸릴 I는 다음과 같이, 즉 O (N^2)에만 중첩 매우 간단한 프로그램을 작성! 나는 그것을 실행
의 MATLAB 2016a 윈도우 10 기업 64 비트
인텔 코어 i7-3820이 속도에서 16기가바이트 RAM
3.6 GHz의
@, 그럴 수 없어 O (n^3)에 대해서도 생각해보십시오.
전체 프로그램을 1 미만으로 실행하고 싶습니다. 위의 프로그램을 테스트하기 전에 0.1 초 미만으로 실행할 것으로 예상됩니다.
편집 1 :
1) 두 사용자가 XY에 대해 언급! 포인트로부터 가중 그래프 (데이터 구조)를 만들고이 그래프를 사용하여 객체 (크기, 위치, 방향)를 찾고 싶습니다.
2) 한 사용자가 벡터화 계산에 댓글을 달았습니다. 매우 좋습니다. 그러나 PC에는 16GB RAM 만 있습니다. n ~ 100K로 계산을 벡터화하려면 128GB가 필요합니다!
3) O (n^2) 표기법 및 실행 시간에 대한 다른 사용자 의견. O (n^3)의 모든 peogram은 단지 loop보다 많은 시간이 걸립니다. 나는 단순한 루프가 122 초 걸릴 때 더 많은 라인을 추가하면 122 초 이상 걸린다 고 말하고 싶다. 0.1 초로 줄여야합니다 (최대 1 초까지 가능하지 않은 경우)
실제로 무엇을하고 싶습니까? 지금은 각 반복에서 동일한 세 변수 만 덮어 씁니다. – hbaderts
큰 루프를 피할 수없고 문제를 빠르게 할 수 없다면, 아마도 Matlab이 당신이 선택할 수있는 최고의 프로그래밍 언어는 아닙니다. 대부분의 경우 계산을 부분적으로 또는 완전히 벡터화하여 속도를 크게 높일 수 있습니다. 계산을 벡터화하는 방법을 모르는 경우 [이 페이지를 확인] (https://www.mathworks.com/help/matlab/matlab_prog/vectorization.html)하거나 질문을 편집하고 일부 작업을 공유 할 수 있습니다. 루프에서하고있다. – erfan
사이드 노트 :'O' 표기법은 알고리즘이 얼마나 빨리 실행되는지를 알려주지는 않지만 입력과 함께 어떻게 스케일되는지 알려줍니다. 알고리즘은'O (n)'이고 milenia를 계산하고, 알고리즘은'O (n^2)'이고 밀리 세컨드 단위로 작동합니다. 'O' 표기법을 사용하면 알고리즘을 1 배열 크기로 실행 한 후 다른 크기의 배열과 비교하여 얼마나 많은 양의 알고리즘을 사용하는지 알 수 있습니다. –