길이 n의 2 차원 배열을 만드는 Jana (Java-Based Abstract Notation for Algorithms)에서 다음 코드를 만들었습니다.
fillMatrix(↕int matrix[1:n,1:n], ↓int n, ↓int a){
for(i=1…n){
for(j=1…n){
if(abs(↓(i-j))<=a){
matrix[i,j]=1
}else{
matrix[i,j]=0
}
}
}
}
int abs(↓int i){
if(i<0)
return –i
else
return i
}
이 코드는 점근 적 런타임이 O (n ^ 2)입니다.
내 질문은 행렬의 각 요소가 호출시 0으로 초기화되었다고 가정하면 어떻게이 코드를 더 효율적으로 만들 수 있습니까?
도움을 주셔서 미리 감사드립니다!
값이 1 인 셀만 초기화하면된다고 가정합니다 (나머지 셀은 기본적으로 0입니다).
경우 a
보다 훨씬 작은 n
, 당신은 1 개 값을 얻을 세포를 초기화 할 수 있습니다 O(n + a*n)
시간.
예를 들어 a == 0이면 행렬의 주 대각선의 n 개 셀을 설정하기 만하면됩니다 ((0,0), (1,0), ..., (n-1, n-1 ))에서 1.
a == 1이면 n
주 대각선의 2*(n-1)
셀 + 주 대각선에 인접한 대각선 의 셀 을 설정해야합니다 .
...
A = C 경우 설정해야 O(n) + O(2c*n)
하는 세포 1
이다 O(n + c*n)
.
이 알고리즘을 구현하려면 O(n^2)
루프를 2*a+1
O(n)
루프 (각 관련 대각선에 대해 하나의 루프) 로 교체해야합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다