நேரியல் தேடலுக்கும் பைனரி தேடலுக்கும் உள்ள வேறுபாடு

நூலாசிரியர்: Laura McKinney
உருவாக்கிய தேதி: 1 ஏப்ரல் 2021
புதுப்பிப்பு தேதி: 14 மே 2024
Anonim
நேரியல் தேடலுக்கும் பைனரி தேடலுக்கும் உள்ள வேறுபாடு - தொழில்நுட்பம்
நேரியல் தேடலுக்கும் பைனரி தேடலுக்கும் உள்ள வேறுபாடு - தொழில்நுட்பம்

உள்ளடக்கம்


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

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

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

  1. ஒப்பீட்டு விளக்கப்படம்
  2. வரையறை
  3. முக்கிய வேறுபாடுகள்
  4. முடிவுரை

ஒப்பீட்டு விளக்கப்படம்

ஒப்பிடுவதற்கான அடிப்படைநேரியல் தேடல்பைனரி தேடல்
நேர சிக்கலானதுஇது O (N)ஓ (பதிவு 2 N) என்ற
சிறந்த வழக்கு நேரம்முதல் உறுப்பு ஓ (1)மைய உறுப்பு ஓ (1)
ஒரு வரிசைக்கு முன்நிபந்தனைதேவையில்லைவரிசை வரிசைப்படுத்தப்பட்ட வரிசையில் இருக்க வேண்டும்
உறுப்புகளின் N எண்ணிக்கையின் மோசமான வழக்குN ஒப்பீடுகள் தேவைபதிவுசெய்த பிறகு மட்டுமே முடிக்க முடியும்2N ஒப்பீடுகள்
இல் செயல்படுத்தலாம்வரிசை மற்றும் இணைக்கப்பட்ட பட்டியல்இணைக்கப்பட்ட பட்டியலில் நேரடியாக செயல்படுத்த முடியாது
செயல்பாட்டைச் செருகவும்பட்டியலின் முடிவில் எளிதாக செருகப்படுகிறதுவரிசைப்படுத்தப்பட்ட பட்டியலைப் பராமரிக்க அதன் சரியான இடத்தில் செருக செயலாக்கம் தேவை.
அல்காரிதம் வகைஇயற்கையில் மறுபயன்பாடுஇயற்கையில் பிரித்து வெல்லுங்கள்
பயனைபயன்படுத்த எளிதானது மற்றும் எந்த ஆர்டர் செய்யப்பட்ட கூறுகளும் தேவையில்லை.எப்படியும் தந்திரமான வழிமுறை மற்றும் கூறுகள் ஒழுங்காக ஒழுங்கமைக்கப்பட வேண்டும்.
குறியீட்டின் கோடுகள்குறைவானமேலும்


நேரியல் தேடலின் வரையறை

ஒரு நேரியல் தேடலில், ஒரு வரிசையின் ஒவ்வொரு உறுப்புகளும் ஒவ்வொன்றாக ஒரு தர்க்கரீதியான வரிசையில் மீட்டெடுக்கப்பட்டு, அது விரும்பிய உறுப்பு இல்லையா என்பதை சரிபார்க்கிறது. எல்லா உறுப்புகளையும் அணுகினால் தேடல் தோல்வியடையும், விரும்பிய உறுப்பு கிடைக்கவில்லை. மோசமான நிலையில், ஒரு சராசரி வழக்கின் எண்ணிக்கை நாம் வரிசையின் அளவின் பாதியை (n / 2) ஸ்கேன் செய்ய வேண்டியிருக்கும்.

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

திறன் நேரியல் தேடலின்

ஒரு தேடல் அட்டவணையில் ஒரு பதிவைத் தேடுவதில் நேர நுகர்வு அல்லது ஒப்பீடுகளின் எண்ணிக்கை நுட்பத்தின் செயல்திறனை தீர்மானிக்கிறது. தேடல் அட்டவணையின் முதல் நிலையில் விரும்பிய பதிவு இருந்தால், ஒரே ஒரு ஒப்பீடு மட்டுமே செய்யப்படுகிறது. விரும்பிய பதிவு கடைசியாக இருக்கும்போது, ​​n ஒப்பீடுகள் செய்யப்பட வேண்டும். தேடல் அட்டவணையில் எங்காவது பதிவு செய்ய வேண்டுமென்றால், சராசரியாக, ஒப்பீடுகளின் எண்ணிக்கை (n + 1/2). இந்த நுட்பத்தின் மோசமான நிலை செயல்திறன் ஓ (என்) என்பது மரணதண்டனை வரிசையை குறிக்கிறது.


சி திட்டம் நேரியல் தேடல் நுட்பத்துடன் ஒரு உறுப்பைத் தேட.

#சேர்க்கிறது #சேர்க்கிறது void main () {int a, n, i, உருப்படி, loc = -1; clrscr (); f ("element n உறுப்பு எண்ணிக்கையை உள்ளிடுக:"); scanf ("% d", & n); f ("எண்களை உள்ளிடுக: n"); (i = 0; i <= n-1; i ++) {scanf ("% d", & a); } f (" n தேட வேண்டிய எண்ணை உள்ளிடுக:"); scanf ("% d", & உருப்படி); (i = 0; i <= n-1; i ++) {if (உருப்படி == a) {loc = i; உடைக்க; }} if (loc> = 0) {f ("% n% d% d நிலையில் காணப்படுகிறது:", உருப்படி, இடம் + 1); } else {f ("item n பொருள் இல்லை"); } getch (); }

பைனரி தேடலின் வரையறை

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

இந்த நுட்பத்தின் பின்னால் உள்ள தர்க்கம் கீழே கொடுக்கப்பட்டுள்ளது:

  • முதலில், வரிசையின் நடுத்தர உறுப்பைக் கண்டறியவும்.
  • வரிசையின் நடுத்தர உறுப்பு தேடப்பட வேண்டிய உறுப்புடன் ஒப்பிடப்படுகிறது.

மூன்று வழக்குகள் எழக்கூடும்:

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

ஒரு உறுப்பு கண்டுபிடிக்கும் வரை அல்லது தேடல் பகுதியில் வெளியேறும் வரை அதே படிகளை மீண்டும் செய்யவும். இந்த வழிமுறையில், ஒவ்வொரு முறையும் தேடல் பகுதி குறைகிறது. எனவே ஒப்பீடுகளின் எண்ணிக்கை அதிகபட்சமாக (N + 1) உள்ளது. இதன் விளைவாக, நேரியல் தேடலுடன் ஒப்பிடும்போது இது ஒரு திறமையான வழிமுறையாகும், ஆனால் பைனரி தேடலைச் செய்வதற்கு முன் வரிசை வரிசைப்படுத்தப்பட வேண்டும்.

சி திட்டம் பைனரி தேடல் நுட்பத்துடன் ஒரு உறுப்பைக் கண்டுபிடிக்க.

#சேர்க்கிறது void main () {int i, பிச்சை, முடிவு, நடுத்தர, n, தேடல், வரிசை; f ("உறுப்பு எண்ணை உள்ளிடுக n"); போவது ( "% ஈ", & N); f ("% d எண்களை உள்ளிடுக n", n); for (i = 0; i <n; i ++) scanf ("% d", & array); f ("தேட வேண்டிய எண்ணை உள்ளிடவும் n"); scanf ("% d", & தேடல்); பிச்சை = 0; end = n - 1; நடுத்தர = (பிச்சை + முடிவு) / 2; போது (பிச்சை <= முடிவு) {if (வரிசை <தேடல்) பிச்சை = நடுத்தர + 1; else if (வரிசை == தேடல்) {f ("தேடல் வெற்றிகரமாக உள்ளது.% n% d இடம்% d இல் காணப்படுகிறது. n", தேடல், நடுத்தர + 1); உடைக்க; } else end = நடுத்தர - ​​1; நடுத்தர = (பிச்சை + முடிவு) / 2; } if (பிச்சை> முடிவு) f ("தேடல் தோல்வியுற்றது!% d பட்டியலில் இல்லை. n", தேடல்); getch (); }

  1. நேரியல் தேடல் இயற்கையில் மீண்டும் செயல்படுகிறது மற்றும் தொடர்ச்சியான அணுகுமுறையைப் பயன்படுத்துகிறது. மறுபுறம், பைனரி தேடல் பிளவு மற்றும் அணுகுமுறையை வெல்லும்.
  2. நேரியல் தேடலின் நேர சிக்கலானது O (N), பைனரி தேடலில் O (பதிவு) உள்ளது2N) என்ற.
  3. நேரியல் தேடலில் சிறந்த நேரம் முதல் உறுப்புக்கு அதாவது ஓ (1). எதிராக, பைனரி தேடலில், இது நடுத்தர உறுப்புக்கானது, அதாவது, ஓ (1).
  4. நேரியல் தேடலில், ஒரு உறுப்பைத் தேடுவதற்கான மோசமான நிலை ஒப்பீட்டு எண். இதற்கு மாறாக, இது பதிவு2பைனரி தேடலுக்கான ஒப்பீட்டு எண்.
  5. நேரியல் தேடலை ஒரு வரிசை மற்றும் இணைக்கப்பட்ட பட்டியலில் செயல்படுத்த முடியும், அதே சமயம் பைனரி தேடலை இணைக்கப்பட்ட பட்டியலில் நேரடியாக செயல்படுத்த முடியாது.
  6. பைனரி தேடலுக்கு வரிசைப்படுத்தப்பட்ட வரிசை தேவைப்படுகிறது என்பது எங்களுக்குத் தெரியும், இது ஒரு வரிசைப்படுத்தப்பட்ட பட்டியலைப் பராமரிக்க அதன் சரியான இடத்தில் செருகுவதற்கு செயலாக்கம் தேவைப்படுகிறது. மாறாக நேரியல் தேடலுக்கு வரிசைப்படுத்தப்பட்ட கூறுகள் தேவையில்லை, எனவே கூறுகள் பட்டியலின் முடிவில் எளிதாக செருகப்படுகின்றன.
  7. நேரியல் தேடல் பயன்படுத்த எளிதானது, மேலும் எந்த ஆர்டர் செய்யப்பட்ட கூறுகளும் தேவையில்லை. மறுபுறம், பைனரி தேடல் வழிமுறை தந்திரமானது, மேலும் கூறுகள் ஒழுங்காக ஒழுங்கமைக்கப்பட்டுள்ளன.

முடிவுரை

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

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