# இருமத் தேடல் அல்கோரிதம்


கணினி அறிவியலில், **இருமத் தேடல்**, அல்லது **அரை-இடைவெளித் தேடல்**, **மடக்கைத் தேடல்**, அல்லது **இருமத் தறித்தல்**, என்பது ஒரு தேடல் அலகோரிதம் அல்லது தேடல் படிமுறைத் தீர்வாகும். இது குறிப்பிட்ட தேர்ந்தெடுத்த அணிக்குள் இலக்கு மதிப்பு இருப்பிட்த்தைக் கண்டுபிடித்தலாகும். இருமத் தேடல் இலக்கு மதிப்பை அணியின் நடு உறுப்போடு ஒப்பிடுகிறது; அவை சமமாக அமையாவிட்டால், இலக்கு மதிப்பு அமையமுடியாத அரைப்பகுதி நீக்கப்படும்; தேடல் எஞ்சிய அரைப்ப்பகுதியில் வெற்றி கிடைக்கும் வரை தொடரும். எஞ்சிய அரைப்பகுதியில் வெற்றாகத் தேடல் முடிவுற்றால், அந்த அணிக்குள் இலக்கு மதிப்பு இல்லை என்று பொருள்.  

இருமத் தேடல் அரிய மடக்கை நேரத்தில், இன் ஒப்பீடுகளைச் செய்து செயல்படுகிறது. இங்கு, என்பது அணியில் அமையும் உறுப்புகளின் எண்ணிக்கை ஆகும்; என்பது பேரெழுத்து O சார்ந்த குறிமானம் ஆகும் ; என்பது மடக்கையாகும். இருமத் தேடல் நிலையான வெளியை எடுத்துக் கொள்கிறது; இதன் பொருள், அணியில் உள்ள உறுப்புகளின் எண்ணிக்கை மாறுபட்டாலும் அல்கோரிதத்தில் அதற்காக அமையும் வெளி ஒரே அளவாகவே அமையும் என்பதாகும். விரைவுப் பட்டியல் போன்ற விரைவாகத் தேடும் சிறப்புத் தரவுக் கட்டமைப்புகள் இருந்தாலும், இருமத் தேடல் அகல்நெடுக்கமான பல பயன்பாட்டுச் சிக்கல்களுக்கு ஏற்றதானதாக உள்ளது.  

இந்த எண்ணக்கரு எளியதாகத் தோன்றினாலும், சரியாக இருமத் தேடலை நடைமுறைப்படுத்த, அவற்றின் நடுப்புள்ளியைக் கணக்கிடுவதிலும் கணிப்பு முடித்து வெளியேறும் நிலைமைகளிலும் நிலவும் சில நுட்பங்களில் கவனம் செலுத்த வேண்டிய தேவைகள் உள்ளன.  

இருமத் தேடலில் பல வேறுபாடுள்ள முறைகள் உள்ளன. குறிப்பாக பகுதி ஓடையாக்க முறை, ஒரே இலக்கு மதிப்புக்கு பல அணிகளில் தேடுவதால் இருமத் தேடல்களின் வேகத்தைக் கூட்டுகிறது; கணிப்பு வடிவவியலிலும் எண்ணற்ற பிற புலங்களிலும் உள்ள தேடல் சிக்கலகளுக்குத் திறமையான தீர்வுகளை காண்கிறது. படியேற்ற முறைத் தேடல் இருமத் தேடலை வரம்பற்ர பட்டியல்களுக்கு விரிவாக்குகிறது. இருமத் தேடல் தருவும் B-தருவும் சார்ந்த தரவுக் கட்டமைப்புகள் இருமத் ஹ்டேடலைச் சார்ந்தவையே.  

## படிமுறைத் தீர்வு (அல்கோரிதம்)

இருமத் தேடல் வரிசையான உறுப்புகள் அமைந்த அணிகளில் வேலை செய்கிறது. இலக்கு மதிப்பை அணியின் நடு உறுப்புடன் ஒப்பிடுவதன் வாயிலாக தன் தேடலை இருமத் தேடல் தொடங்குகிறது. இலக்கு மதிப்பும் நடு உறுப்பு மதிப்பும் ஒன்றினால் அணியின் இருப்பு தீர்மானமாகித் தேடல் முடிவடைகிறது. நடுவுறுப்பின் மதிப்புக்கு இலக்கு மதிப்பு குறைவாகவோ கூடுதலாகவோ இருந்தால், தேடல் முறையே அணியின் கீழ் அல்லது மேல் அரைப்பகுதியில், மற்ற அரைப்பகுதியைத் தவிர்த்துவிட்டு, தேடலைத் தொடர்கிறது .  

### வழிமுறை
*A*<sub>0</sub> ≤ *A*<sub>1</sub> ≤ ... ≤ *A*<sub>*n*−1</sub> என்ற முறையில் வரிசை படுத்தப்பட்ட, *A*<sub>0</sub>, *A*<sub>1</sub>, ..., *A*<sub>*n*−1</sub> எனும் உறுப்பு மதிப்புகளை/பதிவுகளைக் கொண்ட *n* உறுப்புகள் அமைந்த *A* அணியைக் கருதுவோம். தேடும் இலக்கு மதிப்பு *T* எனில், பின்வரும் இயல்நிரல் *A* அணியில் அமைந்த *T* சுட்டியைக் கண்டுபிடிக்கும் இருமத் தேடலை நிகழ்த்துகிறது.  

1. *L* மதிப்பு 0 எனில், மேலும் *R* மதிப்பு *n* எனில், &minus; 1.
1. *L* மதிப்பு > *R* எனில், தேடல் தோல்வியில் முடிகிறது.
1. *m* (நடு உறுப்பின் இருப்பு) மதிப்பை (*L* + *R*) / 2 எனும் தரை மதிப்பாகக் ( முந்தைய மிகப் பெரிய எண்) கொள்க.
1. *A*<sub>*m*</sub> < *T* எனில், *L* மதிப்பை *m* + 1 ஆகக் கொண்டு இரண்டாம் படிநிலைக்குச் செல்க.
1. *A*<sub>*m*</sub> > *T* எனில், *R* மதிப்பை *m* &minus; 1 ஆகக் கொண்டு இரண்டாம் படிநிலைக்குச் செல்க.
1. இப்போது *A*<sub>*m*</sub> = *T* எனில், தேடல் முடிந்தது; *m* மதிப்புக்கு மீள்க.

இந்த திருபத் திரும்ப பலமுறை செய்யும் வழிமுறை (பன்னிச் செயல்முறை-iteration) இரு மாறிகளின் தேடல் வரம்புகளைக் கண்காணித்துக் கொள்கிறது.  

## நூலக உதவி
பல நிரலாக்க மொழிக்கான செந்தர நூலகங்களில் இருமத் தேடல் அல்கோரித இயல்நிரல்கள் உள்ளன:  
- C நிரலாக்க மொழி, இதற்கான சார்பைத் (இயல்நிரலைத்) <code>bsearch</code> எனும் தனது C செந்தர நூலகத்தில் தருகிறது. இந்நிரல் இருமத் தேடல் வழியிலேயே நடைமுறைப்படுத்தப்படுகிறது. என்றாலும் அதன் அலுவல்முறைப் பதிப்பில் இது வேண்டப்படுவதில்லை.
- C++ மொழியின் செந்தர வார்ப்புரு நூலகமும் <code>இருமத் தேடல்</code> சார்ந்த <code>கீழ் வரம்பு</code>, <code>மேல் வரம்பு</code>, <code>சம நெடுக்கம்</code> ஆகிய சார்புகளைத் தருகிறது.
- கோபால்(COBOL) மொழி, கோபால் வரிசை அட்டவணைகளில் இருமத் தேடலை நிகழ்த்துவதற்கான<code>தேடு அனைத்தும்</code> எனும் வினையைத் தருகிறது.
- ஜாவா நிரலாக்க மொழி, ஜாவா அணிகளிலும் பட்டியல்களிலும் இருமத் தேடலை நிகழ்த்தும் மிகைச்சுமையுள்ள <code>இருமத் தேடல்</code> சார்ந்த நிலையியல் முறைகளின் கணத்தை , ஆகிய வகைகளில் தனது செந்தர <code>java.util</code> தொகுப்பில் தருகிறது.
- மைக்ரோசாப்டின் .NET Framework 2.0 பதிப்பு இருமத் தேடல் அல்கோரித வகைகளைத் தனது அடிப்படைத் திரட்டு வகைகளாகத் தருகிறது. எடுத்துகாட்டு: <code>System.Array</code> எனும் முறை, <code>இருமத் தேடல்<T>(T[] அணி, T மதிப்பு)</code>.
- பைத்தான் நிரலாக்க மொழி <code>இருமப்பகுப்பு</code> எனும் முறையை இருமத் தேடலுக்காகத் தருகிறது.
- உரூபி நிரலாக்க மொழியின் அணி வகுப்பு <code>bsearch</code> எனும் முறையை உள்கட்டமைப்பாகவும் தோராய இணைசேர்ப்பாகவும் உள்ளடக்கியுள்ளது.

- Go நிரலாக்க மொழியின் <code>sort</code> எனும் செந்தர நூலகத் தொகுப்பு <code>Search</code>, <code>SearchInts</code>, <code>SearchFloat64s</code>, and <code>SearchStrings</code>,ஆகிய பொது இருமத் தேடல் முறையையும் முழு எண்களின் பிரிவுகளையும் தெப்பப் புள்ளி எண்களையும் சரங்களையும் தேடும் குறிப்பிட்ட நடைமுறைகளையும் கொண்டுள்ளது.

- Objective-C மொழியில் கக்கோவா (Cocoa) சட்டகம் the <code>NSArray -indexOfObject:inSortedRange:options:usingComparator:</code> எனும் இருமத் தேடல் முறையை Mac OS X 10.6+ இல் தருகிறது. ஆப்பிளின் Core Foundation C மொழியின் சட்டகமும் கூட <code>CFArrayBSearchValues</code> எனும் இருமத் தேடல் சார்பைப் பெற்றுள்ளது.

## குறிப்புகளும் மேற்கோள்களும்

=