1. Binary-Search๋ ๋ฌด์์ธ๊ฐ์?
์ ๋ ฌ๋ ๋ฐฐ์ด ํน์ List ์์ ํ์ ๊ตฌ๊ฐ์ ์ ๋ฐ์ฉ ์ค์ฌ๊ฐ๋ฉฐ
ํน์ ๊ฐ์ ์ฐพ๋ ํ์๋ฒ์ด๋ค. ๋ค์๊ณผ ๊ฐ์ด ์งํ ๋๋ค.
(0) ๊ธฐ๋ณธ์ ์ธ ์ฉ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.target
: ์ฐพ๊ณ ์ ํ๋ ๊ฐ, start
: ์ผ์ชฝ ํฌ์ธํฐ,(index=0์์ ์์), end
: ์ค๋ฅธ์ชฝ ํฌ์ธํฐ(๋ฐฐ์ด ๋์์ ์์), mid
: ๋ ๊ฐ์ ์ค๊ฐ์ ์์นํ ๊ฐ
(1) mid
๋ฅผ ๊ตฌํ๊ณ target
๊ฐ๊ณผ ๋์๊ด๊ณ๋ฅผ ๋น๊ตํ๋ค.
(2) mid
> target
์ด๋ฉด, mid
๊ฐ์ด target
๊ฐ์ผ๋ก ํฅํ๋๋ก, end
= mid
-1 ๋ก ํ์ ์์ญ์ ์ ๋ฐ ์ค์ธ๋ค.
(3) mid
< target
์ด๋ฉด, start
= mid
+1 ์ด ๋๋๋ก ํ์ฌ, ํ์ ์์ญ์ ์ ๋ฐ ์ค์ธ๋ค.
(4) mid
== target
์ด๋ฉด ๊ฐ์ ๊ตฌํ์ผ๋ฏ๋ก, ์ด๋ถ ํ์์ ํ์ถํ๋ค.
์์ ๊ณผ์ ์ด ์ผ๋ฐ์ ์ธ ์ด๋ถ ํ์์ ๊ณผ์ ์ด๋ค. ๋ฌผ๋ก , upperBound
๋ LowerBound
๋ ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ ๋ชฉํ๊ฐ ๋ค๋ฅด๋ฏ๋ก, ์ด๊ฒ์์ ์กฐ๊ธ ๋ณํ๋๋ค.
๋ค์์ geeksforgeeks์์ ๋ณด์ฌ์ฃผ๋ ์ด๋ถ ํ์์ผ๋ก 23์ ์ฐพ๋ ๊ณผ์ ์ด๋ค.
2. ์๊ฐ ๋ณต์ก๋: O(logN)
์ด๋ถ ํ์์ ํ์ ์์ญ์ ๋งค ๋ฒ ์ ๋ฐ์ฉ ์ค์ฌ๊ฐ๊ธฐ ๋๋ฌธ์, ์๋๊ฐ O(logN)์ผ๋ก ๋น ๋ฅด๋ค. ๋ง์ฝ ์ ๋ ฌ๋ 16๊ฐ์ ๋ฐ์ดํฐ์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค๋ฉด, 4๋ฒ์ ์กฐํ์์ ๊ฐ์ ์ฐพ์ ์ ์๋ค. ํ์ง๋ง ์ ์ ์กฐ๊ฑด์ด ์๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฐ์ ์ฐพ์ผ๋ ค๋ ๋ฐฐ์ด ํน์ List๊ฐ ์ ๋ ฌ
๋์ด ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
3. (์ฌํ) UpperBound์ LowerBound๋ ๋ฌด์์ธ๊ฐ์?
UpperBound์ LowerBound๋ mid๊ฐ์ด target ๊ฐ๊ณผ ์ผ์นํ ๋, ๋ฐ๋ก ํ์ถํ์ง ์๊ณ , ๊ณ์ ์ด๋ถ ํ์์ ํ์ฌ, ํน์ ๊ฒฝ๊ณ๊ฐ
์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ๋ก target ๊ฐ์ด List์ ์ค๋ณต๋์ด ๋ง์ ๋
์ฌ์ฉํ๊ธฐ ์ข๋ค.
๊ฒฝ๊ณ๊ฐ: ํน์ ๊ฐ์ด ์์ํ๊ฑฐ๋, ๋๋๋ ์์น
(1) UpperBound
UpperBound
๋ target๊ฐ๋ณด๋ค ํฐ ๊ฐ์ ์ฒซ ์์์
์ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ตฌํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ํ์ฌ ๊ฐ๋ฆฌํค๋ ๊ฐ์ด target๊ฐ๊ณผ ๊ฐ์๋ ์ํฅ ์กฐ์ ํ๋๋ก ๋ง๋ ๋ค.
mid
<=target
์ผ ๋,start
=mid
+1 ๋ก ์ฌ๋ฆฐ๋ค.mid
>target
์ผ ๋,end
=mid
-1๋ก ๋ด๋ฆฐ๋ค.
์ด๋ ๊ฒ ํ๋ฉด, ๊ฒฐ๊ตญ, mid๊ฐ target๊ณผ ์ผ์นํ ๋๋, start ํฌ์ธํฐ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์์ผ์, start์ end๊ฐ ์๊ฐ๋ฆด ๋, start
๊ฐ์ด target ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ด ์์๋๋ ์ฒซ ์์น๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
๊ทธ๋ฆผ์ ํด๋น ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด๋ผ
(2) LowerBound
LowerBound
๋ target๊ฐ์ด ์์ํ๋ ์์น
๋ฅผ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ตฌํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ํ์ฌ ๊ฐ๋ฆฌํค๋ ๊ฐ์ด target ๊ฐ๊ณผ ๊ฐ์๋ ํํฅ ์กฐ์ ํ๋๋ก ๋ง๋ ๋ค.
mid
<target
์ผ ๋,start
= mid+1 ๋ก ์ฌ๋ฆฐ๋ค.mid
>=target
์ผ ๋,end
= mid-1๋ก ์ค์ธ๋ค.
์ด๋ ๊ฒ ํ๋ฉด, mid๊ฐ target๊ฐ๊ณผ ์ผ์นํด๋ ๊ณ์ ๋ด๋ ค๊ฐ์, ๊ฒฐ๊ตญ start์ end๊ฐ ์๊ฐ๋ฆด ๋, start
๊ฐ target๊ฐ์ด value๋ก ๋์ค๋ ๋ฐฐ์ด์ ์ฒซ ์์์ ์ ์์นํ๊ฒ ๋๋ค.
๊ทธ๋ฆผ์ ์ด ๋ธ๋ก๊ทธ๋ฅผ ๋ด๋ผ