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
- BOJ
- Algorithm
- php
- 따라하면서 배우는 C언어
- String
- udemy
- dfs
- 생활코딩
- Algospot
- 정수론
- C
- greedy
- BASIC
- graph
- programmers
- Math
- C언어
- 따라하며 배우는 C언어
- BFS
- JavaScript
- 종만북
- server
- 따배씨
- web
- Cleancode
- DP
- 인프런
- Python
- 백준
- sorting
Archives
- Today
- Total
몽상실현개발주의
[알고리즘 기초] 06_Queue / Python 본문
[알고리즘 기초] 06_Queue / Python
Queue
- Queue 의 특성
- 스택과 마찬가지로 삽입과 삭제의 위치가 제한적인 자료구조
- 큐의 뒤에서는 삽입만 하고, 큐의 앞에서는 삭제만 이루어지는 구조
- 선입선출구조 (FIFO : First In First Out)
- 큐에 삽입한 순서대로 원소가 저장되어, 가장 먼저 삽입된 원소는 가장 먼저 삭제 된다.
- 스택과 마찬가지로 삽입과 삭제의 위치가 제한적인 자료구조
- 큐의 기본 연산
- 삽입 : enQueue() ( Queue의 Rear 동작 )
- 삭제 : deQueue() ( Queue의 Front 동작)
- 생성 : createQueue()
- 공백 확인 : isEmpty()
- 포화 확인 : isFull()
- 삭제 없이 원소 반환 : Qpeek()
1. 선형 큐
- 1차원 배열을 이용한 큐
- 큐의 크기 = 배열의 크기
- front : 저장된 첫 번째 원소의 인덱스
- rear : 저장된 마지막 원소의 인덱스
- 상태 표현
- 초기 상태 : front == rear == -1
- 공백 상태 : front == rear (isEmapty() 상태)
- 포화 상태 : rear == n-1 (n: 배열의 크기, n-1:배열의 마지막 인덱스)
- 초기 공백 큐 생성
- 크기 n인 1차원 배열 생성
- fornt 와 rear를 -1로 초기화
- 선형 큐 이용시의 문제점
- 잘못된 포화상태 인식
- 선형 큐를 이요하여 원소의 삽입과 삭제를 계속할 경우, 배열의 앞부분에 활용할 수 있는 공간이 있음에도 불구하고, rear=n-1 인 상태 즉, 포화상태로 인식하여 더 이상의 삽입을 수행하지 않게 됨
- 해결 방법1
- 매 연산이 이루어질 때마다 저장된 원소들을 배열의 앞부분으로 모두 이동시킴
- 원소 이동에 많은 시간이 소요되어 큐의 효율성이 급격히 떨어짐
- 해결 방법2 - 원형 큐
- 1차 배열을 사용하되, 논리적으로는 배열의 처음과 끝이 연결되어 원형 형태의 큐를 이룬다고 가정하고 사용
- 원형 큐의 논리적 구조
- 잘못된 포화상태 인식
2. 원형 큐
- 원형 큐의 구조
- 초기 공백 상태
- front = rear = 0
- Index의 순환
- front와 rear의 위치가 배열의 마지막 인덱스인 n-1를 가리킨 후, 그다음에는 논리적 순환을 이루어 배열의 처음 인덱스인 0으로 이동해야 함
- 이를 위해 나머지 연산자 mod를 사용함
- 초기 공백 상태
3. 연결 큐
- 단순 연결 리스트(Linked List)를 이용한 큐
- 큐의 원소 : 단순 연결 리스트의 노드
- 큐의 원소 순서 : 노드의 연결 순서, 링크로 연결되어 있음
- front : 첫 번째 노드를 가리키는 링크
- rear : 마지막 노드를 가리키는 링크
- 상태 표현
- 초기 상태 : front = rear = null
- 공백 상태 : front = rear = null
4. 우선순위 큐 (Priority Queue)
- 우선순위 큐의 특성
- 우선순의를 가진 항목들을 저장하는 큐
- FIFO 순서가 아니라 우선순위가 높은 순서대로 먼저 나가게 된다.
- 우선순위 큐의 적용 분야
- 시뮬레이션 시스템
- 네트워크 트래픽 제어
- 운영체제의 테스트 스케줄링
- 우선순위 큐의 구현
- 배열을 이용한 우선순위 큐
- 리스트를 이용한 우선순위 큐
- 우선순위 큐의 기본 연산
- 삽입 : enQueue
- 삭제 : deQueue
5. BFS(Breadth First Search)
- 그래프를 탐색하는 방법에는 크게 두 가지가 있음
- 깊이 우선 탐색(Depth First Search, DFS)
- 너비 우선 탐색(Breadth First Search, BFS)
- 너비 우선탐색은 탐색 시작점의 인접한 정점들을 먼저 모두 차례로 방문한 후에, 방문했떤 정점을 시작점을 시작으로 하여 다시 인접한 정점들을 차례로 방문하는 방식
- 인접한 정점들에 대해 탐색을 한 후, 차례로 다시 너비우선탐색을 진행해야 하므로, 선입선출 형태의 자료구조인 큐를 활용함
'Language > Algorithm' 카테고리의 다른 글
[알고리즘 기초] 08_SW 문제해결 응용_1 / Python (0) | 2021.06.13 |
---|---|
[알고리즘 기초] 07_Tree / Python (0) | 2021.06.13 |
[알고리즘 기초] 05_Stack 2 / Python (0) | 2021.06.13 |
[알고리즘 기초] 04_Stack 1 / Python (0) | 2021.06.13 |
[자료구조] 그래프 Graph (0) | 2021.06.13 |
Comments