நேர சிக்கலானது (Time Complexity)
நேர சிக்கலானது என்பது ஒரு அல்காரிதம் அதன் உள்ளீட்டின் அளவைக் கருத்தில் கொண்டு முடிக்க எடுக்கும் நேரத்தை அளவிடுவதற்கான கணிதக் கணக்கீடாகும் (mathematical calculation). இது ஒரு அல்காரிதம் செய்யும் அடிப்படை செயல்பாடுகளின் எண்ணிக்கையை மதிப்பிடுவதன் மூலம் அதன் செயல்திறனை (efficiency) மதிப்பிட உதவுகிறது. Big O குறியீடு (Big O notation) என்பது நேரச் சிக்கலைக் குறிக்கும் வழிகளில் ஒன்றாகும்.
ஒரு அல்காரிதம் இயங்குவதற்கு எவ்வளவு நேரம் ஆகிறது என்பதைப் பார்த்து அதன் நேரச் சிக்கலை அளவிடுவதை நாம் நினைக்கலாம். எடுத்துக்காட்டாக, ஒரு நிரல் இயங்குவதற்கு 16 நிமிடங்கள் எடுத்தால், அதன் நேர சிக்கல் 16 நிமிடங்கள் என்று நாம் கூறலாம்.
ஆனால் இந்த முறை தவறானது, ஏனெனில் இயங்கும் நேரம் (running time) போன்ற பல்வேறு காரணிகளைப் பொறுத்து மாறுபடலாம்:
- பயன்படுத்தப்படும் சாதனம் (device used)
- நிரலாக்க மொழி (programming language)
- நெட்வொர்க் (network)
- மற்றும் பிற நிபந்தனைகள்
அதனால்தான் கொடுக்கப்பட்ட உள்ளீட்டு அளவிற்கான ஒரு அல்காரிதம் எடுக்கும் படிகளின் (steps) எண்ணிக்கையைக் கணக்கிடுவதன் மூலம் நேர சிக்கலைத் தீர்மானிக்கிறோம். உதாரணமாக,
நேர சிக்கலானது O(n) ஆக இருந்தால்:
- 5 உள்ளீட்டு அளவிற்கு இது 5 படிகள் எடுக்கும்
- 10 உள்ளீட்டு அளவிற்கு இது 10 படிகள் எடுக்கும்
Big O குறியீடு (Big O Notation)
Big Oh (Big O) என்பது ஒரு அல்காரிதத்தின் நேர சிக்கலைக் குறிக்கப் பயன்படுத்தப்படும் ஒரு கணிதக் குறியீடாகும்.
let total = 0;
const n = 100;
// n முறை செயல்படுத்துகிறது (iterate)
for (let i = 1; i <= n; i++) {
total += i;
}
console.log(total);
// வெளியீடு (Output): 5050
குறியீடு (code) இயங்குவதற்கு n படிகள் எடுக்கும். நேர சிக்கலுக்கு வெறும் n ஐப் பயன்படுத்துவதற்குப் பதிலாக, அதைக் குறிக்க O(n) குறிப்பைப் பயன்படுத்துகிறோம்—இது n இன் Big Oh என வாசிக்கப்படுகிறது.
Big O இன் வகைகள் (Types of Big O)
Big O குறியீடுகளின் சில பொதுவான வகைகள் பின்வருமாறு:
- O(log n) - மடக்கை நேர சிக்கலானது (logarithmic time complexity)
- O(n^2) - இருபடி நேர சிக்கலானது (quadratic time complexity)
- O(n) - நேரியல் நேர சிக்கலானது (linear time complexity)
- O(1) - நிலையான நேர சிக்கலானது (constant time complexity)