알고리즘 정의

eden·2022년 2월 27일
0

알고리즘의 정의

1.어떤 부류의 무넺를 해결하는 컴퓨터로 구현 가능한 명백한 명령어들

public int add(int a, int b) {
return a+b;
}

는 알고리즘 인가? -> YES

이유) 해결하려는 문제: 두 숫자의 합을 구하려는 문제
컴퓨터로 구현가능? 위에 이미 구현했다.
명백함? 매개변수에 따라 명백한 결과가 나온다

고로 알고리즘이다.

알고리즘 정의로만 판단한다면
두수를 더하는 코드도 알고리즘이며, 우리가 작성하는 거의 모든 코드는 알고리즘이다.

흔히 알고리즘이라 부르는 것들
1. 사소한 코드는 보통 학계 및 실무에서 알고리즘이라 부르지 않는다.
2.무엇을 알고리즘 이라 하고 무엇을 아니라고 하는지 명백한 기준은 없다.
3.사람들이 말하는 습관을 보고 익숙해져야 할 부분
4.알고리즘 책이나 위키피디아에 실린 것들은 확실하다

훌륭한 알고리즘이 갖춰야 할 자질

  1. 입력과 출력이 명확히 정의되어 있어야 한다. -> 입력은 시작 시 비어있을 수도 있다.
  2. 알고리즘의 각 단계가 명확하며 모호하지 않아야한다.
  3. 유한 시간 안에 결과가 나와야 한다.
  4. 알고리즘에 컴퓨터 코드를 포함하면 안된다.
    -> ???? 이해가 어려울 수 있음: 자바를 모르는 사람은 그 코드를 못 읽는 사람이 있을 수 있음
    포팅이 어려울 수 있음: 특정 언어에만 있는 기능을 사용할때
  • 최종목표: 어떤 프로그래밍 언어로도 알고리즘을 구현할 수 있어야 함
  1. 같은 문제를 푸는 다양한 방법 중에 기장 효율적임

코드가 없이 알고리즘을 설명하려면?

  1. 인간의 언어로 표현해야 한다.
  2. 최종 목표는 이해니 문법은 적당히 틀려도 의사 코드(슈도코드)로 설명하는게 더 좋은 방법이다.

포팅이 가능한 의사코드 작성하기

1.거의 모든 언어에 공통되는 연산만 사용하기
-> 사칙연산,비트연산,조건문,반복문 등
2. 결국 하드웨어와 기계어/어셈블리어 수준에서 지원하는 것들
3.고수준언어 중에는 C에서 지원하는 것 정도(단, 포인터 연산은 제외)

알고리즘의 효율성

  1. 자원의 효율적 사용을 뜻함
    자원->시간:CPU속도 , 공간/용량:메모리 사용량 등
  2. 시간과 공간은 종종 상반 관계이다.
    3.자원을 많이 사용할수록 그 알고리즘이 복잡하다고 말함
    3-1)시간 복잡도
    3-2)공간복잡도
    3-3)알고리즘 복잡도를 표현하는 방법중 하나: 빅오(Big-O)표기법
profile
다양한 것에 관심있는 개발자입니다.

0개의 댓글