Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- fcmwebpush
- IT기본지식
- @RunWith
- git
- 오라클오류
- RequestBody
- 롬복
- EC@
- 크리스탈레포트누끼
- 자료구조
- openaddressing
- 스토리지기본
- Ajax
- JDBC
- 서블릿용어
- jdbc연결안됨
- 게시판댓글
- 서버기본
- 크리스탈레포트그림
- 타임존
- 크리스탈레포트이미지
- ResponseBody
- 크리스탈리포트이미지삽입
- 이미지누끼
- api문서만들기
- 추상클래스
- 타임존설정
- 크리스탈리포트이미지
- import안될때
- lombok
Archives
- Today
- Total
엠마의 개발공부일지
[자료구조]기본2_배열 본문
728x90
배열
값을 저장하는 것이 아닌, 래퍼런스(주소)를 저장
그렇기때문에 큰값을 저장해도 무방(주소만 저장하기때문)
배열접근(주소를 알고있음)
저장 : 연속적으로 저장됨 O(1)
가져오기 : 인덱스값으로 계산하여 가져옴( O(1)로 가져옴_메모리의 특성을 이용)
🙋♀️ 휘발성 정보인 RAM에 값을 저장하고, 가져온다. 그 속도가 빠른이유는 주소를 알고 있기 때문
배열탐색(주소모름)
선형탐색 : 순서대로 확인 O(n)
배열종류
- (정적)배열 : 크기가 정해진배열, 수정불가 ex) C언어 배열
- 동적배열 : Dynamic Array 크기변경가능, 수정가능 ex) Python
- ➕동적배열의 추가방법[배열이 모두 차면 알아서 늘려줌]
- 2배크기 자리마련 -> 기존데이터를 복사 후 추가
- ⏰시간복잡도 : 빈공간있을때(최고) -O(1) / 빈공간없을때(최악) -O(n)
- ➕동적배열의 추가방법[배열이 모두 차면 알아서 늘려줌]
분할 상환 분석 Amortized Analysis(할부개념)
시간복잡도를 다르게 계산하는 방법(시간복잡도를 최악의 상황으로 보는게아닌 평균을 내서 보는것)
최악의 경우보다는 최고(시간이 오래안걸리는)의경우가 많다.(배열내부에 빈공간이 있는경우가 더 많다)
그렇기때문에 동적배열의 시간복잡도를 O(n)으로만 생각하는건 비효율적이다.
최악의경우 분석 vs 분할상환분석
분할상환분석의 시간복잡도가 항상 줄어드는건아니다.
최악의경우분석과 비교해봤을때 더 적을때만 분할상환분석을 사용한다.
📌동적배열추가(append)연산은 최악의 경우 O(n) / 분할상환분석을 하면 O(1)걸린다
동적배열
삽입연산
- 최고(맨뒤) : O(1) -추가(append)
- 최악(맨앞) : O(n) -삽입(insert)
삭제연산
- 최고(맨뒤) : O(1)
- 최악(맨앞) : O(n) -하나씩 당겨와야함
동적배열 축소하기
동적배열이 꽉 찬경우 2배로 늘리듯이, 배열에서 일정한 수 이하로 줄어들면 배열도 축소해야한다
보통 원래의 배열길이에서 1/3로 줄면 배열이 축소된다
- 최고(맨뒤) : O(1) 배열길이가 9일때 9->8로 줄어드는경우
- 최악(맨앞) : O(n) 배열길이가 9일때 4->3으로 줄어드는경우(1/3이하로 줄어드니, 짧은배열을 재정의후 옮김)
[출처] : 코드잇 - 자료구조
728x90
'개념정리' 카테고리의 다른 글
[자료구조]기본5_추상자료형 (0) | 2021.01.26 |
---|---|
[자료구조]기본3_링크드리스트 (0) | 2021.01.18 |
[자료구조] 기본1_데이터 저장방법 (0) | 2021.01.17 |
[컴퓨터개론] 소프트웨어의 이해 (0) | 2021.01.17 |
[컴퓨터개론] 프로그래머의 기본 (0) | 2021.01.17 |
Comments