일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이클립스
- 프로그래밍
- 배열
- 알고리즘
- 프로그래밍언어
- 초보코딩탈출
- 프로그래밍기초
- 자바프로그래밍
- github
- JShell
- Java
- 클래스
- 스프링 기초
- Git
- 초보코딩
- 제이쉘
- 코딩초보
- 기초코딩
- 자바기초
- spring
- 스프링
- 메소드
- 자바
- eclips
- 컴퓨터과학개론
- 리눅스
- JAVA기초
- 자바 스프링
- Elk
- 데이터베이스
- Today
- Total
키보드워리어
【알고리즘】시간복잡도와 공간복잡도, 표기법 본문
안녕하세요 【키보드 워리어】
블로그 방문자 여러분, 안경닦이입니다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/025.gif)
오늘은 알고리즘 에 대해 알아보겠습니다.
알고리즘이란
서론:알고리즘(algorithm)은 수학과 컴퓨터과학에서
어떠한 문제를 해결하기 위해 정해진 일련의 절차입니다.
알고리즘은 전산학, 컴퓨터과학, 언어학 등에서
핵심적인 과목으로, 적절한 자료구조와 적절한 알고리즘이 있다면
좋은 소프트웨어가 됩니다.
그러므로 알고리즘에 관한 내용들은 컴퓨터의 전 분야에서 기본적이며, 필수적이라고 할 수 있는데요.
앞으로 알고리즘으로 정렬, 탐색, 그래프 등주요 알고리즘 설계 및 분석 방법을 포스팅하도록 노력하겠습니다.
문제 해결들을 위해 여러 동작과 반복들을 정리하면
시간 복잡도와 공간 복잡도를 어느 정도 이해해볼 수 있습니다.
알고리즘의 수행 시간을 분석할 때 복잡 도는 문제를 해결하는 데 걸리는 시간과 입력의 함수 관계를 가리킵니다. 알고리즘을 취해 시간을 정량화하는 것이라고 할 수 있습니다.
시간 복잡도
시간 복잡도는 알고리즘을 실행시켜 완료할 때까지 걸리는 시간을 의미합니다.
수행되는 단위 연산의 수행 횟수의 합으로 표현합니다.
시간 복잡도를 판단할 때 우리는 각 1줄로 이루어진 코드를 1번의 연산이 필요하다고 정의합니다.
비교 연산자 거나, 대입 연산의 경우가 이러합니다.
※지정 연산자와 비교 연산자에 대한 정리 글을 확인하고 싶다면 아래 포스트 글을 참고하시면 감사하겠습니다!
2022.07.07 - [JAVA 완전정복!!/Jshell] - 【JShell】 if문 연습 및 지정 연산자와 비교 연산자 차이, 블록 활용
【JShell】 if문 연습 및 지정연산자와 비교연산자 차이, 블록 활용
안녕하세요 【키보드 워리어】 블로그 방문자 여러분, 안경닦이입니다. 오늘은 jshell 연습문제 에 대해 알아보겠습니다. 먼저 주어진 문제입니다. 1. 변수 a,b,c,d a+b>c+d 의 경우 프린트하시오. 2.
keyboardwarrior.tistory.com
중요한 점은 시간 복잡도에서 배열(array, string)을 계산할 때입니다.
자료가 많으면 많아질수록 계산해야 하는 횟수도 복잡해져서 배열은
1번의 연산이라고 생각하지 않기 때문입니다.
array와 string를 보통 N이라고 표현합니다.
이 코드들은 시간 복잡도에서 많은 비중을 차지하는데요.
공간 복잡도는 알고리즘에서 사용되는 메모리의 양을 나타냅니다.
저장하는 데이터의 양이 1개의 공간을 사용한다고 할 수 있습니다.
하지만, 대부분의 알고리즘의 성능이 시간에 의해 결정되며, 공간에 연연하지는 않습니다.
점근 표기법
알고리즘의 효율성을 평가하기 위해서 점근 표기법을 사용하는데
점근 표기법의 종류에는 빅오( BIG - O)표기법, 빅 오메가(BIg- 오메가) 표기법이 있습니다.
빅오 표기는 최악의 성능이 나올 때 연산량 의미하고, O(N)으로 표기합니다.
빅 오메가는 최선의 성능이 나올 때 연산량 의미하며, Ω(1)으로 표기합니다.
제가 왜 최악의 성능이 나온 빅오 표기를 먼저 설명했을까요?
그것은 모든 알고리즘에서 최선의 경우보다 최악의 경우를 산정하기 때문입니다.
표기의 예를 잠깐 들어볼까요?
array element [n]의 길이만큼 연산을 실행하는 코드가 있을 때
변수 number와 element 배열을 비교해야 한다고 가정할 경우
N * 1의 시간 복잡도를 가집니다.
array는 N으로 표기하며 이를 1번 수행하기 때문입니다.
그런데 입력값인 number가 element 배열의 값들 중에서
바로 앞에서 값을 찾아낸 경우와 맨 뒤에서 값을 찾을 경우가 있지 않겠습니까?
이런 경우 시간 복잡도를 빅오 표기법으로 하면 O(N)으로, 빅 오메가 표기법으로는 Ω(1)로 표현할 수 있는 겁니다.
'개발 관련 > 알고리즘' 카테고리의 다른 글
[알고리즘] 욕심쟁이 알고리즘 (0) | 2023.07.03 |
---|---|
[알고리즘] - 정렬 - 퀵 정렬 (0) | 2023.07.02 |