ලැයිස්තුවක ඇති එක් අංගයක් සොයාගැනීමට අවශ්ය වූ විට ඔබ කරන්නේ කුමක් ද? එය කෙටි ලැයිස්තුවක් නම් ඔබට අවශ්ය අංගය හමු වන තුරු මුල සිට අගට කියවා බැලිය හැකියි. නමුත් ඉතා දිග ලැයිස්තුවක් ඇති විට එය මුල සිට අගට කියවීමට ගත වන කාලය වැඩි වේ.
ඔබ පොතක පිටුවක් පෙරලාගන්නේ කෙසේද. විශාල පොතක් නම් එය මුල සිට අගට පෙරලා බැලීමට වඩා තැනින් තැන බලා පිටුව සෙවීම පහසුය. එසේ වන්නේ ඇයි? පොතේ පිටු අනුපිලිවෙලට ඇති නිසා පිටුවක් සොයා ගැනීම පහසුය. මේ අනුව ලැයිස්තුවක් ද අනු පිලිවෙලට සකස් කල විට එහි ඇති අංගයක් සොයා ගැනීම පහසු වේ.
ද්වීමය සෙවුම (Binery Search) යනු මෙසේ අනුපිලිවෙලට සකස් කර ඇති ලැයිස්තුවක ඇති අංගයක් සොයා ගැනීමට යොදාගත හැකි වඩා වේගවත් සෙවුම් ක්රමයකි. සෙවුම් යන්ත්ර, දත්තමූල පද්ධති ආදියෙහි ඇති විශාල දත්ත ප්රමානයන් වලින් එක් එක් අංග සොයාගැනීමට බොහෝ විට භාවිතා කරන්නේ මේ ක්රමයයි.
ඔබ අත විශාල පොතක් ඇත්තේ යැයි සිතන්න. (විශාල පොතක් සොයාගෙන මෙය කර බලන්න.) එහි, සෙවිය යුතු පිටුවක් තීරනය කරගන්න. පිටු දහසක පොතකින් 345 වන පිටුව සෙවිය යුතු යැයි සිතන්න.
* එම පොතේ හරි මැද යයි සිතෙන තැනින් පෙරලන්න. හරි මැදින් පොත දෙකට පෙරලූයේනම් 500 සහ 501 පිටු දෙක ලැබෙනු ඇත. (ඔබට වෙනත් පිටු දෙකක් ලැබුනද මේ පිටුම පෙරලීමට උත්සාහ ගත යුතු නැත.)
* 345 ඇත්තේ 500 ට පහල කොටසේ යි. එම නිසා 500 සහ 501 අතරට ඇඟිල්ලක් තබා 500 දක්වා පිටු දෙකට මැදින් පෙරලන්න. එවිට 250, 251 පිටු දෙක ලැබෙනු ඇත.
* දැන් 345 ඇත්තේ 250 ට වඩා විශාල කොටසේ යි. නමුත් එය 500 ට වඩා පහලය. දැන් 250, 251 අතර ඇඟිල්ලක් තබා 251 ත් 500 ත් අතර කොටස මැදින් බෙදන්න. මෙසේ මැදින් බෙදාගෙන යෑමේදී ඔබට අවශ්ය පිටුවට ඉක්මනින් ලඟා විය හැකිය.
මේ ක්රියාකාරකමේදී ඔබට අවශ්ය වන්නේ ලැයිස්තුවේ කොටසක මුල මැද සහ අග ලකුණු කිරීමට යොමු තුනකි. ඉන් සෙවිය යුතු අංගය ලැයිස්තුවේ හරි මැදට ඉහලින්ද පහලින්ද ඇත්තේ යන්න අනුව ලැයිස්තුව නැවත බෙදා එම ලැයිස්තු කොටස නැවත ඉහත පරිදි පරීක්ෂා කර බලයි. අවසානයේ ලැයිස්තුව නැවත බෙදිය නොහැකි තරමටම බෙදූ විට ලැබෙන්නේ සෙවිය යුතු අංගයයි.



























































































No comments:
Post a Comment