https://www.edwith.org/cs50/joinLectures/15240
[해외명강] 컴퓨터 과학 교양 강좌: CS50 강좌소개 : edwith
- 커넥트재단
www.edwith.org
1. 알고리즘
- 입력값을 출력값의 형태로 바뀌기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙들의 순서적 나열
정확한 알고리즘
- 알고리즘은 입력을 출력으로 바꾸기 위해 컴퓨터가 따르는 일련의 절차
- 알고리즘의 평가할 때는 정확성도 중요하지만, 효율성도 중요합니다. 효율성은 작업을 완료하기까지 얼마나 시간과 노력을 덜 들일 수 있는지에 대한 척도입니다.
// 전화번호부에서 Mike Smith를 찾는 일을 한다고 가정하자
pick up phone book // 전화번호부를 집어들고
open to first page of phone book // 첫 페이지를 펼친 후
look at names // Mike Smith가 그 페이지에 있는 지 찾습니다.
if "Smith" is among names // Smith가 있다면
call Mike // Mike에게 전화를 하면 끝
else if not at end of book // 그렇지 않으면 책의 끝까지
flip to next page // 다음 페이지로 넘긴다.
go to line 3 // 3번째 줄로 돌아감.(재귀/반복)
else // 책의 끝에도 없으면
give up // 전화번호부에 없으므로 포기한다.
효율적인 알고리즘(효율성)
pick up phone book // 전화번호부를 집어든다.
open to middle of phone book // 전화번호부의 가운데를 펼친다.
look at names // 이름들은 살펴본다.
if "Smith" is among names // 만약 "Smith"라는 이름이 있으면
call Mike // "Mike"에게 전화를 건다.
else if "Smith" is earlier in book // 그렇지않고 만약 "Smith"가 전화번호부 앞쪽에 있으면
open to middle of left half of book //책의 왼쪽 반의 중간을 열어본다.
go to line 3 // 3번째 줄로 돌아감 (재귀/반복)
else if "Smith" is later in book // 그렇지 않고 만약 "Smith"가 전화번호부 뒤쪽에 있으면
open to middel of right half of book // 책의 오른쪽 반의 중간을 열어본다.
go to line 3 // 다시 3번째 줄로 돌아감 (재귀/반복)
else // 그렇지 않으면 열어본 장에도 없고 전화번호부 초반부나 후반부에도 없다면
give up // 포기하라
- 2번째 알고리즘이 1번째 알고리즘보다 더 효율적입니다. 만약 500페이지가 추가되었다고 가정해 봅시다. 첫번째 알고리즘을 사용한다면, 추가된 500페이지에 대해 절차가 500번 더 수행될 것입니다. 하지만 두 번째 알고리즘을 사용한다면 단 1번만 추가로 수행하면 됩니다.
2. 의사코드
- 컴퓨터 프로그램은 프로그래밍 언어로 작성됩니다. 프로그래밍 언어는 일반적으로 기계가 알아들을 수 있도록 명령을 내리기 위해 사용되는 언어입니다. 의사코드는 프로그래밍 언어보다 문법적 제약을 적게 받으므로 알고리즘 표현에 많이 사용됩니다.
- 방 안에 있는 사람의 수를 세기 위한 알고리즘을 만들어야 한다고 생각해 봅시다. 우리는 숫자 0부터 시작할 것이고 방안에 있는 각각의 사람을 셀 때마다 1씩 더할 것입니다.
//방 안에 있는 사람 수 세기
let n = 0;
for each person in room
sest n = n + 1;
- 프로그래밍 언어로 작성되지 않았는데도 위의 알고리즘은 굉장히 정교합니다. 1번 줄처럼 n이라는 이름을 부여하고 0값을 넣어주는 것으로 시작합니다. 이 과정을 '할당'이라고 합니다.
코드는 어떤 코드 블록이 어떤 문장에 포함되는지 알 수 있도록 들여쓰기를 합니다. 예를 들어 3번 줄에 들여쓰기 되어있는데, 이것은 2번줄에 작성된 '방에 사람이 있다면' 그 아래 줄들이 반복되어야 한다는 뜻입니다.
의사 코드의 요소
- 의사 코드를 작성하는 올바른 방법이란 없습니다. 의사코드에는 반복문이나 조건문을 포함하기도 합니다. 의사코드에서 사용될 수 있는 이런 개념들은 프로그래밍 언어로 작성된 프로그램에서도 중요한 개념입니다. 프로그램 언어를 배운 후에도 의사 코드는 문법 걱정 없이 알고리즘을 단계별로 표현할 수 있는 유용한 방법이며 프로그램의 논리를 이해하는데 더 효과적인 방법입니다.