பைனரி தேடல் அல்காரிதம் என்பது வரிசைப்படுத்தப்பட்ட வரிசையில் ஒரு குறிப்பிட்ட மதிப்பைக் கண்டறியும் திறமையான முறையாகும். இந்த அணுகுமுறை வரிசையை சிறிய பகுதிகளாகப் பிரித்து, தேடல் வரம்பின் நடுத்தர நிலையில் உள்ள மதிப்பை இலக்கு மதிப்புடன் தொடர்ந்து ஒப்பிடுகிறது. மதிப்புகள் பொருந்தினால், விரும்பிய மதிப்பு காணப்படும்; இல்லையெனில், அல்காரிதம் தேடல் வரம்பைக் குறைத்து, மதிப்பைக் கண்டறியும் வரை அல்லது ஆய்வுக்கு கூடுதல் கூறுகள் எஞ்சியிருக்கும் வரை செயல்முறையை மீண்டும் செய்கிறது.
படிகள்:
- தேடல் வரம்பை துவக்கவும்: வரிசையின் முதல் நிலையிலிருந்து
left
கடைசி நிலை வரையிலான தேடல் வரம்பைத் தேர்ந்தெடுப்பதன் மூலம் தொடங்கவும்.right
- நடுத்தர புள்ளியைக் கண்டறியவும்: நடுத்தர புள்ளியை சராசரி
left
மற்றும் வலது நிலைகளைக் கணக்கிடுங்கள்; இது தேடல் வரம்பின் நடுத்தர புள்ளியாகும். - மதிப்புகளை ஒப்பிடுக: நடுத்தர புள்ளியில் உள்ள மதிப்பை இலக்கு மதிப்புடன் ஒப்பிடுக.
- ஒப்பீட்டு முடிவைக் கையாளவும்: நடுப் புள்ளியில் உள்ள மதிப்பு இலக்கு மதிப்புடன் பொருந்தினால், இந்த நிலையைத் திருப்பி விடுங்கள். நடுத்தர புள்ளியில் உள்ள மதிப்பு இலக்கு மதிப்பை விட குறைவாக இருந்தால், வலது பாதியைத் தேட இடது நிலையை நடு + 1 க்கு புதுப்பிக்கவும். நடுத்தர புள்ளியில் உள்ள மதிப்பு இலக்கு மதிப்பை விட அதிகமாக இருந்தால், இடது பாதியைத் தேட வலது நிலையை நடுத்தர- 1 க்கு புதுப்பிக்கவும்.
- மீண்டும் செய்யவும்: மதிப்பு கண்டறியப்படும் வரை 2 முதல் 4 படிகளை மீண்டும் செய்யவும் அல்லது சரிபார்க்க வேண்டிய உறுப்புகள் எதுவும் இல்லை
left > right
.
நன்மைகள் மற்றும் தீமைகள்
நன்மைகள்:
- திறமையான செயல்திறன்: அல்காரிதத்தின் நேர சிக்கலானது O(log n) ஆகும், இது பெரிய தரவுத்தொகுப்புகளைக் கையாள்வதில் மிகவும் திறமையானது.
- பெரிய தரவுத்தொகுப்புகளுக்கு பயனுள்ளதாக இருக்கும்: பெரிய தரவுத்தொகுப்புகளை விரைவாக ஆய்வு செய்வதற்கான உறுப்புகளின் எண்ணிக்கையைக் குறைப்பதில் பைனரி தேடல் பயனுள்ளதாக இருக்கும்.
தீமைகள்:
- வரிசைப்படுத்தப்பட்ட வரிசைகளுக்கு மட்டுமே பொருந்தும்: அல்காரிதம் வரிசைப்படுத்தப்பட்ட அணிகளில் மட்டுமே வேலை செய்யும்.
- மாறக்கூடிய படிகளின் எண்ணிக்கை: மதிப்பைக் கண்டறிய தேவையான படிகளின் எண்ணிக்கை அணிவரிசையில் அதன் நிலையைப் பொறுத்தது, மேலும் இது முனைகளுக்கு அருகில் உள்ள மதிப்புகளுக்கு பல படிகளை எடுக்கலாம்.
எடுத்துக்காட்டு: PHP இல் வரிசைப்படுத்தப்பட்ட வரிசையில் மதிப்பு 12 ஐக் கண்டறிவதற்கான பைனரி தேடல்
function binarySearch($arr, $target) {
$left = 0;
$right = count($arr)- 1;
while($left <= $right) {
$mid = floor(($left + $right) / 2);
if($arr[$mid] == $target) {
return $mid; // Return the position of the value
} elseif($arr[$mid] < $target) {
$left = $mid + 1;
} else {
$right = $mid- 1;
}
}
return -1; // Value not found
}
$array = [2, 5, 8, 12, 15, 20, 30];
$targetValue = 12;
$result = binarySearch($array, $targetValue);
if($result != -1) {
echo "Value $targetValue found at position $result.";
} else {
echo "Value $targetValue not found in the array.";
}
உதாரணத்தின் விளக்கம்
- வரிசையின் முதல் நிலையிலிருந்து
left = 0
கடைசி நிலை வரையிலான ஆரம்ப தேடல் வரம்பில் தொடங்குகிறோம்.right = 6
- இடது மற்றும் வலது நிலைகளை சராசரியாகக் கொண்டு நடுத்தர புள்ளியை(நடுவில்) கணக்கிடுகிறோம்;
mid = 3
. நடுவில் உள்ள மதிப்பு 12. -
mid(12
) இல் உள்ள மதிப்பை இலக்கு மதிப்புடன்(12) ஒப்பிட்டு, ஒரு பொருத்தத்தைக் கண்டறிகிறோம், எனவே நாம் நிலை 3 ஐத் தருகிறோம். - அல்காரிதம் முடிவடைகிறது, மேலும் "நிலை 3 இல் காணப்படும் மதிப்பு 12" முடிவை வெளியிடுகிறோம்.