• 티스토리 홈
  • 프로필사진
    alpha brain
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
alpha brain
  • 프로필사진
    alpha brain
    • 분류 전체보기 (93)
      • SOFTWARE DEVELOP (68)
        • REACT.JS (3)
        • WEBPACK (4)
        • HTML&CSS (2)
        • EXPRESS (0)
        • DATABASE (0)
        • NODE.JS (3)
        • JAVASCRIPT (24)
        • DOCKER (1)
        • Linux (3)
        • Git (6)
        • GRAPHQL (0)
        • Datastructure (7)
        • Development (6)
        • HTTP (1)
        • Programming Paradigm (1)
        • Algorithm log (5)
        • DEV log (1)
        • Project log (0)
        • I don't know yet (1)
      • 경제, 재무 (23)
      • 여행 (0)
      • 시사, 상식 (2)
  • 반응형
    250x250
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Datastructrue] Time Complexity
        2020년 02월 11일
        • alpha brain
        • 작성자
        • 2020.02.11.:31
        728x90
        반응형

        시간 복잡도는 알고리즘을 실행하는 데 걸리는 시간을 설명하는 계산 복잡도입니다.

        시간복잡도는 일반적으로 알고리즘에 의해 수행되는 기본 연산의 수를 계산하여 추정되며, 각 기본 연산은 고정 시간이 걸린다고 가정합니다.

        - wikipedia -

        어떤 문제에 대한 알고리즘이 다 같을수는 없을것이다. 시간복잡도는 그러한 알고리즘을 컴퓨터가 실행했을때 얼마만큼의 시간에 대한 퍼포먼스를 보여주는지 측정해주는 지표같은것이다.

        예를 들면, 

        어떤 한 숫자가 요소인 배열이 있고 그 배열에서 두 숫자의 차의 최대값을 구하는 문제를 풀어본다면, 많은 알고리즘들이 나올수 있다.

        let arr = [3,6,5,7,9];

        1. 각각의 원소마다 비교를 하면서 차의 최대값을 구한다.

        ==> 일일이 원소를 체크하면서 모든 원소에 대한 차이를 구한다. 

        2. 가장 큰 값과 가장 작은값을 구해서 차의 최대값을 구한다.

        ==> 배열순회를 2번 진행해서 최소와 최대를 구한다.

        3. 정렬한 후, 제일 앞의 값과 제일 뒤의 값의 차를 구한다.

        ==> 이미 정렬이 되있으므로 배열의 제일 앞과 뒤의 값으로 구한다.

        굳이 컴퓨터가 아니더라도 3번이 가장 빠른 방식인걸 알수가 있다.  시간복잡도는 이러한 알고리즘을 Big O notation이라는 표기법으로 표현을 하게 된다.

        위키에 나와있는데로 기본연산의 수를 계산해서 구해주면 된다.

        1번 알고리즘을 적용한다면 

        let arr = [3,6,5,7,9];
        
        // 3 -> 6,5,7,9
        // 6 -> 5,7,9
        // 5 -> 7,9
        // 7 -> 9
        
        // 4+3+2+1 번 연산한다.
        
        // 원소가 n개 라면?
        // 1+2+3+...+n-1 번 연산하게 된다.

        big o 표기법으로 표기하면 o(n^2)이 된다. ( xn^2 + yn ... 이렇게 나오지만 최고차항만 써주면 된다.)

        2번을 적용한다면

        let arr = [3,6,5,7,9];
        
        // 최소값은 배열전체를 1번 순회해서 구한다.
        // 최대값은 배열전체를 1번 순회해서 구한다.

        big o 표기법으로 표기하면 o(n)이 된다. (n번 + n번 = 2n 이지만 앞의 계수는 생략한다.)

        3번은 

        let arr = [3,6,5,7,9];
        arr.sort(); // 정렬이 이미 되있다고 가정
        
        // arr[0], arr[4]만 뽑아서 계산해주면된다.
        

        big o 표기법으로 표기하면 o(1)이 된다.

        (여기서 연산은 arr[0], arr[4] 그리고 그 둘의 차를 구하는것 , 3번 밖에 일어나지 않는다. 이것은 n이 커져도 고정이다.)

        위 그래프를 보면 가장 빠른것은 3번이다.

        프로그램의 효율성이나 성능 이런것을 봤을 때 어떤식으로 코드를 짜야하는지 알수가 있다. 그래서 시간복잡도라는 개념이 중요한것이다.

        728x90
        반응형

        'SOFTWARE DEVELOP > Datastructure' 카테고리의 다른 글

        [Datastructure] Time Complxity with Data Structure  (0) 2020.02.11
        [Datastructure] Tree / Binary Tree  (0) 2020.02.10
        [Datastructure] Graph  (0) 2020.02.10
        [Datastructure]Hash Table  (0) 2020.02.07
        [Datastructure]Linked List  (0) 2020.02.07
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바