일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- springbootH2
- JDBC connection pool
- httppie
- jpqlquery
- 자바제너릭
- 스프링부트
- 임베디드타입
- 에이치투데이터베이스
- JPA Hint & Lock
- MySqlType
- Git
- javageneric
- JPAmapping
- 이해와 원리
- 제이피큐엘쿼리
- 데이터베이트h2
- sql
- OSIV
- JPA값타입
- 스프링부트기본설정
- dockercmd
- JPA프록시
- springboot기본설정
- jpa
- spring
- gitinitial
- springbootproxy
- JPAproxy
- embededtype
- Open EntityManager
- Today
- Total
빡코
[과제] 설명 준비해오기1 본문
알고스터디
배열 vs 연결리스트
스택 vs 큐
힙
남팀
1. 배열 과 연결리스트의 개념과 차이점
2. 자바관련질문
3. 네트워크 1.5강의(보고 정리한 내용
1.배열과 연결리스트이 개념과 차이점
배열:
-배열이란 특정 자료형(Data Type)들이 메모리 공간상에서 연속적으로 이루어져 있는 자료구조를 의미함
-0(1)의 시간복잡도를 가짐
-단점: 배열의 크기를 변경할 수 없다.
-N개의 데이터를 추가한다면, O(N^2)의 시간복잡도
**데이터의 접근(검색과 정렬)은 빠르지만, 메모리 공간활용에 제약이 있으며 데이터의 추가와 삭제가 비효율 적이다
연결리스트:
-연결리스트란 여러개의 노드(Node)들이 연결된 형태의 자료구조
-메모리 공간상에서 각 노드들이 연속적으로 이루어져 있지 않고 흩어져, 각각의 노드가 자신의 다음 노드 위치를 알고 있는 형태로 구현됨
-노드(Node)? 배열에서의 한칸과 같다고 생각할 수 있고, 각각의 노드들은 내부적으로 자신 안에 포함할 데이터(Data)와 다음 노드의 위치정보(Link)를 갖고 있다.
-이중연결리스트(Doubly Linked List): 노드가 자신의 다음 노드 뿐만 아니라, 자신의 이전 노드의 위치를 알게해서 두개 의 노드가 서로의 위치를 알게 할 수 도 있다,
-원형 연결리스트(Circulalr Linked List): 마지막 노드가 맨 처음 노드(Head Node)의 위치를 알게 되면, 머리와 꼬리가 연결된 형태가 되는 것
-O(N)의 시간복잡도: 자료에 대한 접근이 작은 자료구조에서는 연결리스트 사용을 지양해야함
-배열과 다리 노드를 추가하고 제거하는 과정을 통해 최대 노드의 수를 언제든지 변경할 수 있기 때문에, 메모리 공간을 유동적으로 사용할 수 있다.
**데이터의 접근이 다소 느리지만, 메모리 공간활용 및 데이터의 추가와 삭제가 효율적이다.
참조:
http://arkainoh.blogspot.com/2018/06/array.linkedlist.html
2. 스택 vs 큐
스택:
-스택이란? 객체들의 집합소로서 데이터를 기록하는 구조, 접근 방법은 후입선출(LIFO:Last Input First Out)
-아래가 막혀있고 위가 open형태, 차곡차곡 쌓는 구조
-삽입: PUSH, 삭제: POP
큐?
-FIFO(First Input First Out)의 구조, 먼저 들어간 데이터가 먼저 나오는 구조
-자료의 입력과 출력을 한 쪽 끝(Front, rear)으로 제한한 자료구조
-put(), get()
-컴퓨터 버퍼에서 주로 사용됨, 마구 입력되었으나 처리를 하지 못할 때, 버퍼(큐)를 만들어 대기 시킨다.
-단점? 큐에 빈 메모리가 남아 있어도 rear가 배열의 끝에 도달했을 경우, 꽉찬 거으로 판단할 수 있음 >> 개선판이 원형큐
-원형큐? 메모리 공간은 잘 활용하나 배열로 구현되어 있기 때문에 큐의 크기가 제한되는 단점이 존재 >> 링크드 리스트 큐
-링크드리스트? 큐의 크기가 제한이 없고, 삽입과 삭제가 편리하다.
덱(deque)?
자료의 입력과 출력을 양 쪽 긑에서 가능하게 하는 자료구조
-scroll: 입력이 한쪽 끝으로만 가능하도록 제한한 덱
-shelf: 출력이 한쪽 끝으로만 가능하도록 제한한 덱
-마지막에 삽입한 요소를 삭제하기 위해서는 앞에 요소들이 전부 삭제 되어야 한다.
-주로 순서를 보장하기 위한 처리가 필요할 때 사용함
참조:
https://mygumi.tistory.com/357
3.힙(heap)?
-완전 이진 트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조
-여러개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조
-힙은 일종의 반정렬 상태(느슨한 정렬 상태)를 유지한다.
-종류?
-최대 힙(max heap)
--부모의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진트리
-최소힙(min heap)
-부모 노드이 키 값이 자식 노드의 키 값보다 작거나 같은 와전 이진트리
-힙에서의 부모 노드와 자식 노드의 관계
--왼쪽 자식의 인덱스 = (부모의 인덱스) * 2
--오른쪽 자식의 인덱스 = (부모의 인덱스) * 2 + 1
--부모의 인덱스 = (자식의 인덱스) / 2
-힙의 삭제
-힙에 새로운 요소가 들어오면, 일단 새로운 노드를 힙의 마지막 노드에 이어서 삽입한다.
-새로운 노드를 부모의 노드들과 교환해서 힙의 성질을 만족시킨다.
ex)max heap에서 새로운 요소 8을 삽입
--java언어를 이용한 최대 힙 삽입 연산
/* 최대힙 삽입 */
void insert_max_heap(int x){
maxHeap[++heapSize] = x; // 힙 크기를 하나 증가하고 마지막 노드에 x를 넣는다.
for (int i=heapSize; i>1; i/=2) {
// 마지막 노드가 자신의 부모 노드보다 크면 swap
if (maxHeap[i/2] < maxHeap[i]) {
swap(i/2, i);
} else {
break;
}
}
}
https://gmlwjd9405.github.io/2018/05/10/data-structure-heap.html
-힙삭제
-최대 힙에서 최댓값은 루트 노드들이므로 루트 노드가 삭제된다.
--최대 힙(Max heap)에서 삭제 연산은 최댓값을 가진 요소를 삭제하는 것이다.
--삭제된 루트 노드에는 힙의 마지막 노드를 가져온다.
--힙을 재구성한다.
--java 언어를 이용한 최대힙(max heap) 연산
/* 최대힙 삭제 */
int delete_max_heap(){
if (heapSize == 0) // 배열이 빈 경우
return 0;
int item = maxHeap[1]; // 루트 노드의 값을 저장한다.
maxHeap[1] = maxHeap[heapSize]; // 마지막 노드의 값을 루트 노드에 둔다.
maxHeap[heapSize--] = 0; // 힙 크기를 하나 줄이고 마지막 노드를 0으로 초기화한다.
for (int i=1; i*2<=heapSize;) {
// 마지막 노드가 왼쪽 노드와 오른쪽 노드보다 크면 반복문을 나간다.
if (maxHeap[i] > maxHeap[i*2] && maxHeap[i] > maxHeap[i*2+1]) {
break;
}
// 왼쪽 노드가 더 큰 경우, 왼쪽 노드와 마지막 노드를 swap
else if (maxHeap[i*2] > maxHeap[i*2+1]) {
swap(i, i*2);
i = i*2;
}
// 오른쪽 노드가 더 큰 경우, 오른쪽 노드와 마지막 노드를 swap
else {
swap(i, i*2+1);
i = i*2+1;
}
}
return item;
}
https://gmlwjd9405.github.io/2018/05/10/data-structure-heap.html
참조
https://gmlwjd9405.github.io/2018/05/10/data-structure-heap.html
'Algorithm' 카테고리의 다른 글
백준_11399번_ATM (0) | 2020.01.15 |
---|---|
[과제]프로그래머스_두 정수 사이의 합 (0) | 2020.01.02 |
[ 과제]백준_ 11047번_동전0 (0) | 2020.01.02 |
[과제]백준_ 10872번 _팩토리얼 (0) | 2020.01.02 |
[스터디] 프로그래머스_레벨1_2016년 ( 요일맞추기) (0) | 2020.01.02 |