자바 균등 하 게 복잡 도와 복잡 도 를 방지 하 는 진동 원리 분석
3684 단어 Java균등 분담 복잡 도복잡 도의 진동 을 방지 하 다
지난 절패키지 배열 의 간단 하고 복잡 도 분석 방법에서 우 리 는 추가 작업 의 시간 복잡 도 를 O(n)로 요약 하 는 것 은 확장 작업(resize)을 고려 한 것 이다.addLast(e)작업 의 경우 시간 복잡 도 는 O(1)이 고 최 악의 상황 을 고려 할 때 매번 추가 할 때마다 확장 작업 이 발생 하 며 n 개의 요 소 를 이동 해 야 하기 때문에 이때 addLast 작업 의 시간 복잡 도 는 O(n)이다.
(1)addLast(e)평균 분담 시간 복잡 도 분석
resize(n) O(n)
현재 capacity=8 을 가정 하고 추가 작업 마다 addLast 방법 을 사용 합 니 다.
17 차 기본 조작 은 9 차 추가 조작,8 차 이전 조작 을 포함한다.평균 할당 매번 addLast 작업 은 약 두 번 기본 작업 을 진행 합 니 다.
평균 값 은 17/9 개 월 2 이다.
capacity=n,n+1 회 addLast 작업 을 가정 하고 resize 를 촉발 하여 총 2n+1=(n+1)+n 회 기본 작업 을 진행 하 였 습 니 다.
평균 할당 매번 addLast 작업 은 약 두 번 기본 작업 을 진행 합 니 다.
평균 값: 2n+1 / n+1 ≈ 2
결론:따라서 addLast 평균 분담 시간 복잡 도 는 O(1)이 고 평균 분담 시간 복잡 도 는 최 악의 상황 보다 의미 가 있 습 니 다.일반적인 상황 에서 resize 는 매번 촉발 되 지 않 기 때문에 다른 위 에 분담 할 수 있 습 니 다.
마찬가지 로 removeLast 작업 평균 분담 시간 복잡 도 역시 O(1)
(1)addLast(e)와 removeLast(e)복잡 도 진동 분석
배열 의 용량 을 n 으로 설정 합 니 다.이때 배열 의 개 수 는 n 개 입 니 다.이때 우 리 는 배열 에 요 소 를 추가 하면 확장 작업 을 촉발 합 니 다.그 다음 에 배열 에서 하나의 요 소 를 삭제 할 때 다시 축소 작업 을 촉발 합 니 다.이렇게 반복 적 으로 실행 하면 O(n)의 복잡 도 를 소모 하여 복잡 도 를 진동 시 킵 니 다.
다음 과 같이 보 여 줍 니 다.
첫 번 째 addLast(e)시간 복잡 도:O(n)
두 번 째 실행 removeLast(e)시간 복잡 도:O(n)
세 번 째 실행 addLast(e)시간 복잡 도:O(n)
네 번 째 removeLast(e)실행 시간 복잡 도:O(n)
복잡 도 진동 이 발생 하 는 이 유 는 removeLast 시 resize 가 너무 급 하기 때 문 입 니 다(Eager).
해결 방법:Lazy(remove 지연 실행 resize)
용량 2n,size=n+1 시:
용량 2n,size=n 시 1/2 축소:
용량 2n,size=1/4*2n,축소 1/2 진행 :
size==capacity/4 일 때 만 capacity 를 반 으로 줄 입 니 다.
이제 우 리 는 우리 의 프로그램 코드 를 더욱 개선 할 것 이다.
// index ,
public E remove(int index) {
//1.
if (index < 0 || index > size)
throw new IllegalArgumentException(" ");
//2.
E ret = data[index];
// index (index)
for (int i = index + 1; i < size; i++) {
//3. -- index (index) ,
data[i - 1] = data[i];
}
//4. size
size--;
// loitering objects != memory leak
data[size] = null;
//
if (size == data.length / 4 && data.length != 0) {
resize(data.length / 2);
}
//5.
return ret;
}
여기까지 우 리 는 비교적 완벽 한 동적 배열 의 패 키 지 를 완성 했다.자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.