- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- sql
- 배열
- 동적할당
- 안드로이드
- 파이썬
- C언어
- Firebase
- 프로그래머스
- Java
- 연결리스트
- 로그인
- oauth
- 구글 로그인
- 자료구조
- til
- C++
- 안드로이드 스튜디오
- 백준
- 공유대학
- 비주얼 베이직
- 프로그래밍 입문
- 알고리즘
- 컴퓨터공학과
- 정렬
- 자바
- firebase google
- python
- android studio
- 코딩테스트
Archives
코딩하는 해달이
[자료구조&알고리즘] 1주차 - 2 본문
알고리즘의 기술 방법
- 자연어를 이용한 서술적 표현 (영어 or 한국어)
- 장점 : 대화나 의사소통을 통해서 전달하기 때문에 의사소통만 가능하다면 편하게 전달이 가능함
- 단점
말하는 사람과 듣는 사람에 따라 다르게 이해할 수 있어 일관성과 명확성이 떨어짐
언어, 단어, 표현등에 의존적임 - ex) 배열에서 최대값 찾기 알고리즘
- 도식화 : 흐름도 (flowchart)
- 장점 : 간단하고 명확하게 흐름을 표현 가능
- 단점 : 복잡한 알고리즘을 표현하기에는 어려울 수 있음
- ex) 배열에서 최대값 찾기 알고리즘
- 가상코드를 이용한 추상화 : 의사 코드 (pseudo-code)
- 장점
의사코드를 실제코드로 변환하기만 하면 되기 때문에 편하게 구현이 가능
알고리즘 기술에 가장 많이 사용
코드지만 프로그래밍 언어에 대한 의존성이 없음
프로그램을 구현할 때의 여러가지 문제들을 감출 수 있어서 핵심적인 내용에 집중 가능 - 단점 : 전반적인 프로그래밍 지식이 있어야 함
- ex) 배열에서 최대값 찾기 알고리즘
- 장점
- 프로그래밍 언어
- 장점 : 가장 명확하게 알고리즘을 전달 가능
- 단점
상대방이 해당 언어를 알아야 하고 알고리즘을 이해 할 수 있어야 함
다른 언어에 적용할 때 범용성이 떨어짐
실제 구현 시, 많은 구체적인 사항들이 구현되어야 하기에 알고리즘의 핵심적인 내용에 대한 이해를 방해 - ex) 배열에서 최대값 찾기 알고리즘
추상 자료형(ADT)
- 추상 : 세세한 부분을 표현하지 않고 전체적인 이미지를 표현한 것
- 데이터 타입이 추상적?
- 데이터나 연산이 무엇(what)인가는 정의 되지만 데이터나 연산을 어떻게(how) 컴퓨터 상에서 구현할 것인지는 제공되지 않음
- 추상화(Abstaction)?
- 사용자에게 중요한 정보는 강조되고 중요하지 않은 구현 세부사항은 제거하는 것
- ADT
- 세부 사항에서 벗어나 추상적으로 정의한 데이터 타입
- 즉, 어떤 데이터 타입이 어떤 작업으로 이루어지는지 표현한 것
- ex) 리스트의 추상자료형 표현
알고리즘의 성능 분석
- 알고리즘의 성능 분석 기법
- 수행 시간 측정
- 두개의 알고리즘의 실제 수행 시간을 측정 및 비교하는 것
- 실제로 구현하는 것이 필요
- 동일한 하드웨어를 사용해야함
- ex) 수행 시간 측정 기법의 예
- 수행 시간 측정
- 알고리즘의 복잡도 분석
- 직접 구현하지 않고서도 수행 시간을 분석하는 것
- 알고리즘이 수행하는 연산의 횟수를 측정하여 비교(시간 복잡도)
- 구현하지 않고, 하드웨어/소프트웨어 환경 관계없이 평가 가능!
- 일반적으로 입력의 개수 n에 때라 연산의 횟수가 달라짐
ex) 양의 정수 n을 n번 더하는 문제를 해결하자.
- 왜 알고리즘의 성능 효율성이 중요한가?
- 입력의 개수가 많아질 수 있기 때문에!
- ex)
- 빅오(O) 표기법
- 자료의 개수가 많은 경우에는 차수가 가장 큰 항이 가장 영향을 크게 미치고 다른항들은 상대적으로 무시될 수 있음
- 간단하게 말하면 최고차항이 중요함
(최고 차항에사 계수 뗀거)
반응형
'USG 공유대학' 카테고리의 다른 글
[프로그래밍 입문] 2주차 - 알고리즘 및 파이썬(2) (0) | 2023.03.12 |
---|---|
[프로그래밍 입문] 2주차 - 컴퓨팅 사고의 개요(1) (0) | 2023.03.12 |
[자료구조 및 알고리즘] 2주차 - 재귀와 귀납적 사고(1) (0) | 2023.03.12 |
[프로그래밍 입문] 1주차 - 화상강의 (2) | 2023.03.06 |
[자료구조&알고리즘] 1주차 - 1 (0) | 2023.03.04 |
Comments