seegongsik
내 단어장
알고리즘

원하는 걸 빠르게 찾기

사전에서 낱말을 찾을 때, 처음부터 한 장씩 넘기지 않죠. 가운데를 펴고 '앞일까 뒤일까' 정하잖아요. 줄이 맞아 있으면, 반씩 잘라가며 훨씬 빠르게 찾을 수 있어요.

01

처음부터 차례로

찾는 가장 쉬운 방법은
처음부터 하나씩 보는 거예요.
'이건가? 아니네.
다음은? 아니네.'
맞을 때까지
계속 넘기는 거죠.
확실하긴 한데,
뒤에 있으면
오래 걸려요.

2
5
8
11
13
17
21
25
앞에서부터 한 칸씩 확인해요. 찾는 값이 뒤에 있을수록 오래 걸려요.

앞에서부터 하나씩. (찾을 값 13 · 앞에서부터 한 칸씩 확인)

칸이 몇 개 안 되면
괜찮아요.
근데 수천, 수만 개라면?
하나씩 보다간
한참 걸리죠.
더 좋은 방법이 있어요.
줄이 맞아 있을 때 쓰는
똑똑한 방법이에요.

02

가운데를 펴봐요

줄이 맞아 있으면
이렇게 해요.
가운데를 펴서 봐요.
찾는 값이 그보다 크면
앞쪽 절반은 버려요.
작으면 뒤쪽 절반을 버리고.
한 번 볼 때마다
절반이 사라져요.

2
5
8
11
13
17
21
25
가운데 값과 견줘, 찾는 값이 없는 절반을 통째로 버려요.

가운데를 보고 절반을 버려요. (찾을 값 13 · 없는 절반을 통째로 버림)

한 번에 절반을 버리니까,
남는 게 확 줄어요.
8칸이 4칸,
4칸이 2칸,
2칸이 1칸.
몇 번 만에
딱 한 칸으로 좁혀져요.

03

하나씩 vs 반씩

둘을 나란히 두고
같은 값을 찾아봐요.
하나씩은
뒤에 있는 값까지
여러 번 봐야 해요.
반씩은
몇 번 만에 끝나죠.
같은 답인데
걸음 수가 확 달라요.

하나씩느림
2
5
8
11
13
17
21
25
반씩빠름
2
5
8
11
13
17
21
25
반씩 자르면 훨씬 적은 걸음으로 같은 값을 찾아요.

같은 값(13) 찾기, 걸음 수 비교. (하나씩 = 느림 · 반씩 = 빠름)

칸이 많아질수록
차이가 더 벌어져요.
천 개를 하나씩이면
최대 천 번,
반씩이면 열 번이면 돼요.
이 차이가
큰 데이터에선
어마어마해요.

04

왜 정렬이 먼저일까

반씩 자르기엔
조건이 하나 있어요.
줄이 맞아 있어야 해요.
정렬돼 있어야
'가운데보다 크면 앞은 버려도 돼'가
성립하거든요.
뒤죽박죽이면
절반을 버릴 수가 없어요.

2
5
8
11
13
17
21
25
줄이 맞아 있어요. 가운데를 기준으로 절반을 버릴 수 있어요.
2강에서 줄을 세운 게, 여기서 빠른 찾기로 이어져요.

정렬됐을 때만 반씩 자르기가 통해요. (줄 맞음 → 성립 · 뒤죽박죽 → 불성립)

그래서 정렬과 찾기는
짝꿍이에요.
한 번 줄을 세워두면,
그다음부터 찾기가
계속 빨라지니까요.
정돈에 드는 수고가
두고두고 보답받는 거죠.

05

여기까지 왔어요

찾기는 늘 곁에 있어요.
사전, 전화번호부,
검색창에 친 한 단어.
그 뒤에서
'반씩 자르기' 같은 방법이
빠르게 답을 찾아줘요.
순서, 정렬, 찾기까지
이제 한 줄로 이어졌어요.

찾기 = 원하는 걸 빠르게 집어내기
하나씩은 느리고 · 줄이 맞으면 반씩 · 훨씬 빠르게.
순서
정해진 단계
정렬
줄 세우기
찾기
빠르게 집기
알고리즘의 기본 세 걸음을 밟았어요. 다음 영역에서 더 깊이 들어가요.

순서 → 정렬 → 찾기, 여기까지. (찾기 = 원하는 걸 빠르게 집어내기)

알고리즘이
대단한 게 아니란 걸
이제 알 거예요.
순서를 정하고,
정돈하고,
똑똑하게 찾는 것.
작은 꾀가 모여
큰일을 해내는 거예요.

한 줄 정리찾기는 원하는 걸 집어내는 거예요. 하나씩 보면 느리지만, 줄이 맞아 있으면 반씩 잘라가며 훨씬 빠르게 찾아요. 반씩 자르기는 정렬돼 있을 때만 통해요. 그래서 정렬과 찾기는 짝꿍이에요. 한 번 줄 세우면 두고두고 빨라져요.
이 페이지가 도움 됐다면 후원하기
알고리즘