oris9

[알고리즘/자료구조]알고리즘과 수도코드 본문

알고리즘, 자료구조

[알고리즘/자료구조]알고리즘과 수도코드

oris9 2024. 4. 7. 03:15

 

 

알고리즘(algorithm)


문제를 해결하기 위한 여러 동작들의 모임
어떤 기능이 일어나기 위해 내재된/독립된 단계적 명령어들의 집합

1) 알고리즘의 조건
  입력 : 외부에서 제공되는 자료가 0개 이상 존재
  출력 : 적어도 2개 이상의 서로 다른 결과 도출
  명확성 : 모호하지 않은 명령어로 구성되며 수행 과정이 명확해야 함 (→ 정밀/유일성)
  유한성(종결성) : 유한 번의 명령어를 수행 후(유한 시간 내) 종료
  효율성 : 모든 과정은 명백하게 실행가능(검증가능) 한 것이어야 한다. (=타당성)

 

알고리즘 전략세우기(Pseudo-code)

 

수도코드란? (Pseudo-code, 의사코드)

코드를 작성할때 간단하게 프로그램의 진행과정을 단계별로 기록해 놓으면서 알고리즘을 구상하는 방법을 말한다.
프로그램의 문제를 해결할때나, 다른 사람들과 프로그램의 흐름에 대해 소통하기 위한 방법으로 사용된다.

프로그램을 계획하는 초반 단계와 그 프로그램 코드를 실제로 작성하는 최종 단계를 이어 주는 도구로써,
잘 작성된 의사코드는 실제 코드의 주석으로 활용될 수 있다. 

알고리즘의 작동 과정을 묘사하고 싶은 경우나 기술적인 부분을 잘 모르는 사람에게 프로그램의 진행 과정을 설명할 때 또는 여러 사람이 함께 개발할 때 사용한다.

```
if 업무 시간 > 평균 근무 시간
then초과 근무 메시지를 표시한다.
else일반적인 근무 메시지를 표시한다.
endif
```
와 같이 작성할 수 있다. (하지만 정해진 표준이나 규칙은 존재하지 않는다)

한 줄에 하나의 명령만 적는다.
어떻게 코드로 표현할지 적지 말고, 하고 싶은 이야기가 뭔지 기록한다.
어떤 것도 상상에 맡기지 않고 기재한다.
표준적인 프로그래밍 구조를 따른다.

 

일반적인 알고리즘 순서

① 문제 정의 → ② 모델 고안 → ③ 명세 작성 → ④ 설계 → ⑤ 검증 → ⑥ 분석(복잡도 등) → ⑦ 구현 → ⑧ 테스트 → ⑨ 문서화
자연어 ↔ 프로그래밍 언어 사이의 방식을 단계별로 기록

  ⅰ. 프로그램의 진행 과정에 조금이라도 관심이 있는 사람이라면, 이 의사 코드를 읽고 이해할 수 있을까?
  ⅱ. 이 의사 코드는 실제 코드로 쉽게 바뀔 수 있을까?
  ⅲ. 과정을 진행하는데 필요한 단계 중, 빠뜨린 것은 없나?
  ⅳ. 의사 코드를 읽는 사람들이 이해할 수 있는 용어들을 사용했는가?

3) 좋은 알고리즘의 분석 기준
  Correctness : 문제를 해결하는가
  Efficiency : 이를 효과적으로 하는가

 




참고
https://velog.io/@cha-suyeon/Algorithm-%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84-%EA%B3%B5%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84
https://velog.io/@leemember/%EC%BD%94%ED%85%8C-%EB%8C%80%EB%B9%84-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
https://velog.io/@tataki26/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%8F%89%EA%B0%80%EB%B2%95

https://velog.io/@leobit/%EB%B3%B5%EC%9E%A1%EB%8F%84Complexity

https://velog.io/@leobit/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Algorithm