தமிழ்

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

பிக் ஓ குறியீடு: அல்காரிதம் சிக்கல் பகுப்பாய்வு

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

பிக் ஓ குறியீடு என்றால் என்ன?

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

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

பிக் ஓ குறியீடு ஏன் முக்கியமானது?

பிக் ஓ குறியீட்டைப் புரிந்துகொள்வது பல காரணங்களுக்காக இன்றியமையாதது:

பொதுவான பிக் ஓ குறியீடுகள்

நேரச் சிக்கலின் அடிப்படையில், சிறந்த செயல்திறனிலிருந்து மோசமான செயல்திறன் வரை வரிசைப்படுத்தப்பட்ட சில பொதுவான பிக் ஓ குறியீடுகள் இங்கே:

பிக் ஓ குறியீடு ஆதிக்கம் செலுத்தும் உறுப்பில் கவனம் செலுத்துகிறது என்பதை நினைவில் கொள்வது அவசியம். குறைந்த வரிசை சொற்கள் மற்றும் மாறிலி காரணிகள் புறக்கணிக்கப்படுகின்றன, ஏனெனில் உள்ளீட்டு அளவு மிக பெரியதாக வளரும்போது அவை முக்கியமற்றதாகிவிடும்.

நேரச் சிக்கல் மற்றும் இடச் சிக்கலைப் புரிந்துகொள்ளுதல்

பிக் ஓ குறியீட்டை நேரச் சிக்கல் மற்றும் இடச் சிக்கல் ஆகிய இரண்டையும் பகுப்பாய்வு செய்ய பயன்படுத்தலாம்.

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

அல்காரிதம் சிக்கல் பகுப்பாய்வு: எடுத்துக்காட்டுகள்

பிக் ஓ குறியீட்டைப் பயன்படுத்தி அல்காரிதம் சிக்கலை எவ்வாறு பகுப்பாய்வு செய்வது என்பதை விளக்க சில எடுத்துக்காட்டுகளைப் பார்ப்போம்.

எடுத்துக்காட்டு 1: நேரியல் தேடல் (O(n))

வரிசைப்படுத்தப்படாத ஒரு வரிசையில் ஒரு குறிப்பிட்ட மதிப்பைக் தேடும் ஒரு செயல்பாட்டைக் கவனியுங்கள்:


function linearSearch(array, target) {
  for (let i = 0; i < array.length; i++) {
    if (array[i] === target) {
      return i; // இலக்கு கிடைத்தது
    }
  }
  return -1; // இலக்கு கிடைக்கவில்லை
}

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

எடுத்துக்காட்டு 2: பைனரி தேடல் (O(log n))

இப்போது, பைனரி தேடலைப் பயன்படுத்தி வரிசைப்படுத்தப்பட்ட ஒரு வரிசையில் ஒரு மதிப்பைக் தேடும் ஒரு செயல்பாட்டைக் கவனியுங்கள்:


function binarySearch(array, target) {
  let low = 0;
  let high = array.length - 1;

  while (low <= high) {
    let mid = Math.floor((low + high) / 2);

    if (array[mid] === target) {
      return mid; // இலக்கு கிடைத்தது
    } else if (array[mid] < target) {
      low = mid + 1; // வலது பாதியில் தேடவும்
    } else {
      high = mid - 1; // இடது பாதியில் தேடவும்
    }
  }

  return -1; // இலக்கு கிடைக்கவில்லை
}

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

எடுத்துக்காட்டு 3: நெஸ்டட் லூப்கள் (O(n2))

ஒரு வரிசையில் உள்ள ஒவ்வொரு உறுப்பையும் மற்ற எல்லா உறுப்புகளுடன் ஒப்பிடும் ஒரு செயல்பாட்டைக் கவனியுங்கள்:


function compareAll(array) {
  for (let i = 0; i < array.length; i++) {
    for (let j = 0; j < array.length; j++) {
      if (i !== j) {
        // array[i] மற்றும் array[j] ஐ ஒப்பிடவும்
        console.log(`Comparing ${array[i]} and ${array[j]}`);
      }
    }
  }
}

இந்தச் செயல்பாட்டில் நெஸ்டட் லூப்கள் உள்ளன, ஒவ்வொன்றும் n உறுப்புகள் வழியாக மீண்டும் மீண்டும் செல்கின்றன. எனவே, மொத்த செயல்பாடுகளின் எண்ணிக்கை n * n = n2 க்கு விகிதாசாரமாகும். நேரச் சிக்கல் O(n2) ஆகும். இதன் ஒரு எடுத்துக்காட்டு, ஒரு தரவுத்தொகுப்பில் நகல் உள்ளீடுகளைக் கண்டறியும் ஒரு அல்காரிதமாக இருக்கலாம், அங்கு ஒவ்வொரு உள்ளீடும் மற்ற எல்லா உள்ளீடுகளுடன் ஒப்பிடப்பட வேண்டும். இரண்டு for லூப்கள் இருப்பது இயல்பாகவே அது O(n^2) என்று அர்த்தமல்ல என்பதை உணர்ந்து கொள்வது முக்கியம். லூப்கள் ஒன்றுக்கொன்று சுயாதீனமாக இருந்தால், அது O(n+m) ஆகும், இங்கு n மற்றும் m ஆகியவை லூப்களுக்கான உள்ளீடுகளின் அளவுகள்.

எடுத்துக்காட்டு 4: மாறிலி நேரம் (O(1))

ஒரு வரிசையில் உள்ள ஒரு உறுப்பை அதன் குறியீட்டெண் மூலம் அணுகும் ஒரு செயல்பாட்டைக் கவனியுங்கள்:


function accessElement(array, index) {
  return array[index];
}

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

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

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

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

உங்கள் அல்காரிதம்களின் சிக்கலை மேம்படுத்துவதற்கான சில நடைமுறை உதவிக்குறிப்புகள் இங்கே:

பிக் ஓ குறியீடு ஏமாற்றுத் தாள்

பொதுவான தரவு கட்டமைப்பு செயல்பாடுகள் மற்றும் அவற்றின் வழக்கமான பிக் ஓ சிக்கல்களுக்கான விரைவான குறிப்பு அட்டவணை இங்கே:

தரவு கட்டமைப்பு செயல்பாடு சராசரி நேரச் சிக்கல் மோசமான நேரச் சிக்கல்
வரிசை அணுகல் O(1) O(1)
வரிசை முடிவில் செருகு O(1) O(1) (அமார்டைஸ்டு)
வரிசை ஆரம்பத்தில் செருகு O(n) O(n)
வரிசை தேடல் O(n) O(n)
இணைக்கப்பட்ட பட்டியல் அணுகல் O(n) O(n)
இணைக்கப்பட்ட பட்டியல் ஆரம்பத்தில் செருகு O(1) O(1)
இணைக்கப்பட்ட பட்டியல் தேடல் O(n) O(n)
ஹாஷ் அட்டவணை செருகு O(1) O(n)
ஹாஷ் அட்டவணை தேடல் O(1) O(n)
பைனரி தேடல் மரம் (சமச்சீரானது) செருகு O(log n) O(log n)
பைனரி தேடல் மரம் (சமச்சீரானது) தேடல் O(log n) O(log n)
ஹீப் செருகு O(log n) O(log n)
ஹீப் சிறிய/பெரியதை பிரித்தெடு O(1) O(1)

பிக் ஓவுக்கு அப்பால்: பிற செயல்திறன் பரிசீலனைகள்

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

முடிவுரை

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

பிக் ஓ குறியீடு: உலகளாவிய டெவலப்பர்களுக்கான அல்காரிதம் சிக்கல் பகுப்பாய்வு | MLOG