SlideShare a Scribd company logo
Python
이민석
국민대학교 컴퓨터공학부
http://sw4all.tistory.com/
Binary Search & …
이민석
국민대학교 컴퓨터공학부
http://sw4all.tistory.com/
학습 목표
1. 데이터 정렬 잠깐 remind
2. 정렬된 데이터에서 원하는 내용 찾기
(Binary Search – 이진 탐색)
Binary search
Naver ‘핫토픽 키워드’
2015년 5월 9일 오전 8시, 11시, 14시
세상의 많은 문제의 본질은...
• 데이터 사이의 관계를 이해하는 것
데이터의 순서
 정렬 (Sorting) : 어떤 기준이든.
데이터의 소속
 분류 (Categorizing) 및 인식 : 어떤 구분이든.
데이터의 연관성
 관계 (Relation)의 설정 : 어떤 이유이든.
데이터의 변화
 추세(Trend)의 확인 : 어떤 관점이든.
데이터의 정렬 방식
• Simple sorts
 Insertion sort
 Selection sort
• Efficient sorts
 Merge sort
 Heap sort
 Quick sort
• Bubble sort and variants
 Bubble sort
 Shell sort
 Comb sort
• Distribution sort
 Counting sort
 Bucket sort
 Radix sort
• …
문제는 다 같다:
데이터를 순서대로 정렬하는 것
답은 다르다:
데이터의 모양에 따라서
http://en.wikipedia.org/wiki/Sorting_algorithm
정렬이 된 (sorted) 것들
[a .. zzz]
[갈홍기 .. 황희민]
오늘은, 찾아보는 겁니다.
본질적으로 균일한 index로
찾기
50 페이지 셋째줄
내용과 상관없이
“몇번째” 에 있는지 이미 알면
탐색 없이 바로 접근
BUT, 그러나
“독도” 단어 찾기
“독도” 단어 찾기
list = [세종실록지리지의 모든 단어를 차례로 나열]
for s in list :
if (s == “독도”) :
print(“발견”)
‘통밥’ 아니면
앞에서 부터 차례로 찾는 것 이외에는 다른 대안이 없다.
우연히, 내가 찾는 단어(item)가 제일 첫 단어 일 수도 있고
재수가 없으면, 제일 마지막 단어 일 수도 있다.
단어 수가 100개라면 평균 50번을 비교해야 찾는다.
그래서 우리는,
 목차 (주제 별)
(단어 알파벳 순) 인덱스 
키워드로  페이지(index)를 얻은 후,
바로 접근
그리고, HyperLink도 만들고..
사람이, 사전에서 단어 찾기
[a .. zzz]
인간은 ‘통밥’에 능하다 (1,2,3)
- 통밥은 경험에 의한 가상의 index에 의존
하지만 인간은 detail에 약하다. (4)
1. “감”을 동원하여 적당한 곳을 펼친다.
2. 찾는 단어의 더 앞에 있는지 뒤에 있는지 확인하고
3. 한두번 더 펼쳐본다.
4. 거의 근처에 왔으므로 한장씩 넘겨본다
5. 단어가 있는 페이지를 찾은 뒤에,
6. 페이지 안의 단어를 1~5 방식으로 (하지만 아주 빠르게) 찾는다
정렬된 사전에서.. 컴퓨터가 같은 일을 하도록 해야한다면..
list = [세종실록지리지의 모든 단어를 차례로 나열]
for s in list :
if (s == “독도”) :
print(“발견”)
어쨋거나
적어도 이거보다는 나아야..
‘컴퓨터가’ 의 의미: 가상적인 인덱스 (경험에 의한 단어 분포의 이해) 를 알지 못한다는 의미
짜잔, Binary Search (이진 탐색)
크다 작다 게임에 답을 맞추는 것과 같은 방식
“A가 1~1000까지 숫자를 하나 생각하고, B가 아무런 사전정보 없이 맞추는 게임
독심술 초능력을 가지지 않은 B의 Best 작전은, 반씩 잘라가는 거.
500
750
875
…
…
625
250
375
125
최악의 경우
log2(후보개수) 번의 실패
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
이진 탐색
• 문제 : 정렬된 (sorted) 리스트 x 에서 x[i] = “찾는 값”인 i를 찾는 것
(또는 그런 i가 없다는 것을 확인하는 것)
– Ex, 사전에서 “Dog” 이란 단어를 찾는 것  결과: page, 컬럼, 라인
– Ex, 가나다 순 학생 명부에서 “홍길동”을 찾는 것  결과: 학생의 학번
• Ex. 아래에서 13 찾기
15
99
max
16
2
min
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min 중간위치 8 선택
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min 13 < 53, 실패
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min 중간위치 3 선택
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min 13 < 14, 또 실패
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min
중간위치 1 선택
21 3 4 5 …0
…1413 25 336
max
2
min
6 < 13, 또 실패
21 3 4 5 …0
…1413 25 336
min
max
2
성공 !
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
이진 탐색
• 문제 : 정렬된 (sorted) 리스트 x 에서 x[i] = “찾는 값”인 i를 찾는 것
(또는 그런 i가 없다는 것을 확인하는 것)
– Ex, 사전에서 “Dog” 이란 단어를 찾는 것  결과: page, 컬럼, 라인
– Ex, 가나다 순 학생 명부에서 “홍길동”을 찾는 것  결과 학생의 학번
• Ex. 아래에서 94 찾기
15
99
max
16
2
min
(없음)
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min 중간위치 8 선택
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min 53 < 94, 실패
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min
중간위치 12 선택
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
93 < 94, 실패
821 3 4 65 7 109 11 12 14130
641413 25 33 5147 53 8472 93 95 97966
15
99
max
16
2
min
min
min
… 109 11 12 1413
64… 8472 93 95 9796
15
99
max
16
min
중간위치 14 선택
… 109 11 12 1413
64… 8472 93 95 9796
15
99
max
16
min
94 < 96, 실패
… 109 11 12 1413
64… 8472 93 95 9796
15
99
16
min
max앗, 94 != 95, 실패
찾을 값
시작은 중간 위치부터
같지 않으면, min, max 위치 조정 후
새로운 중간 지점 지정
실행 결과
프로그래밍 팁:
• 리스트가 위 처럼 생겼을 때 (2진 탐색 프로그램을 작성한 경우)
– 어떤 숫자를 찾아 내는 (또는 못찾았다고 하는) Test를 해야하며
– 리스트의 처음 숫자인 2, 마지막 숫자인 99가 잘 찾아지는 지를 꼭 확
인
(Boundary Condition Test)
• 프로그래밍 tip = 사람이 ‘무의식적으로’ 생각하는 방법
간격이 1m 인 기둥이 한 줄로 세개 서 있다, 첫번째 기둥과 세번째 기둥의 거리는?
정렬이 된 (sorted) 것들
[a .. zzz]
[갈홍기 .. 황희민]
Python 에서의 사전 (dict)
요약
1. 데이터 정렬 잠깐 remind
2. 정렬된 데이터에서 원하는 내용 찾기
(Binary Search – 이진 탐색)
3. Python의 사전 데이터 형: dictionary
http://sw4all.tistory.com/

More Related Content

PPTX
2차프로젝트 프리미어리그 데이터를 활용한 경기결과 예측 서비스
PPTX
Data and Sorting Algoritm
PPTX
Samsung-OSS-Conference-20140916
PPTX
Software Company, Open Soure Software Company
PDF
Deview-2014-자신있는개발자에서 훌륭한개발자로
PPTX
소프트웨어개발자는누구인가?
PPTX
it's software!
PDF
프로그램 기초
2차프로젝트 프리미어리그 데이터를 활용한 경기결과 예측 서비스
Data and Sorting Algoritm
Samsung-OSS-Conference-20140916
Software Company, Open Soure Software Company
Deview-2014-자신있는개발자에서 훌륭한개발자로
소프트웨어개발자는누구인가?
it's software!
프로그램 기초

Viewers also liked (7)

PPTX
국민대-컴퓨터프로그래밍-2017-1-오프라인강좌
PPTX
왜 소프트웨어를 배워야할까?
PDF
소프트웨어, 정말 되는 건가?
PPTX
소프트웨어, 소프트웨어 개발자
PPTX
국민대학교 컴퓨터프로그래밍
PPTX
Open Source 그리고 git과 github, code review
PPTX
자기소개서, 이력서 쓰는 법
국민대-컴퓨터프로그래밍-2017-1-오프라인강좌
왜 소프트웨어를 배워야할까?
소프트웨어, 정말 되는 건가?
소프트웨어, 소프트웨어 개발자
국민대학교 컴퓨터프로그래밍
Open Source 그리고 git과 github, code review
자기소개서, 이력서 쓰는 법
Ad

More from Minsuk Lee (16)

PPTX
CES 처음 가는 분을 위한 가이드
PPTX
NIA-PaaS-TA Pub 키노트
PPTX
모두콘, 어떻게 배울 것인가 발제.
PPTX
GDG-DevFest, 만들면서 자랑하면서 성장하는 개발자
PDF
개발자, 회사.. 왜 오픈소스를 해야할까?
PDF
진정한 소프트웨어 융합교육에 대하여
PDF
FOSS CON Korea 2018
PPTX
소프트웨어 공부하는법
PPTX
왜 우리는 개발자에 집중하지 않는가?
PPTX
Somul 2017-이민석
PDF
Next에서 공부하는 법
PDF
Deview 2013 - 나는 왜 개발자인데 자신이 없을까?
PPTX
임베디드시스템개발 Part2
PDF
OSS개발자포럼 Slide-2013-05-25
PPTX
임베디드시스템개발 Part1
PPT
임베디드시스템과시장
CES 처음 가는 분을 위한 가이드
NIA-PaaS-TA Pub 키노트
모두콘, 어떻게 배울 것인가 발제.
GDG-DevFest, 만들면서 자랑하면서 성장하는 개발자
개발자, 회사.. 왜 오픈소스를 해야할까?
진정한 소프트웨어 융합교육에 대하여
FOSS CON Korea 2018
소프트웨어 공부하는법
왜 우리는 개발자에 집중하지 않는가?
Somul 2017-이민석
Next에서 공부하는 법
Deview 2013 - 나는 왜 개발자인데 자신이 없을까?
임베디드시스템개발 Part2
OSS개발자포럼 Slide-2013-05-25
임베디드시스템개발 Part1
임베디드시스템과시장
Ad

Binary search

  • 2. Binary Search & … 이민석 국민대학교 컴퓨터공학부 http://sw4all.tistory.com/
  • 3. 학습 목표 1. 데이터 정렬 잠깐 remind 2. 정렬된 데이터에서 원하는 내용 찾기 (Binary Search – 이진 탐색)
  • 5. Naver ‘핫토픽 키워드’ 2015년 5월 9일 오전 8시, 11시, 14시
  • 6. 세상의 많은 문제의 본질은... • 데이터 사이의 관계를 이해하는 것 데이터의 순서  정렬 (Sorting) : 어떤 기준이든. 데이터의 소속  분류 (Categorizing) 및 인식 : 어떤 구분이든. 데이터의 연관성  관계 (Relation)의 설정 : 어떤 이유이든. 데이터의 변화  추세(Trend)의 확인 : 어떤 관점이든.
  • 7. 데이터의 정렬 방식 • Simple sorts  Insertion sort  Selection sort • Efficient sorts  Merge sort  Heap sort  Quick sort • Bubble sort and variants  Bubble sort  Shell sort  Comb sort • Distribution sort  Counting sort  Bucket sort  Radix sort • … 문제는 다 같다: 데이터를 순서대로 정렬하는 것 답은 다르다: 데이터의 모양에 따라서 http://en.wikipedia.org/wiki/Sorting_algorithm
  • 8. 정렬이 된 (sorted) 것들 [a .. zzz] [갈홍기 .. 황희민]
  • 10. 본질적으로 균일한 index로 찾기 50 페이지 셋째줄 내용과 상관없이 “몇번째” 에 있는지 이미 알면 탐색 없이 바로 접근
  • 12. “독도” 단어 찾기 list = [세종실록지리지의 모든 단어를 차례로 나열] for s in list : if (s == “독도”) : print(“발견”) ‘통밥’ 아니면 앞에서 부터 차례로 찾는 것 이외에는 다른 대안이 없다. 우연히, 내가 찾는 단어(item)가 제일 첫 단어 일 수도 있고 재수가 없으면, 제일 마지막 단어 일 수도 있다. 단어 수가 100개라면 평균 50번을 비교해야 찾는다.
  • 13. 그래서 우리는,  목차 (주제 별) (단어 알파벳 순) 인덱스  키워드로  페이지(index)를 얻은 후, 바로 접근
  • 15. 사람이, 사전에서 단어 찾기 [a .. zzz] 인간은 ‘통밥’에 능하다 (1,2,3) - 통밥은 경험에 의한 가상의 index에 의존 하지만 인간은 detail에 약하다. (4) 1. “감”을 동원하여 적당한 곳을 펼친다. 2. 찾는 단어의 더 앞에 있는지 뒤에 있는지 확인하고 3. 한두번 더 펼쳐본다. 4. 거의 근처에 왔으므로 한장씩 넘겨본다 5. 단어가 있는 페이지를 찾은 뒤에, 6. 페이지 안의 단어를 1~5 방식으로 (하지만 아주 빠르게) 찾는다
  • 16. 정렬된 사전에서.. 컴퓨터가 같은 일을 하도록 해야한다면.. list = [세종실록지리지의 모든 단어를 차례로 나열] for s in list : if (s == “독도”) : print(“발견”) 어쨋거나 적어도 이거보다는 나아야.. ‘컴퓨터가’ 의 의미: 가상적인 인덱스 (경험에 의한 단어 분포의 이해) 를 알지 못한다는 의미
  • 17. 짜잔, Binary Search (이진 탐색) 크다 작다 게임에 답을 맞추는 것과 같은 방식 “A가 1~1000까지 숫자를 하나 생각하고, B가 아무런 사전정보 없이 맞추는 게임 독심술 초능력을 가지지 않은 B의 Best 작전은, 반씩 잘라가는 거. 500 750 875 … … 625 250 375 125 최악의 경우 log2(후보개수) 번의 실패
  • 18. 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 이진 탐색 • 문제 : 정렬된 (sorted) 리스트 x 에서 x[i] = “찾는 값”인 i를 찾는 것 (또는 그런 i가 없다는 것을 확인하는 것) – Ex, 사전에서 “Dog” 이란 단어를 찾는 것  결과: page, 컬럼, 라인 – Ex, 가나다 순 학생 명부에서 “홍길동”을 찾는 것  결과: 학생의 학번 • Ex. 아래에서 13 찾기 15 99 max 16 2 min
  • 19. 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min 중간위치 8 선택 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min 13 < 53, 실패 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min
  • 20. 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min 중간위치 3 선택 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min 13 < 14, 또 실패 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min
  • 21. 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min 중간위치 1 선택 21 3 4 5 …0 …1413 25 336 max 2 min 6 < 13, 또 실패 21 3 4 5 …0 …1413 25 336 min max 2 성공 !
  • 22. 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 이진 탐색 • 문제 : 정렬된 (sorted) 리스트 x 에서 x[i] = “찾는 값”인 i를 찾는 것 (또는 그런 i가 없다는 것을 확인하는 것) – Ex, 사전에서 “Dog” 이란 단어를 찾는 것  결과: page, 컬럼, 라인 – Ex, 가나다 순 학생 명부에서 “홍길동”을 찾는 것  결과 학생의 학번 • Ex. 아래에서 94 찾기 15 99 max 16 2 min (없음)
  • 23. 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min 중간위치 8 선택 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min 53 < 94, 실패 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min
  • 24. 중간위치 12 선택 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 93 < 94, 실패 821 3 4 65 7 109 11 12 14130 641413 25 33 5147 53 8472 93 95 97966 15 99 max 16 2 min min min
  • 25. … 109 11 12 1413 64… 8472 93 95 9796 15 99 max 16 min 중간위치 14 선택 … 109 11 12 1413 64… 8472 93 95 9796 15 99 max 16 min 94 < 96, 실패 … 109 11 12 1413 64… 8472 93 95 9796 15 99 16 min max앗, 94 != 95, 실패
  • 26. 찾을 값 시작은 중간 위치부터 같지 않으면, min, max 위치 조정 후 새로운 중간 지점 지정
  • 28. 프로그래밍 팁: • 리스트가 위 처럼 생겼을 때 (2진 탐색 프로그램을 작성한 경우) – 어떤 숫자를 찾아 내는 (또는 못찾았다고 하는) Test를 해야하며 – 리스트의 처음 숫자인 2, 마지막 숫자인 99가 잘 찾아지는 지를 꼭 확 인 (Boundary Condition Test) • 프로그래밍 tip = 사람이 ‘무의식적으로’ 생각하는 방법 간격이 1m 인 기둥이 한 줄로 세개 서 있다, 첫번째 기둥과 세번째 기둥의 거리는?
  • 29. 정렬이 된 (sorted) 것들 [a .. zzz] [갈홍기 .. 황희민]
  • 31. 요약 1. 데이터 정렬 잠깐 remind 2. 정렬된 데이터에서 원하는 내용 찾기 (Binary Search – 이진 탐색) 3. Python의 사전 데이터 형: dictionary

Editor's Notes

  • #7: 순서는 : 어떤 식이든 Sorting 소속은 : Categorize 분류, 인식 : 사진을 보고 개or고양이, 사과or배 연관성은 : 관계의 정의 : 친구, 부모, 학교-학생 변화는 : 미래 예측 : 어떤 관점이든
  • #9: 가나다, 기타 등등 우리가 아는 치례로 나열된 것은 알지만…
  • #11: 컴퓨터는 바로 접근, ‘생활의 달인’ 도
  • #12: 컴퓨터는 바로 접근, 사람은 ‘달인’ 이 필요
  • #13: 컴퓨터는 바로 접근, 사람은 ‘달인’ 이 필요
  • #14: 키워드를 가지고 숫자 (페이지)를 얻은 후, 바로 접근
  • #16: 가나다, 기타 등등 우리가 아는 치례로 나열된 것은 알지만…
  • #30: 가나다, 기타 등등 우리가 아는 치례로 나열된 것은 알지만…