티스토리 뷰

728x90
SMALL

시간 복잡도(Time Complexity) : 어떤 알고리즘이 어떠한 상황에서 더 빠르고 더 느리냐

공간 복잡도(Space Complexity) : 어떤 알고리즘이 어떠한 상황에서 메모리를 적게 쓰고 또 많이 쓰냐

 

순차 탐색(Linear Search) T(n)=n

#include <stdio.h>

int LSearch(int ar[], int len, int target)
{
	int i;
	for (i = 0; i < len; i++)
	{
		if (ar[i] == target)
			return i;    // 찾은 대상의 인덱스 값 반환
	}
	return -1;    // 찾지 못했음을 의미하는 값 반환
}

int main(void)
{
	int arr[] = { 3, 5, 2, 4, 9 };
	int idx;

	idx = LSearch(arr, sizeof(arr) / sizeof(int), 4);
	if (idx == -1)
		printf("탐색 실패 \n");
	else
		printf("타겟 저장 인덱스: %d \n", idx);

	idx = LSearch(arr, sizeof(arr) / sizeof(int), 7);
	if (idx == -1)
		printf("탐색 실패 \n");
	else
		printf("타겟 저장 인덱스: %d \n", idx);

	return 0;
}

이진 탐색(Binary Search) T(n)=log2n

#include <stdio.h>

int BSearch(int ar[], int len, int target)
{
	int first = 0;   // 탐색 대상의 시작 인덱스 값
	int last = len - 1;   // 탐색 대상의 마지막 인덱스 값
	int mid;

	while (first <= last)
	{
		mid = (first + last) / 2;   // 탐색 대상의 중앙을 찾는다. 

		if (target == ar[mid])   // 중앙에 저장된 것이 타겟이라면
		{
			return mid;
		}
		else    // 타겟이 아니라면 
		{
			if (target < ar[mid])
				last = mid - 1;   // 뒷부분을 탐색 대상에서 제외
			else
				first = mid + 1;   // 앞부분을 탐색 대상에서 제외
		}
	}
	return -1;   // 찾지 못했을 때 반환되는 값 -1
}

int main(void)
{
	int arr[] = { 1, 3, 5, 7, 9 };
	int idx;

	idx = BSearch(arr, sizeof(arr) / sizeof(int), 7);
	if (idx == -1)
		printf("탐색 실패 \n");
	else
		printf("타겟 저장 인덱스: %d \n", idx);

	idx = BSearch(arr, sizeof(arr) / sizeof(int), 4);
	if (idx == -1)
		printf("탐색 실패 \n");
	else
		printf("타겟 저장 인덱스: %d \n", idx);

	return 0;
}

 

빅-오 표기법(Big-Oh-Notation)

T(n)이 다항식으로 표현이 된 경우, 최고차항의 차수가 빅-오가 된다.

 

성능(수행시간, 연산횟수)의 대소별 정렬

O(1) : 상수형 빅-오. 연산횟수가 고정인 유형의 알고리즘을 대표

O(logn) : 로그형 빅-오. 데이터 수의 증가율에 비해서 연산횟수의 증가율이 훨씬 낮은 알고리즘(바람직)

O(n) : 선형 빅-오. 데이터의 수와 연산횟수가 비례

O(nlogn) : 선형로그형 빅-오. 연산횟수는 두 배를 조금 넘게 증가

O(n^2) : 데이터 수의 제곱에 해당하는 연산횟수를 요구. 중첩된 반복문 내에서 발생. 바람직x

O(n^3) : 데이터 수의 세제곱. 적용하기에 무리

O(2^n) : 지수형 빅-오. 사용하기에 매우 무리

728x90
LIST

' > 윤성우의 열혈 자료구조' 카테고리의 다른 글

스택(Stack)  (0) 2020.10.22
연결 리스트(Linked List)3  (0) 2020.10.19
연결 리스트(Linked List)2  (0) 2020.10.12
연결 리스트(Linked List)1  (0) 2020.10.11
재귀(Recursion)  (0) 2020.10.10
댓글
공지사항