코드 없는 알고리즘과 데이터 구조 (암스트롱 수베로 지음)
목차
Part 1 - 데이터 구조
Part 2 - 알고리즘
Part 3 - 알고리즘과 데이터 구조를 이해하는데 필요한 지식들
10. 무작위성
11. 스케줄링 알고리즘
12. 알고리즘 기획과 설계
📍타당한 기획과 설계의 필요성
✅알고리즘(혹은 프로그램)을 설계할 때는 코더가 아닌 컴퓨터 과학자의 자세를 가져야 한다
✅코더
- 무턱대고 코드부터 작성
- 논리 구조가 빈약하고 다른 사람이 이해하기 어려운 프로그램이 만들어짐
✅컴퓨터 과학자 :
- 알고리즘 구현 전에 기획하고 설계
특징
1️⃣알고리즘을 모듈식으로 설계
- 다양한 프로그래밍 언어로 구현 가능하고, 쉽게 가져다 쓸 수 있는 알고리즘 탄생
- 다양한 패러다임과 응용 프로그램에 적용 가능
2️⃣추상화 가능
- 추상화 : 복잡한 문제를 해결하는 핵심적 기능
- 프로그래밍을 통한 구현 : 패러다임의 변화나 새로운 기술의 등장에 따라 형태가 자주 변화
- 컴퓨팅 이론(튜링 기계, 유한 상태 기계, 시간 복잡도 등)에 따른 구현 : 시대가 바뀌어도 계속 중요
📍알고리즘 3단계
1️⃣입력
- 처리해야할 데이터가 컴퓨터 메모리에 적재
- 하드웨어 메커니즘(입력 장치, 센서 등)에 의해 수집되거나, SW를 통해 전달
2️⃣처리
- 입력된 데이터를 사용하여 연산을 수행하거나 데이터 자체를 변경 및 조작
- 처리의 핵심은 CPU
3️⃣출력
- 알고리즘이 처리한 데이터를 갖고 이를 사용하는 구성요소에 전달
예)
HW: 화면, 변환 장치, 구동 장치
SW : 다른 메서드나 함수
📍순서도(flow chart)
- 프로세스를 표현하는 다이어그램
✅흐름선
- 모든 기호를 연결하는 화살표
- 프로그램의 논리적인 흐름을 안내
✅단말 기호
- 알고리즘의 시작 및 종료 지점을 나타내는 꼭지점이 둥근 사각형
- 시작 지점은 하나지만, 종료 지점은 여러개가 될 수 있음
- 단말 기호 내부에 시작/종료 텍스트를 입력
✅입출력 기호
- 입력, 처리를 나타내는 평행사변형 기호를 사용
- 입력문 또는 출력문 텍스트를 입력
✅처리 기호
- 프로세스의 기본 작업이나 동작을 나타내는 사각형 기호를 사용
✅판단 기호
- 예/아니오 또는 참/거짓을 판단하고 그 결과에 따라 다른 동작을 수행해야 함
- 마름모 기호를 사용
- 판단 결과에 따라 실행 흐름이 둘로 갈라짐
✅종속 처리 기호 (서브 루틴)
- 미리 작성한 다른 모듈을 나타냄
- 사각형의 왼쪽과 오른쪽 부분에 수직선이 있는 기호
📍프로그램 구조
✅자주 사용되는 구조는 별도의 이름을 가짐
✅순차 구조 (sequence)
- 시작 부터 종료 기호까지 프로세스가 연속적으로 이어짐
- 그 자체가 클래스로 분류됨
✅선택 구조 (selection) 또는 판단 구조 (decision)
- if-then 구조 : 예/아니오 같은 단일 판단
- if-then-else 구조
- switch-case 구조
- if-then-else 구조
✅반복 구조 (loop)
- while 구조
- do-while 구조
📍의사 코드 (pseudo code)
- 순서도의 알고리즘의 논리적 흐름을 시각적으로 나타내는 방법
- 예
"""
시작
"첫 번째 숫자" 입력
"두 번째 숫자" 입력
"결과" = "첫 번째 숫자" + "두 번째 숫자"
"결과" 출력
종료
"""