Computer Science/Algorithm :: 알고리즘

알고리즘 강의 마무리 정리

HJPlumtree 2022. 6. 11. 12:27

알고리즘 강의 마무리 하며 정리

 

 

✅ 이론적으로 문제 해결 관점에서 반드시 만족해야 하는 알고리즘 조건

  • 유효성
  • 명확성
  • 유한성

 

 

✅ 선형 리스트의 한 쪽 끝에서만 자료의 삽입과 삭제가 이루어지는 자료구조

  • 스택

 

 

✅ 길이가 k인 이진트리가 가질 수 있는 노드의 최대 개수

  • 2k -1

 

 

✅ 높이가 4인 이진트리가 최대 개수의 노드를 갖을 때, 단말 노드의 개수

  • 8개

 

 

✅ 연결 리스트의 특정 노드에서 선행, 후행 노드 양쪽에 대한 접근이 가능한 것

  • 이중 연결 리스트

 

 

✅ 그래프 G에서 정점 v1에서 정점 vn 까지 경로란?

  • 간선(v1, v2), (v2, v3), ... (vn-1, vn)으로 연결된 정점의 순서 리스트 v1, v2, ..., vn을 의미

 

 

✅ 알고리즘의 시간 복잡도는 무엇의 함수일까?

  • 입력 데이터의 크기

 

 

✅ 알고리즘의 대표적인 설계 기법

  • 동적 프로그래밍 방법(DP)
  • 욕심쟁이 방법(Greedy)
  • 분할정복 방법

 

 

✅ 입력 크기 n에 대한 알고리즘 수행시간 f(n) = 5n3 + 10n2+ 8n + 200의 점근 성능

  • O(n3)
  • 제일 큰 녀석만 쳌

 

 

✅ 분할 정복에 대한 설명

  • 분할된 작은 문제는 독립적
  • 하향식 접근 방법을 사용
  • 분할, 정복, 결합의 처리 과정을 거친다

 

 

✅ 분할정복 방법을 적용한 알고리즘 중에서 입력 크기 n에 대한 성능이 가장 우수한 것

  • 이진 탐색

 

 

✅ 분할 정복 방법에서 각 순환 호출시마다 거치는 작업단계

  • 정복
  • 분할
  • 결합

 

 

✅ 다음 원소에 퀵 정렬을 한 번 적용한 후 왼쪽 부분배열에 존재하는 데이터의 개수(맨 앞의 원소가 피벗인 경우)

[ 30 45 20 15 40 25 35 10 ]

  • 4개
  • 피벗을 중심으로 왼쪽 오른쪽 나누는 퀵 정렬

 

 

✅ 퀵 정렬에서 최악의 성능이 발생하는 경우

  • 피벗이 항상 부분배열에서 최솟값/최댓값 경우
  • 입력 데이터가 정렬되어 있는 경우
  • 피벗만 제자리 잡고 나머지 모든 원소가 하나의 부분배열이 되는 경우
  • 최악의 경우 시간 복잡도 점화식 
    T(n) = T(n - 1) + Θ(n), T(1) = Θ(1)

 

 

✅ 중간값의 중간값을 사용하는 선택 문제에서 각 그룹의 몇 개의 원소로 구성될까?

  • 5개

 

 

✅ 동적 프로그래밍에 대한 설명

  • 모든 정점 간의 최단 경로 문제에 적용
  • 스트링 편집 거리 문제에 적용
  • 상향식 접근 방법
  • 최적성의 원리가 만족되는 문제에 적용

 

 

✅ 연쇄 행렬 곱셈 점화식

  • C[ i, k ] + C[ k + 1, j ] + d[ i-1 ] x d[ k ] x d[ j ]

 

 

✅ 모든 정점 간의 최단 경로 기호

  • d(3)42
  • 4에서 3을 거쳐서 2로 가겠다는 의미

 

 

✅ 동적 프로그래밍으로 푸는 저울 문제

  • 추의 무게와 물체의 무게가 정수이어야 한다

 

 

✅ 피보나치 수열에서 f(7) 값

  • 13
  • 0 1 1 2 3 5 8 13

 

 

✅ 동적 프로그래밍 적용해서 n개의 행렬에 대한 연쇄적 곱셉을 해결하는 알고리즘의 시간 복잡도

  • O(n3)

 

 

✅ 플로이드 알고리즘 시간복잡도

  • O(n3)

 

 

✅ 욕심쟁이 방법으로 최소 신장 트리를 구하는 알고리즘

  • 프림 알고리즘
  • 크루스칼 알고리즘

 

 

✅ 동전 거스름돈 문제

  • 동전의 액면가가 큰 것부터 욕심을 부려 최대한 사용한다
  • 액면가가 임의로 주어지면 해결할 수 없다

 

 

✅ 최소 신장 트리의 가중치 합

  • 16
  • 모든 지점을 연결하고 가중치가 최소가 되는 트리

 

 

✅ 욕심쟁이 방법을 적용한 작업 선택 문제

  • 가장 빨리 끝나는 작업을 제일 먼저 할당한다

 

작업 스케쥴링(기계 2개 이상)

  • 가장 빨리 시작하는 것 할당

 

 

✅ 허프만 코딩

  • 출현 빈도수 높으면 => 짧은 코드
  • 출현 빈도스 낮으면 => 긴 코드
  • abcdbcdcdd에서 가장 짧은 코드는 'd'

 

 

✅ 버블 정렬, 셸 정렬, 힙 정렬, 계수 정렬 중에 정렬 방식이 다른 정렬 알고리즘

  • 계수 정렬

 

 

✅ 주어진 원소들 중에서 자신보다 작거나 같은 키 값을 갖는 원소의 개수를 계산해서 정렬 위치를 찾는 방식의 정렬 알고리즘

  • 계수 정렬

 

 

✅ 안정적인 정렬 알고리즘

  • 버블 정렬
  • 안정적인 정렬이란 동일한 원소의 자리를 안 바꾸는 것
  • 버블 정렬은 왼쪽이 큰 경우만 바꾸기 때문에 안정적
  • 합병정렬

 

 

✅ [50, 40, 30, 20, 10]을 버블 정렬로 오름차순 정렬할 때 자리바꿈 횟수

  • 10번
  • 인접한 두 원소 비교, 왼쪽이 크면 바꾼다

 

 

✅ 정렬되지 않는 데이터 중에서 가장 작은 값과 미정렬 데이터 부분의 첫 번째 원소와 교환하는 정렬 알고리즘

  • 선택 정렬

 

✅ 선택 정렬에 대한 설명

  • 제자리 정렬 알고리즘
  • 주어진 데이터 중 가장 작은 값부터 골라서 차례대로 나열
  • 안정적이지 않은 정렬 알고리즘
  • 언제나 동일산 시간 복잡도를 갖는 비교기반 정렬 알고리즘

 

 

✅ 삽입 정렬에 대한 설명

  • 입력이 거의 정렬된 경우 빠른 수행 시간 O(n)을 갖는다
  • 안정적인 정렬 알고리즘
  • 제자리 정렬 알고리즘
  • 데이터 하나씩 비교하는 비효율 때문에 셸 정렬이 나왔다

 

 

✅ 수행시간이 O(nlogn)이고, 제자리 정렬인 알고리즘

  • 퀵 정렬
  • 힙 정렬

 

 

✅ 제자리 정렬 알고리즘

  • 선택 정렬
  • 삽입 정렬
  • 셸 정렬
  • 퀵 정렬
  • 힙 정렬
  • 버블 정렬

 

 

✅ 평균 성능이 O(nlogn)인 안정적인 정렬 알고리즘

  • 합병 정렬

 

 

✅ 비교 기반 알고리즘 중에 입력 크기에 비례하는 만큼 추가적인 공간이 필요한 알고리즘은?

  • 합병 정렬
  • 왼쪽 부분, 오른쪽 부분

 

 

✅ 합병 정렬과 퀵 정렬의 공통점

  • 분할정복 방법이 적용된다

 

 

✅ 힙 정렬에서 오름차순 정렬하려고 초기 힙을 구성했을때 루트 노드에 존재하는 데이터는?

  • 최댓값

 

 

✅ 기수 정렬에 대한 설명

  • 입력 원소의 값의 자릿수가 상수일 때 유용하다
  • 각 자릿수별로 정렬

 

 

✅ 순차 탐색에 대한 설명

  • 모든 데이터 리스트에 적용 가능
  • n개의 데이터에 대한 최대 비교 횟수는 n번
  • 데이터가 많은 경우 적합하지 못한 방법
  • 원소가 순서 없이 저장된 경우 적합
  • 시간 복잡도가 좋은 녀석은 아니다

 

 

✅ 이진 탐색에 대한 설명

  • 최악의 경우 탐색 성능 O(nlogn)
  • 정렬된 리스트에만 적용 가능
  • 삽입과 삭제가 빈번한 경우 부적합
  • 연결리스트로 구현 불가능
  • 분할정복 방법 적용

 

 

✅ 이진 탐색 트리에서 루트 노드 삭제시(리프 노드가 양쪽에 있다는 가정)

  • 오른쪽 서브 트리에서 가장 작은 것을 루트로 올린다

 

 

✅ 흑적 트리에 대한 설명

  • 이진 탐색 트리의 형태를 갖는 균형 탐색 트리
  • 어떤 노드가 적색이면 부모 노드는 항상 흑색이다

 

 

✅ 모든 리프 노드의 레벨이 동일한 트리

  • B-트리

 

 

✅ 데이터들이 연속된 위치를 점유해서 클러스터를 형성하고, 점점 커지는 현상으로 인해 평균 탐색 시간의 증가를 초래하는 충동 해결 방법

  • 선형 탐사

 

 

✅ 충돌 해결 방법

  • 이중 해싱
  • 이차 탐사
  • 선형 탐사

 

 

✅ NP-완전 문제의 근사 알고리즘으로 해결할 수 있는 문제

  • 외관원 문제
  • 무방향 그래프에서 모든 정점을 한 번씩만 지나가는 사이클의 존재 여부 확인
  • 정규곱형으로 주어진 논리식을 찹으로 만들 수 있는지 판단
  • n개의 양수가 주어졌을 때, 각 집합에 포함된 수의 합이 동일하도록 n개의 정수를 두 개의 집합으로 나눌 수 있는지 판정

 

 

✅ 외관원 문제에 적합한 염색체 인코딩 방법

  • 순열 인코딩

 

 

✅ 유전 알고리즘의 교차 연산

  • 부모의 형질을 나누어 갖는 연산
  • 다른 최적화 방법과 구별짓는 연산

 

 

✅ 2-3-4 트리에 대한 설명

  • 경사 트리가 발생하지 않는다

 

 

Algorithm @freepik