자료구조와 알고리즘 학습 노트 기초 (1) 자료구조와 알고리즘

2023. 3. 4. 16:51·정리 전 게시글/공부 관련

자료구조

데이터를 저장, 조직, 관리하는 방법

책들이 난잡하게 어질러져있음 -> 책을 카테고리에 맞게 분류

 

자료구조의 일상 생활과 프로그래밍 문제 해결과의 차이

건축물을 만들려면 : 건축 재료(철근, 시멘트, 벽돌)의 이해가 필요. 샤시, 철골, 인터넷 연결 구조

프로그래밍 : 데이터 구조와 모듈의 이해가 필요. 리스트, 스택, 트리 구조

즉 상황에 맞게 어떤 자료구조를 사용할지 판단해야함

 

자료구조의 종류

배열, 리스트, 스택, 큐, 그래프, 트리, 최대 힙, 행렬....

선형 자료구조 :리스트, 스택, 큐

색인 자료구조 :검색트리(이진 검색트리, 균형 검색 트리), 해시 테이블

효율적인 자료구조 :우선순위 큐: 힙

관계 처리 자료구조 :그래프

 

알고리즘

문제 해결 과정을 묘사하는 것

문제 해결 절차를 체계적으로 기술한 것

 

문제의 요구 조건: 입력과 출력으로 명시할 수 있다.

알고리즘은 입력에 대한 출력을 만드는 과정을 기술

 

프로그램 = 자료구조 + 알고리즘 + α

 

알고리즘의 기술 방법

1. 자연어를 이용한 서술적 표현

  • 단어, 언어, 표현에 의존적
  • 모호함
  • 이해하기 쉬움

2. 흐름도를 이용한 도식화

  • 직관적이고 이해하기 쉬움
  • 알고리즘이 복잡할 수록 흐름도 또한 복잡해짐

3. 의사코드를 이용한 추상화 (가상 코드)

  • 알고리즘 기술에 가장 많이 사용
  • 핵심적인 알고리즘의 내용에 집중 가능
  • 프로그래밍 언어에 대한 의존성이 없음

4. 프로그래밍 언어

  • 알고리즘의 가장 정확한 기술이 가능
  • 내용에 대한 이해를 방해할 수 있음
  • 프로그래밍 언어에 대한 의존성 존재

 

추상 자료형 (ADT:Abstract Data Type)

추상 : 세세한 부분을 표현하지 않고 전체적인 이미지를 표현한 것

데이터 타입이 추상적 -> 데이터나 연산이 무엇인지 정의됨 그러나 어떻게 구현할 것인지는 정의되지 않음

추상화 : 중요한 정보는 강조되고 중요하지 않은 구현은 제거

 

ADT : 세부적인 부분에서 벗어나 추상적으로 정의한 데이터 타입

즉, 데이터 타입이 어떤 작업으로 이루어지는지 표현

 

알고리즘의 성능 분석

분석 기법

1. 수행 시간 측정

  • 두 개의 알고리즘의 실제 수행 시간을 측정 및 비교
  • 실제로 구현 해야함
  • 동일한 하드웨어, 동일한 사용 환경에 적용

2. 알고리즘의 복잡도 분석

  • 직접 구현하지 않으면서 수행시간을 분석
  • 알고리즘이 수행하는 연산의 횟수를 측정

알고리즘 A는

n * n이라는 곱셈 연산을 한번 한다 (1)

그리고 sum이라는 변수이 곱셈한 결과를 한 번 대입한다 (1)

총 두 번의 연산를 한다

 

알고리즘 B는

sum과 n을 더하는 덧셈 연산을 한 번 한다 (1)

그리고 sum이라는 변수에 덧셈 결과를 한 번 대입한다 (1)

그런데 위 연산은 1부터 n번 반복하는 for문 안에서 동작한다

 

다시 덧셈 연산은 총 n 번 한다 (n)

대입 연산은 총 n 번 한다 (n)

그러니까 총 n * n = n^2의 연산을 한다

 

알고리즘 C는

덧셈과 대입 연산을 각각 한 번 한다

그런데 이연산은 N번 반복하는 FOR문 안에 있다

그런데 이 FOR문은 또 N번 반복하는 FOR문 안에 있다

그러니까 n * n + n * n 총 2n^2번 한다

 

빅오(O) 표기법

자료의 개수가 많은 경우 차수가 가장 큰 항이 가장 영향을 크게 미치고 다른 항들은 상대적으로 무시한다

 

예)

n = 1000 일 때

n^2 -> 99.9%, n+1 -> 0.1% 라는 결과가 나옴 즉, n + 1은 무시해도 됨
 

 

 

쉽게 말하면 빅오표기법의 시간복잡도는 O(최고차항에서 계수 땐 것)

f(n) = 5 일 때 O(1),

f(n) = n^2 일 때 O(n^2),

f(n) = 2n^2 + n + 1 일 때 O(n^2)

 

 

 

저작자표시 (새창열림)

'정리 전 게시글 > 공부 관련' 카테고리의 다른 글

파이썬 학습 노트 기초 (1)  (1) 2023.03.04
[백준 1100번 문제, JAVA] 하얀 칸  (0) 2023.03.04
윤년 구하는 함수  (0) 2023.03.03
[백준 1094번 문제, JAVA] 막대기  (1) 2023.03.03
[백준 1026번 문제, JAVA] 보물  (0) 2023.03.02
'정리 전 게시글/공부 관련' 카테고리의 다른 글
  • 파이썬 학습 노트 기초 (1)
  • [백준 1100번 문제, JAVA] 하얀 칸
  • 윤년 구하는 함수
  • [백준 1094번 문제, JAVA] 막대기
aptenia
aptenia
공부하면서 배운 것들
  • aptenia
    새벽의 아이디어
    aptenia
  • 전체
    오늘
    어제
    • 분류 전체보기 (277) N
      • f1tenth (2)
      • 개발 관련 아무거나 (1) N
      • 정리 전 게시글 (268)
        • 개발 관련 (25)
        • 정보 관련 (19)
        • 공부 관련 (224)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 네이버 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이어베이스
    자바
    티스토리HTML
    일본규슈공업대학교
    마크
    이것이자바다연습문제
    C언어강좌
    백준
    파이썬
    티스토리반응형2스킨편집
    컨텍스트스위칭
    스크롤바CSS
    이것이자바다확인문제
    티스토리스킨편집
    빅데이터공모전
    콜라츠추측
    캡스톤디자인
    마인크래프트
    프로그래머스
    c언어초보
    마인크래프트강화스크립트
    C++강좌
    마인크래프트스크립트
    프로그래머스PCCE
    반복하지않는수
    이것이자바다
    C언어
    안드로이드
    마크스크립트
    공개SW개발자대회
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
aptenia
자료구조와 알고리즘 학습 노트 기초 (1) 자료구조와 알고리즘
상단으로

티스토리툴바