1. 알고리즘 기본개념

1) 알고리즘 생성단계
    설계 > 표현/기술 > 정확성 검증 > 효율성 분석

2. 기본 자료구조

1) 알고리즘에서 자료구조는?

1-1) 자료구조
    - 컴퓨터 기억공간 내에 자료를 표현하고 조직화 하는 방법
    - 프로그램 = 자료구조 + 알고리즘
    - 자료구조에 대한 고려 없는 효율적인 알고리즘의 선택, 또는 알고리즘에 대한 고려 없는 효율적인 자료구조의 선택은 무의미

기본 자료구조 =

배열, 연결리스트 , 스택 , 큐 , 트리 , 그래프

선형 자료구조 : 배열 , 연결리스트 , 스택 , 큐
    ㄴ 데이터에 순서가 있다.
비선형 자료구조 : 트리, 그래프
    ㄴ 데이터에 순서가 없다.


2) 배열

정의: 같은 자료형을 갖는 여러 개의 데이터를 하나의 변수에 저장해놓고 각각의 원소에 접근할 때에는 인덱스 첨자를 사용해서 접근하는 자료구조

특징: 논리적인 순서와 물리적인 순서가 같다.

단점: 삽입과 삭제가 발생하게되면 순서를 유지하기 위해서 자리의 이동이 불가피하다.

장점: 배열은 인덱스를 가지고 해당 원소에 직접접근하는 특징을 가지고 있다. 배열은 데이터가 어디에 저장되어있든지 어디로든 접근의 시간이 동일하다.

3) 연결리스트

하나의 원소는 노드라고 한다. 데이터가 들어가는 곳을 필드라고 한다.
하나의 노드는 하나의 데이터필드와 하나의 링크필드로 표현된다.

특징: 논리적순서와 물리적인순서가 같지 않다. 링크필드의 의미는 다음 노드의 메모리 주소값을 저장하고 있다.

장점: 삽입과 삭제가 간단하다.

단점: 특정 데이터를 찾아갈때는 처음부터 찾아가야 한다는 단점이 있다.


2-1,3-1) 배열과 연결리스트의 종류

배열 : 1차원 2차원 다차원배열

연결리스트: 단일 연결, 단일 원형 연결, 이중 연결, 이중 원형 연결

주어진 문제에 따라 자료구조를 선택해야 함.

접근을 빨리 하고싶으면 배열을 쓰는게 좋고 데이터의 접근보다는 데이터의 삽입과 삭제가 많다면 연결리스트 사용이 효과적일 수 있다.


4) 스택

정의: LIFO (Last In First Out) 후입선출 입구와 출구가 하나밖에 없는 구조

top : 스택에 데이터가 어디까지 쌓여져 있는가를 알림.

push: 삽입하는 연산

pop: 삭제하는 연산

데이터가 삽입 삭제때마다 top이 가리키는 위치가 달라짐.

5) 큐

정의: FIFO (First In FIrst Out) 선입선출 입구와 출구가 정방향

front: 삭제와 관련

rear: 삽입과 관련

삽입이 이뤄질경우 rear가 가리키는 값이 바뀜.

삭제가 이뤄질경우 front가 가리키는 값이 바뀜.


6) 트리

정의: 하나 이상의 노드로 구성된 유한 집합 T

조건1: T의 원소 가운데 단 하나의 루트 노드가 존재
조건2: 루트 노드를 제외한 나머지 노드는 n개의 서로 분리된 부분집합 T1, T2, TN(서브트리) 으로 나누어진다

주요 용어:

차수

리프노드(단말노드)

부모,자식,형제 노드

조상(선조) 후손(자손)

레벨 높이 깊이

6-1) 이진트리

정의: 각 노드의 차수가 2이하인 순서 트리

특성:
    - 레발 i에서 최대 노드의 개수 = 2의 i승
    - 높이 h에서 이진 트리의 최대 노드의 개수 = 2의 h승 - 1
    - 단말 노드(자식이 없는 노드)의 수 n0 = 차수가 2인 노드의 수에 +1 하면 된다. 
        n0 = n2 + 1

종류:
    - 포화 이진트리 : 높이 h 까지 중간에 빈 자리 없이 꽉 차있는 트리
    - 전 이진트리: 각 노드의 차수 = 0 이거나 2. 전 노드의 차수가 1인 경우가 없는 트리
    - 완전 이진트리: 노드의 레벨의 마지막 레벨 전까지가 포화 이진트리이고 마지막 레벨의 노드들이 왼쪽에서부터 마지막까지 중간에 빠짐없이 채워져있는 트리
    - 균형 이진트리: 왼쪽 서브트리와 오른쪽 서브트리의 노드레벨 차이가 1 이내인 트리

구현:
      * 배열을 이용하는 방법

* 연결리스트를 이용하는 방법

7) 그래프

정의: 그래프 G=(V,E)
    V: 정점의 집합, E: 간선의 집합

간선이 방향성이 있느냐에 따라 무방향과 방향그래프로 나뉜다.

각 정점을 잇는 선이 간선이다.

간선들에 값을 줄 수 있다. 비용이라 칭함. 간선들에 비용이 있는 그래프를 가중그래프(가중치그래프)라 한다.

7-1) 무방향 그래프

간선의 표현: (1,2) = (2,1)

그래프 표현: V(G) = { 1,2,3,4,5 } , E(G) = { (1,2),(1,3),(2,4),(3,5) }

7-2) 방향 그래프

간선의 표현: <1,2>


주요 용어:

인접,부수, 부분그래프, 경로, 경로의 길이, 차수(방향그래프 > 진입 차수 , 진출 차수), 단순 경로, 사이클, 루프, 연결, 강력 연결

구현

1) 인접 행렬

2) 인접 리스트