구종만 - 알고리즘: 기술 사회의 연금술

Post on 19-Dec-2014

6.268 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

2002년, 2003년 한국 대학생 프로그래밍 경시대회 금상 2003년, 2004년 세계 대학생 프로그래밍 경시대회 결승 진출 2004년, 2006년, 2008년 구글 코드 잼 결승 진출 2007년 탑코더 오픈 준우승, 2006년 결승 진출 2008년, 2009년 자바 알고리즘 콘테스트 우승 Innotive Corporation Software Engineer NHN Corporation Software Engineer Drw Trading Group Algorithmic Trader Getco Quantitative Email Writer Algospot.com Administrator 알고리즘의 세계는 끝이 없고 같은 실수를 반복하게 되죠. 하지만 구종만님이 출동하면 어떨까? 화려한 수상 경력을 바탕으로 를 쓰신 구종만님께 가장 중요한 10가지 알고리즘을 01회 스쿱미디어 세미나에서 강연하셨습니다.

TRANSCRIPT

(진짜로) 안녕하세요?

구종만• 각종 프로그래밍 대회 (옛날~) !

• http://algospot.com (’07~) !

• 알고리즘 문제 해결 전략 (’11) !

• DRW Trading Group (~’09) !

• GETCO (~’13)

Algorithms: 기술 사회의 연금술

@jongman

인물 스무고개 !

(현실 인물, 만화/소설 등장인물)

http://kr.akinator.com/

이미지 리사이징

돌돔 뚊

Context Aware Resizing

http://www.youtube.com/watch?v=c-SSu3tJ3ns

“충분히 진보된 기술은 마법과 구분되지 않는다.”

!

- Arthur C. Clarke

과거의 마법들

놀라운 일들은 어떻게 구현될까?

대중의 인식.jpg

흑마법.jpg

모르는 자에겐 마법이지만 !

아는 자에겐 예술일 뿐!

큰 그림은 알 수 있다!

“검색 엔진? 역색인 만들어서 검색하고, 용량 많으니 분산 처리 잘 하고, 스팸 걸러내기랑 랭킹 신경 잘 써야지.”

“얼굴 인식? 얼굴 윤곽 인식하고, 눈코입 크기랑 위치 사용해서 분류하면 되지.”

전산학이 현대의 마법이라면 !

알고리즘은 그 기초

알고리즘

재미 없는 정의

• 약간은 모호한 정의:

• “컴퓨터가 주어진 작업을 수행하는 방법”

• 소스 코드 != 알고리즘

예제 문제 - 정렬

[6,6,6,8,5,8,7,6,6,7,3] !

을 정렬하면 !

[3,5,6,6,6,6,6,7,7,8,8]

퀵소트 (T. Hoare, 1960)

한 문제를 여러 방법으로 풀 수 있어요

힌트:

DTD

사실 입력은 LG 순위![6, 6, 6, 8, 5, 8, 7, 6, 6, 7, 3]

빈도 수를 세자[6, 6, 6, 8, 5, 8, 7, 6, 6, 7, 3]

{3: 1, 5: 1, 6: 5, 7: 2, 8: 2}

정렬 결과 복구![6, 6, 6, 8, 5, 8, 7, 6, 6, 7, 3]

{3: 1, 5: 1, 6: 5, 7: 2, 8: 2}

[3, 5, 6, 6, 6, 6, 6, 7, 7, 8, 8]

새 알고리즘 고안 과정

주식투자

가락동의 현인!

저의 미래.jpg

가장 돈을 많이 번 구간을 찾아보자!

다 해본다!….

….

….

….

….

….

성능 측정

성능 측정

입력 크기 simple()1천 0.17초

성능 측정

입력 크기 simple()1천 0.17초1만 16초

성능 측정

입력 크기 simple()1천 0.17초1만 16초

10만 1568초

성능 측정

입력 크기 simple()1천 0.17초1만 16초

10만 1568초100만 (약) 43시간

1000만 (약) 181일

새 아이디어: 각개격파

반으로 쪼개자!

정답 구간은:

• 왼쪽 절반에 있거나, 오른쪽 절반에 있거나

• 왼쪽에서 시작 - 오른쪽에서 끝

= +

걸쳐 있는 경우

성능 측정

입력 크기 simple() divide…()1천 0.17초 0.002초1만 16초 0.02초

10만 1568초 0.2초100만 (약) 43시간 3초

1000만 (약) 181일 27초

새 아이디어: 최대값 - 최소값

문제:

아.. 안돼

지금까지의 최소값!

성능 측정

입력 크기 simple() divide…() fast()1천 0.17초 0.002초 0.000008초1만 16초 0.02초 0.008초

10만 1568초 0.2초 0.08초100만 (약) 43시간 3초 0.8초

1000만 (약) 181일 27초 8초

교훈

• 같은 문제를 푸는 여러 방법들 간에 큰 성능 차이가 있다!

• 입력이 커지면 커질 수록 알고리즘간의 성능 차이는 커진다!

아까 보여준거랑 너무 차이나는데요?

천릿길도 한 걸음부터

• 간단한 알고리즘은 어려운 알고리즘의 구성 요소가 된다

• 많은 알고리즘은 설계 “기법” 혹은 “원칙”들을 공유한다

• Akinator와 리사이징도 알고 보면 간단!

Akinator 파헤치기

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

표로 만들어 보기

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

첫 번째 질문?

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

첫 번째 질문?

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

두 번째 질문?

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

두 번째 질문?

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

새 정보 받아들이기

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

“이 둘을 어떻게 구분하나요?”

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

가수? 🔵 🔴

사용자 입력

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

가수? 🔵 🔴

부분적 정보에서 배우기

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

가수? 🔵 🔴

괜히 한번 물어보기

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

가수? 🔵 🔴

괜히 한번 물어보기

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

가수? 🔵 🔴

결과가 이랬다면

여자? 🔵 🔵 🔴 🔴 🔵 🔵 🔵 🔵

30세 이상? 🔴 🔵 🔵 🔵 🔵 🔴 🔵 🔴

정치인? 🔴 🔵 🔵 🔵 🔴 🔴 🔴 🔵

미국인? 🔴 🔴 🔵 🔴 🔵 🔴 🔵 🔴

가수? 🔵 🔴 🔴

아하!

불확실성 해결하기

• “김정은은 정치인인가요?”

• “엘사는 정치인인가요?”

• “김정은이 작년에 30살이 되었어요!”

• “잘생겼습니까?”

여자? 100% 100% 0% 0% 100% 100% 100% 100%

30세 이상? 0% 100% 100% 80% 90% 0% 100% 0%

정치인? 0% 100% 100% 100% 0% 0% 0% 70%

미국인? 0% 0% 100% 0% 100% 20% 100% 10%

모든 것을 확률로

이미지 리사이징 파헤치기

아이디어: 한번에 한칸만 지워보자

어느 칸을 줄일까?

아이디어: 제일 티 안나게!

“티 안난다”의 정의

“티 안난다”의 정의

“티 안난다”의 정의

1 2 2 2 1 0 2 2 0 4 4 0 1 1 0 0 1 2 3 1 1 0 3 1 1 1 0 0 0 1

0 1 2 3 2 0 2 2 0 5 4 1 1 1 0 0 1 2 3 0 1 0 2 0 1 0 0 0 0 0

1 1 1 3 3 0 2 2 1 4 3 1 2 1 0 0 0 3 4 1 1 0 1 1 0 0 0 0 0 0

1 1 1 4 4 0 1 1 1 4 2 0 2 2 0 1 0 2 4 1 1 1 1 1 0 1 0 0 0 0

1 1 1 3 4 1 0 1 1 3 2 0 2 2 0 1 1 2 4 2 2 2 1 1 1 1 0 0 0 1

1 1 1 2 3 1 1 0 1 3 2 0 1 1 0 0 1 1 4 2 2 2 0 1 2 1 1 1 1 1

1 1 1 2 2 1 1 1 2 3 1 1 1 1 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0

1 1 1 2 2 0 1 0 3 3 1 0 1 0 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0

1 0 1 2 2 1 0 0 2 2 1 0 0 0 0 0 2 1 4 2 3 0 1 2 1 0 0 0 0 0

1 1 1 2 1 1 0 1 2 2 1 0 0 0 1 0 2 1 3 1 3 0 2 2 0 0 0 0 0 0

1 1 1 2 1 1 0 1 2 1 1 0 0 0 1 1 2 0 2 1 2 0 3 2 1 1 0 0 0 1

1 1 1 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 2 1 2 0 3 1 1 1 0 0 1 1

1 1 2 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 3 1 2 0 2 1 1 2 0 0 1 1

1 1 2 2 1 0 0 1 0 1 1 0 0 0 0 2 2 0 3 1 2 0 2 1 0 1 0 0 1 0

1 1 1 2 1 0 0 1 0 1 1 0 0 0 0 1 2 0 3 1 2 0 1 1 0 1 0 0 0 1

1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 0 3 2 2 0 1 0 0 0 1 0 0 1

1 2 2 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 3 2 2 0 0 1 1 0 1 0 1 0

1 2 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 3 2 1 0 0 0 1 0 2 0 1 0

1 2 1 1 1 0 0 0 0 0 0 1 0 0 0 2 1 0 3 2 1 1 0 0 1 0 1 0 1 0

1 1 1 1 0 0 0 0 0 0 0 1 0 0 0 2 1 1 3 3 1 2 0 0 0 0 1 0 1 0

1 0 1 2 0 0 1 0 0 1 1 2 1 0 0 2 1 1 3 3 2 2 0 0 0 0 1 0 1 0

2 1 1 2 1 1 1 1 0 0 1 2 2 1 0 3 1 1 2 1 2 1 0 0 0 0 1 0 1 0

1 1 1 2 1 1 1 1 1 1 0 1 2 2 0 2 1 0 2 1 1 1 0 0 0 1 0 1 1 0

1 1 0 1 0 0 1 1 2 1 0 0 2 2 0 2 2 1 2 1 1 1 0 0 0 1 0 0 1 1

1 1 0 1 0 0 0 2 2 2 1 0 2 2 0 2 2 1 1 1 1 1 0 0 1 1 0 0 0 1

1 1 0 1 1 1 0 1 2 2 1 0 1 2 0 2 2 0 0 0 1 1 0 1 1 2 0 0 0 2

1 1 0 1 1 0 0 1 2 3 2 0 1 2 0 1 2 1 0 0 1 1 0 1 2 2 0 0 1 1

0 1 1 0 0 0 0 0 1 2 2 1 0 1 0 1 1 2 1 1 2 1 1 1 3 2 1 0 0 1

0 1 1 0 0 0 0 0 1 2 1 1 0 0 0 0 0 1 2 0 3 1 1 0 3 1 1 0 0 0

1 2 2 2 1 0 2 2 0 4 4 0 1 1 0 0 1 2 3 1 1 0 3 1 1 1 0 0 0 1

0 1 2 3 2 0 2 2 0 5 4 1 1 1 0 0 1 2 3 0 1 0 2 0 1 0 0 0 0 0

1 1 1 3 3 0 2 2 1 4 3 1 2 1 0 0 0 3 4 1 1 0 1 1 0 0 0 0 0 0

1 1 1 4 4 0 1 1 1 4 2 0 2 2 0 1 0 2 4 1 1 1 1 1 0 1 0 0 0 0

1 1 1 3 4 1 0 1 1 3 2 0 2 2 0 1 1 2 4 2 2 2 1 1 1 1 0 0 0 1

1 1 1 2 3 1 1 0 1 3 2 0 1 1 0 0 1 1 4 2 2 2 0 1 2 1 1 1 1 1

1 1 1 2 2 1 1 1 2 3 1 1 1 1 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0

1 1 1 2 2 0 1 0 3 3 1 0 1 0 0 0 1 0 4 2 3 1 0 2 2 0 1 0 0 0

1 0 1 2 2 1 0 0 2 2 1 0 0 0 0 0 2 1 4 2 3 0 1 2 1 0 0 0 0 0

1 1 1 2 1 1 0 1 2 2 1 0 0 0 1 0 2 1 3 1 3 0 2 2 0 0 0 0 0 0

1 1 1 2 1 1 0 1 2 1 1 0 0 0 1 1 2 0 2 1 2 0 3 2 1 1 0 0 0 1

1 1 1 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 2 1 2 0 3 1 1 1 0 0 1 1

1 1 2 2 1 0 0 1 1 1 1 0 0 0 0 1 2 0 3 1 2 0 2 1 1 2 0 0 1 1

1 1 2 2 1 0 0 1 0 1 1 0 0 0 0 2 2 0 3 1 2 0 2 1 0 1 0 0 1 0

1 1 1 2 1 0 0 1 0 1 1 0 0 0 0 1 2 0 3 1 2 0 1 1 0 1 0 0 0 1

1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 0 3 2 2 0 1 0 0 0 1 0 0 1

1 2 2 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 3 2 2 0 0 1 1 0 1 0 1 0

1 2 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 3 2 1 0 0 0 1 0 2 0 1 0

1 2 1 1 1 0 0 0 0 0 0 1 0 0 0 2 1 0 3 2 1 1 0 0 1 0 1 0 1 0

1 1 1 1 0 0 0 0 0 0 0 1 0 0 0 2 1 1 3 3 1 2 0 0 0 0 1 0 1 0

1 0 1 2 0 0 1 0 0 1 1 2 1 0 0 2 1 1 3 3 2 2 0 0 0 0 1 0 1 0

2 1 1 2 1 1 1 1 0 0 1 2 2 1 0 3 1 1 2 1 2 1 0 0 0 0 1 0 1 0

1 1 1 2 1 1 1 1 1 1 0 1 2 2 0 2 1 0 2 1 1 1 0 0 0 1 0 1 1 0

1 1 0 1 0 0 1 1 2 1 0 0 2 2 0 2 2 1 2 1 1 1 0 0 0 1 0 0 1 1

1 1 0 1 0 0 0 2 2 2 1 0 2 2 0 2 2 1 1 1 1 1 0 0 1 1 0 0 0 1

1 1 0 1 1 1 0 1 2 2 1 0 1 2 0 2 2 0 0 0 1 1 0 1 1 2 0 0 0 2

1 1 0 1 1 0 0 1 2 3 2 0 1 2 0 1 2 1 0 0 1 1 0 1 2 2 0 0 1 1

0 1 1 0 0 0 0 0 1 2 2 1 0 1 0 1 1 2 1 1 2 1 1 1 3 2 1 0 0 1

0 1 1 0 0 0 0 0 1 2 1 1 0 0 0 0 0 1 2 0 3 1 1 0 3 1 1 0 0 0

천릿길도 한 걸음부터 #2• 이미지 높이가 한 줄이라고 생각해 봅시다

2 2 1 0 0 2 2 1 0 0 0

2 1 1 0 1 2 2 1 0 0 0

2 1 1 0 1 2 1 1 0 0 0

2 1 0 0 1 1 1 1 0 0 0

….

천릿길도 한 걸음부터 #2• 생각할 것도 없네

2 2 1 0 0 2 2 1 0 0 0

2 1 1 0 1 2 2 1 0 0 0

2 1 1 0 1 2 1 1 0 0 0

2 1 0 0 1 1 1 1 0 0 0

….

천릿길도 두 걸음부터• 이미지가 두 줄이라고 생각해 봅시다

2 2 1 0 0 2 2 1 0 0 0

2 1 1 0 1 2 2 1 0 0 0

2 1 1 0 1 2 1 1 0 0 0

2 1 0 0 1 1 1 1 0 0 0

….

천릿길도 1.1 걸음부터• 두 번째 줄의 한 칸만 생각해 봅시다

2 2 1 0 0 2 2 1 0 0 0

2 1 1 0 1 2 2 1 0 0 0

2 1 1 0 1 2 1 1 0 0 0

2 1 0 0 1 1 1 1 0 0 0

….

천릿길도 1.1 걸음부터• 여기까지 내려오는 가장 짧은 경로는?

2 2 1 0 0 2 2 1 0 0 0

2 1 1 0 1 2 2 1 0 0 0

2 1 1 0 1 2 1 1 0 0 0

2 1 0 0 1 1 1 1 0 0 0

….

천릿길도 1.1 걸음부터• 최소 합은 1이구나!

2 2 1 0 0 2 2 1 0 0 0

2 1 1 0 1 2 2 1 0 0 0

2 1 1 0 1 2 1 1 0 0 0

2 1 0 0 1 1 1 1 0 0 0

….

이제 2 걸음• 모든 칸에 대해 최소 합을 갱신

2 2 1 0 0 2 2 1 0 0 0

4 2 1 0 1 2 3 1 0 0 0

2 1 1 0 1 2 1 1 0 0 0

2 1 0 0 1 1 1 1 0 0 0

….

2.1 걸음• 빨간 칸까지 내려오는 가장 작은 경로 합은?

2 2 1 0 0 2 2 1 0 0 0

4 2 1 0 1 2 3 1 0 0 0

2 1 1 0 1 2 1 1 0 0 0

2 1 0 0 1 1 1 1 0 0 0

….

네 3입니다!• 이렇게 반복하면 최단 경로를 찾을 수 있어요

2 2 1 0 0 2 2 1 0 0 0

4 2 1 0 1 2 3 1 0 0 0

2 1 1 0 1 3 1 1 0 0 0

2 1 0 0 1 1 1 1 0 0 0

….

참 쉽죠?

결론

세상을 바꾸는 힘

• 좋은 식견을 갖춘 개발자의 중요 요건

• 밖에서 보면 놀라워도

• 직접 해 보면 비교적 쉽다

• 재미나게 공부해서 더 좋은 개발자가 되자!

어떻게 공부하나?

어떻게 공부하나?

프로그래밍 대회

책광고한권만 사주십쇼

(굽신굽신)

감사합니다

top related