• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[025] Algorithm(알고리즘이란?)

10 Feb 2020

Reading time ~2 minutes

Table of Contents
  • 목차
  • 알고리즘 Algorithm
    • 조건, 특성
  • 표현 방법
    • 프로그래밍 언어
    • 자연어
    • 흐름도(flow chart)
    • 수도코드(Pseudo-code)
  • 알고리즘 성능 분석
    • 수행 시간 측정
    • 복잡도 분석
    • Big-O notation

목차

  • 표현 방법
    • 프로그래밍 언어
    • 자연어
    • 흐름도(flow chart)
    • 수도코드(Pseudo-code)
  • 알고리즘 성능 분석
    • 수행 시간 측정
    • 복잡도 분석
    • Big-O notation

알고리즘 Algorithm

  • 사전적 의미: 어떤 문제를 해결하는 한 방법의 상세한 특징을 기술하는 것
  • 컴퓨터로 문제를 풀기 위한 단계적인 절차
  • 특정한 일을 수행하는 명령어들의 유한 집합
  • 하나의 문제에 여러 방법의 알고리즘이 가능하며, 가장 효율적인 알고리즘을 찾는 것이 중요
  • 순서도, 유사코드, 프로그래밍 언어 등 여러 방법으로 표현
  • 누구나 이해할 수 있게 명확하게 기술하는게 중요

조건, 특성

  • 입력(input): 문제를 풀기 위한 입력이 있어야 함
  • 외부에서 제공되는 자료가 0개 이상 존재
  • 출력(output) : 문제를 해결했을 때 답이 나와야 함
  • 적어도 2개 이상의 서로 다른 결과를 내어야 한다.(즉 모든 입력에 하나의 출력이 나오면 안됨)
  • 명확성 : 수행 과정은 명확하고 모호하지 않은 명령어로 구성되어야 한다!
  • 유한성(종결성)(finiteness) : 유한 번의 명령이 수행된 후에는 끝나야 함
    • 유한 번의 명령어를 수행 후(유한 시간 내)에 종료한다.
  • 정확성(correctness) : 주어진 문제를 정확하게 해결해야 함
  • 확정성(definiteness) : 각 단계가 실행된 후에는 결과가 확정됨
  • 일반성(generality) : 같은 유형의 문제에 문제에 모두 적용됨
  • 효율성(effectiveness) : 정확하면서도 효율적이어야 함
    • 모든 과정은 명백하게 실행 가능(검증 가능)한 것이어야 한다.

표현 방법

프로그래밍 언어

  • 평소 하던대로 코드 짜는 것

자연어

  • 그냥 한국어, 영어로 말하듯이 풀어놓는 것 image

흐름도(flow chart)

  • = 순서도
  • 문제 처리 순서를 단계화
  • 상호간의 관계를 표준 기호를 사용하여 입력, 처리, 결정, 출력 등의 박스와 연결선으로 나타낸 도표
    image

수도코드(Pseudo-code)

  • = 유사코드 = 의사코드
  • 알고리즘의 고수준 기술 방법
  • 자연어보다는 더 구조적인 표현 방법
  • 프로그래밍 언어보다는 덜 구체적
  • 알고리즘 기술에 가장 많이 사용

  • 알고리즘을 프로그래밍 언어와 유사한 형태로 풀어 놓은 것
  • 정확한 문법적 측면은 배제하고 사고의 흐름을 간결하고 효과적으로 전달하는 표현 방법
  • 유사코드는 알고리즘을 개략적으로 표현하는데 에 쓰임
    image

알고리즘 성능 분석

수행 시간 측정

  • 두개의 알고리즘의 실제 수행 시간을 측정
  • 실제로 작접 구현하여 비교
  • 동일한 환경 (H/W or S/W)에서 측정 필요

복잡도 분석

  • 직접 구현하지 않고 수행시간을 분석
  • 알고리즘이 수행하는 연산의 횟수를 측정하여 비교
  • 입력 개수 n에 대한 함수의 형태로 표현
  • 시간 복잡도 분석: 수행시간 분석
  • 공간 복잡도 분석: 수행시 필요한 메모리 공간 분석

Big-O notation

  • Big-O 표기법 : 연산 횟수를 대략적으로 표시함.(최악의 경우(상한))
    more learn
    데이터 수가 많은 경우 차수가 큰 항이 성능에 가장 큰 영향을 미치기 때문에 다른 항들은 무시한다.
    (ex)
  • 알고리즘 1 → 전체 연산수 : 2 → O(1)
  • 알고리즘 2 → 전체 연산수 : 2n + 1 → O(n)
  • 알고리즘 3 → 전체 연산수 : 2n2 + 1 → O(n2)
    (종류)
    • O(1) : 상수형
    • O(logn) : 로그형
    • O(n) : 선형
    • O(nlogn) : 로그선형(bst)
    • O(\(n^2\)) : 2차형
    • O(\(n^3\)) : 3차형
    • O(\(n^k\)) : k차형
    • O(\(2^n\)) : 지수형
    • O(n!) : 팩토리얼형
    -> 데이터에 따라서 뭐가 더 좋은지 바뀔 수 있음
    image image


Coding test Share Tweet +1