๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์‹œ์Šคํ…œ๊ฐœ๋ฐœ/์ž๋ฃŒ๊ตฌ์กฐ๋ž‘์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณต๋ทฐ

์ด์ง„ ํƒ์ƒ‰, Binary Search

by ์ด๋…ธํ‚ค_ 2019. 5. 19.

์นจ๋Œ€์œ„์˜ ์–‘๊ฐฑ

์ž…๋ ฅ : ์ •๋ ฌ๋œ ์›์†Œ ๋ฆฌ์ŠคํŠธ

์ถœ๋ ฅ : ์ž…๋ ฅ๋ฐ›์€ ์›์†Œ ๋ฆฌ์ŠคํŠธ์—์„œ ์ฐพ๋Š” ๊ฐ’์ด ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜, ์ฐพ์œผ๋ฉด ๋ฆฌ์ŠคํŠธ์—์„œ ์ธ๋ฑ์Šค(์œ„์น˜)๋ฅผ ๋ฐ˜ํ™˜.

๋น…์˜ค ํ‘œ๊ธฐ๋ฒ• : O(log n)

 

#javascript 

//์ •๋ ฌ๋œ ๋ฐฐ์—ด
var list=[1,2,3,4,5,7,10,33,57];
//์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’
var search = 33;

function binarySearch(list , find)
{   
    var start = 0;
    var end = list.length-1;
    var cnt = 1;
    var mid =-1;
    while(1)
    {
    	//๊ทธ๋ƒฅ ๋‚˜๋ˆ„๊ธฐ 2๋ฅผ ํ–ˆ๋”๋‹ˆ ์†Œ์ˆ˜์  ๊ฐ’์ด ์ถœ๋ ฅ๋˜์–ด์„œ idx๊ณ„์‚ฐ์ด ์•ˆ๋˜๋”๋ผ. 
        //๊ฐ•์ œ๋กœ ํ˜•๋ณ€ํ™˜.
        mid = parseInt((start+end)/2);
        //ํ•ด๋‹น ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ์ค‘๊ฐ„๊ฐ’์„ ์„ ํƒ.
        var sel = list[mid];
        console.log("[" + cnt + "] start : " + start + ", end : " + end + ", mid : " + mid + ", sel : " + sel);
        
        //์–ผ์”จ๊ตฌ๋‚˜. ๊ฒ€์ƒ‰ํ•˜์ž๋งˆ์ž ๊ฑธ๋ฆฌ๋ฉด ๊ธฐ๋ถ„ ์งธ์งˆ๋“ฏ. 
        if( find == sel )
        {
            console.log(cnt + " times!");
            break;
        }
        //์ฐพ์•„์•ผํ•˜๋Š” ๊ฐ’๋ณด๋‹ค ์ค‘๊ฐ„๊ฐ’์ด ์ž‘์œผ๋ฉด start๋ฅผ ํ•œ์นธ ์ฆ๊ฐ€.
        else if(sel < find)
        {
            start = mid+1;
        }
        //์ฐพ์•„์•ผํ•˜๋Š” ๊ฐ’๋ณด๋‹ค ์ค‘๊ฐ„๊ฐ’์ด ํฌ๋ฉด end๋ฅผ ํ•œ์นธ ๊ฐ์†Œ. 
        else{
            end = mid-1;
        }
        cnt++;
    }
    
}

binarySearch(list, search);

 

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•  ์ˆ˜๋ก ๋Š๋ผ๋Š” ๊ฑด.

์ž…๋ ฅ๊ฐ’์ด ์ž‘์„ ๋•, ๊ทธ ํšจ์šฉ๊ฐ€์น˜์— ๋Œ€ํ•ด์„œ ์‹ค๊ฐํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

ํ•˜์ง€๋งŒ ์ž…๋ ฅ๊ฐ’์ด ๋ช‡๋งŒ ๋‹จ์œ„๊ฐ€ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ์ •๋ ฌ๊ณผ ํƒ์ƒ‰์— ์žˆ์–ด์„œ ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ์˜ ํผํฌ๋จผ์Šค๊ฐ€ ํ™•์—ฐํžˆ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๊ฒƒ. 

๋Œ“๊ธ€