๐ค ์๊ณ ๋ฆฌ์ฆ - ์ด๋ถํ์์ด ๋ฌด์์ด๊ณ ์๊ฐ๋ณต์ก๋๋ ์ด๋ป๊ฒ ๋๋ฉฐ ๊ทธ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์
8) ์๊ณ ๋ฆฌ์ฆ - ์ด๋ถํ์์ด ๋ฌด์์ด๊ณ ์๊ฐ๋ณต์ก๋๋ ์ด๋ป๊ฒ ๋๋ฉฐ ๊ทธ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
์ด๋ถํ์์ด๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ํน์ ๊ฐ์ ์ฐพ๋ ํ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋ฐฐ์ด์ ์ค๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋ ์ํ๋ก ์กด์ฌํด์ผ ํ๋ฉฐ ์๊ฐ ๋ณต์ก๋๋
O(log n)
์ผ๋ก ๋ฐฐ์ด์ ์ ์ ์กฐ์ฌํ๋O(n)
์ ๋นํด ์๋์ ์ผ๋ก ๋น ๋ฅธ ํ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.์ฌ๊ธฐ์
O(log n)
๋ง์ ๊ฐ์ ์ฐพ์ ์ ์๋ ์ด์ ๋ ์ค๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ ๋์์ ์ ๋ฐ์ฉ ์ค์ฌ๋๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค.์ด์ง ๊ฒ์์ ํ๋ ค๋ฉด ์ฐ์ ๊ฐ์ด๋ฐ ๊ฐ์ ์ฐพ์์ key๊ฐ(์ง๊ธ ๊ตฌํ๋ ค๋ ์)๊ณผ ๋น๊ต๋ฅผ ํ๋ค.
2<7์ด๋ฏ๋ก ๋ท ๋ถ๋ถ์ ๋ฒ๋ฆฌ๊ณ ์ ๋ถ๋ถ๋ง ํ์ํ๋ค.
๊ฐ์ด๋ฐ ๊ฐ์ด 3์ ๊ฐ์ง๊ณ ๋น๊ตํ๋ค. 2<3 ์ด๋ฏ๋ก ์ ๋ถ๋ถ๋ง ๋ค์ ํ์ํ๋ค.
2>1 ์ด๋ฏ๋ก ๋ค์ ํ์ํ๊ณ ๋ ์ด์ ๋จ์ ํญ๋ชฉ์ด ์์ผ๋ฏ๋ก ํ์ ์คํจ.
์ด๋ ๊ฒ ํ ๋ฒ ์ฒ๋ฆฌ๊ฐ ์งํ๋ ๋๋ง๋ค ๊ฒ์ํด์ผ ํ๋ ๋ฐ์ดํฐ์ ์์ด ์ ๋ฐ์ฉ ๋ ๋ ๋จ์ด์ง๋ ๊ฒ์ O(log n) ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public int F(int k, int[] arr, int s, int e) { if (s > e) { return -1; } int m = (s + e) / 2; if (arr[m] == k) { return m; } else if (arr[m] > k) { return F(k, arr, s, m - 1); } else { return F(k, arr, m + 1, e); } }
์ฒ์ ํธ์ถ ๋ ๋๋ ์์ ๋ถ๋ถ์ 0, ๋ ์ ์ ๋ฐฐ์ด์ ๋งจ ๋ง์ง๋ง ๋ฐฉ์ด ๋๋ค.
int m = (s + e) / 2;
์ฃผ์ด์ง range์ ์ค๊ฐ๊ฐ์ ์ฐพ๋๋ค.์ฐพ๋ ๊ฐ์ด ์ค๊ฐ ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ค๊ฐ ์ง์ ๋ฐ๋ก ์ ๊น์ง range๋ฅผ ์กฐ์ ํด์ ๋ค์ ํธ์ถํ๊ณ ์ค๊ฐ ๊ฐ๋ณด๋ค ํฌ๋ฉด ์ค๊ฐ ์ง์ ๋ค์ ๋ฐฉ๋ถํฐ range๋ฅผ ์กฐ์ ํด์ ๋ค์ ํธ์ถํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํ ๋ฒ ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์ค๊ฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ฐ์ ๊ฒ์ ์์ญ์์ ์ ์ธ์์ผ ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์์ฐจ ๊ฒ์์ ๋น๊ตํด์ ์๋๊ฐ ํ์ ํ๊ฒ ๋น ๋ฅด๋ค.