알고리즘

알고리즘 특강_3

zayn 2024. 10. 15. 19:25

[ 복잡도 ] 

- 시간 복잡도

: 입력 값과 연산 수행 시간의 상관관계를 나타내는 척도 (= 코드의 시간적 효율성)

 

- 시간 복잡도의 개념 : 코드의 효율성 측정을 위해 실제 실행 시간이 얼마나 걸릴지 표현해 보고 싶다.

 

- 실제의 실행시간에 영향을 주는 여러가지 요인

 -> 컴퓨터의 처리 속도

 -> 사용된 언어

 -> 컴파일러의 속도

 

  => 코드가 단순히 몇 초, 몇 분 만에 실행됬다는 것을 기준으로 성능을 평가하기 어렵다.

 

( 점근적 표기법 )

=> 입력값에 따른 수행 시간의 증가율에 집중하기 위해 중요하지 않은 요소를 제거하는 표기법

function solution(n) {
  let count = 0;

  // 2n²
  // 2n²번 반복
  for (let i = 0; i < 2; i++) {
    // n번 반복       
    for (let i = 0; i < n; i++) {
      // n번 반복
      for (let j = 0; j < n; j++) {
        count++;
        console.log('2n² 반복문', i, j, count);
      }
    }
  }

  // 8n
  // 8번 반복
  for (let i = 0; i < 8; i++) {
    // n번 반복
    for (let j = 0; j < n; j++) {
      count++;
      console.log('8n 반복문',i, j, count);
    }
  }

// 50
// 50번 반복
  for (let i = 0; i < 50; i++) {
    count++;
    console.log('50번 반복문', i, count);
  }

  console.log('total count:', count);
}

solution(3)
solution(20)
solution(100)
// 상수, 낮은 차항, 계수는 무시합니다
2n² + 8n + 50 에서 가장 중요한 요소는 n²입니다

 

- 점근적 표기법의 종류

오메가 표기법  최상의 수행 시간을 표기하는 방법으로 Ω(N) 과 같은 형태로 표현한다.
세타 표기법  평균의 수행 시간을 표기하는 방법으로 Θ(N) 과 같은 형태로 표현한다.
빅오 표기법  최악의 수행 시간을 표기하는 방법으로 O(N) 과 같은 형태로 표현한다.
const arr = [??, ??, ??, ??, ??, ??, ??, ??, ??, ??];

// 최상이라면 한 번에 찾을 수도
// 평균이라면 배열의 중간까지 찾을 수도
// 최악이라면 배열의 끝까지 찾을 수도

 

  • 보통 시간 복잡도는 점근적 표기법 중 최악의 경우의 수를 나타내는 Big-O 표기법을 사용
  • 최악의 경우가 계산하기 편하면서도, 평균의 수행 시간을 예측하기 쉽기 때문

[ 공간 복잡도 ]

 => 프로그램의 실행에 얼마나 많은공간(메모리)가 필요한지 나타내는 척도 (=공간적 효율성)

function solution(n) {
	return '수박'.repeat(5000).slice(0, n)
}
  • 가능하면 적은 메모리를 사용해서 문제를 풀이하도록 하는 것이 좋습니다.
  • 보통, 공간복잡도의 경우 제한량이 넉넉하게 주어지므로 크게 걱정하실 필요는 없다.

[ 디버깅 활용 ]

function solution (arr, divisor) {
	debugger
	let answer = []
	
	for (const num of arr) { 
		if(num % divisor === 0) answer.push(num)
	}
	
	answer.sort((a,b) => a - b)
	
	if(answer.length === 0) answer.push(-1)

  return answer
}

const arr =[10, 5, 9, 7]
const divisor = 5

solution(arr, divisor)

 

'알고리즘' 카테고리의 다른 글

Q. 2016년  (0) 2024.10.28
알고리즘 특강_4  (1) 2024.10.15
알고리즘 특강 _ 2  (3) 2024.10.11
알고리즘 특강_1  (1) 2024.10.10