Big O notation
- பெரிய ஓ குறியீடு: ஆரம்பநிலைக்கான ஒரு வழிகாட்டி
பெரிய ஓ குறியீடு (Big O notation) என்பது கணினி அறிவியல் துறையில் அல்காரிதம்களின் செயல்திறனை விவரிக்கப் பயன்படும் ஒரு கணிதக் குறியீடு ஆகும். ஒரு அல்காரிதம் எவ்வளவு நேரம் மற்றும் இடம் (space) எடுத்துக்கொள்ளும் என்பதை இது குறிக்கிறது. குறிப்பாக, உள்ளீட்டின் அளவு அதிகரிக்கும் போது அல்காரிதமின் செயல்திறன் எவ்வாறு மாறும் என்பதைப் புரிந்து கொள்ள இது உதவுகிறது. கிரிப்டோகரன்சி மற்றும் பிளாக்செயின் தொழில்நுட்பம் போன்ற அதிநவீன தொழில்நுட்பங்களில், செயல்திறன் மிக்க அல்காரிதம்களை உருவாக்குவது மிக முக்கியம். ஏனெனில், இவை அதிக அளவிலான தரவுகளைக் கையாளுகின்றன. இந்த கட்டுரையில், பெரிய ஓ குறியீட்டின் அடிப்படைக் கருத்துகளைப் பற்றி விரிவாகப் பார்ப்போம்.
- பெரிய ஓ குறியீட்டின் அவசியம்
ஒரு நிரலை (program) எழுதும்போது, பல வழிகளில் அதைச் செய்ய முடியும். ஒவ்வொரு வழியும் வெவ்வேறு அளவு நேரம் மற்றும் நினைவகத்தைப் பயன்படுத்தும். ஒரு குறிப்பிட்ட உள்ளீட்டுக்கு, ஒரு வழி மற்றொன்றை விட வேகமாக இருக்கலாம். ஆனால், உள்ளீட்டின் அளவு அதிகரிக்கும்போது, எந்த வழி மிகவும் திறமையானது என்பதை அறிவது அவசியம். இதற்குத்தான் பெரிய ஓ குறியீடு உதவுகிறது.
உதாரணமாக, ஒரு பெரிய தரவுத்தொகுப்பு (dataset)-ல் குறிப்பிட்ட ஒரு தகவலைத் தேட வேண்டும் என்று வைத்துக்கொள்வோம். நேரியல் தேடல் (linear search) மற்றும் பைனரி தேடல் (binary search) ஆகிய இரண்டு முறைகள் உள்ளன.
- **நேரியல் தேடல்:** தரவுத்தொகுப்பின் ஒவ்வொரு உறுப்பாகச் சென்று தேடும்.
- **பைனரி தேடல்:** தரவுத்தொகுப்பை பாதியாகப் பிரித்து, தேடும் உறுப்பு எந்தப் பகுதியில் உள்ளது என்பதைத் தீர்மானித்து, அந்தப் பகுதியில் மட்டும் தேடும்.
சிறிய தரவுத்தொகுப்புகளுக்கு, இரண்டு முறைகளும் ஏறக்குறைய ஒரே மாதிரியான நேரத்தை எடுத்துக்கொள்ளும். ஆனால், தரவுத்தொகுப்பின் அளவு அதிகரிக்கும்போது, பைனரி தேடல் மிகவும் வேகமாக இருக்கும். இந்த வித்தியாசத்தை விளக்குவதற்குப் பெரிய ஓ குறியீடு பயன்படுகிறது.
- பெரிய ஓ குறியீட்டின் அடிப்படைக் கருத்துகள்
பெரிய ஓ குறியீடு, அல்காரிதமின் வளர்ச்சி விகிதத்தை (growth rate) விவரிக்கிறது. இது அல்காரிதமின் சரியான இயக்க நேரத்தை அல்ல, மாறாக உள்ளீட்டின் அளவு அதிகரிக்கும்போது இயக்க நேரம் எவ்வாறு அதிகரிக்கும் என்பதை மட்டுமே குறிக்கிறது.
பின்வரும் அட்டவணை சில பொதுவான பெரிய ஓ குறியீடுகளை அவற்றின் வளர்ச்சி விகிதத்துடன் காட்டுகிறது:
குறியீடு | வளர்ச்சி விகிதம் | விளக்கம் |
O(1) | மாறிலி (Constant) | உள்ளீட்டின் அளவைப் பொருட்படுத்தாமல் இயக்க நேரம் மாறாமல் இருக்கும். |
O(log n) | மடக்கை (Logarithmic) | உள்ளீட்டின் அளவு அதிகரிக்கும்போது இயக்க நேரம் மெதுவாக அதிகரிக்கும். |
O(n) | நேரியல் (Linear) | உள்ளீட்டின் அளவு அதிகரிக்கும்போது இயக்க நேரம் நேராக அதிகரிக்கும். |
O(n log n) | நேரியல் மடக்கை (Linear Logarithmic) | உள்ளீட்டின் அளவு அதிகரிக்கும்போது இயக்க நேரம் கொஞ்சம் வேகமாக அதிகரிக்கும். |
O(n^2) | இருபடி (Quadratic) | உள்ளீட்டின் அளவு அதிகரிக்கும்போது இயக்க நேரம் மிக வேகமாக அதிகரிக்கும். |
O(2^n) | அடுக்குக்குறி (Exponential) | உள்ளீட்டின் அளவு அதிகரிக்கும்போது இயக்க நேரம் அதிவேகமாக அதிகரிக்கும். |
O(n!) | காரணியம் (Factorial) | உள்ளீட்டின் அளவு அதிகரிக்கும்போது இயக்க நேரம் மிகவும் அதிவேகமாக அதிகரிக்கும். |
- **O(1) - மாறிலி நேரம் (Constant Time):** ஒரு அல்காரிதம் உள்ளீட்டின் அளவைப் பொருட்படுத்தாமல் ஒரே மாதிரியான நேரத்தில் முடிவடையும். எடுத்துக்காட்டாக, ஒரு அணியில் (array) உள்ள முதல் உறுப்பை அணுகுவது.
- **O(log n) - மடக்கை நேரம் (Logarithmic Time):** உள்ளீட்டின் அளவு அதிகரிக்கும்போது, அல்காரிதமின் இயக்க நேரம் மெதுவாக அதிகரிக்கும். பைனரி தேடல் இதற்கு ஒரு சிறந்த உதாரணம்.
- **O(n) - நேரியல் நேரம் (Linear Time):** உள்ளீட்டின் அளவு அதிகரிக்கும்போது, அல்காரிதமின் இயக்க நேரம் நேராக அதிகரிக்கும். ஒரு அணியில் உள்ள ஒவ்வொரு உறுப்பையும் பார்வையிடுவது இதற்கு ஒரு உதாரணம்.
- **O(n log n) - நேரியல் மடக்கை நேரம் (Linear Logarithmic Time):** இது பொதுவாக திறமையான வரிசைப்படுத்தும் அல்காரிதம்களில் (sorting algorithms) காணப்படுகிறது, எ.கா., மெர்ஜ் சார்ட் (merge sort) மற்றும் குயிக் சார்ட் (quick sort).
- **O(n^2) - இருபடி நேரம் (Quadratic Time):** உள்ளீட்டின் அளவு அதிகரிக்கும்போது, அல்காரிதமின் இயக்க நேரம் மிக வேகமாக அதிகரிக்கும். இரண்டு சுழல்களைப் (loops) பயன்படுத்தும் அல்காரிதம்கள் இந்த வகையைச் சேர்ந்தவை. எடுத்துக்காட்டாக, பபிள் சார்ட் (bubble sort).
- **O(2^n) - அடுக்குக்குறி நேரம் (Exponential Time):** உள்ளீட்டின் அளவு அதிகரிக்கும்போது, அல்காரிதமின் இயக்க நேரம் அதிவேகமாக அதிகரிக்கும். இது பொதுவாக சிக்கலான சிக்கல்களைத் தீர்க்கும் அல்காரிதம்களில் காணப்படுகிறது.
- **O(n!) - காரணியம் நேரம் (Factorial Time):** இது மிகவும் மோசமான செயல்திறன் கொண்ட அல்காரிதம். உள்ளீட்டின் அளவு சிறியதாக இருக்கும்போது மட்டுமே இதைப் பயன்படுத்த முடியும்.
- பெரிய ஓ குறியீட்டை எவ்வாறு கணக்கிடுவது?
பெரிய ஓ குறியீட்டை கணக்கிட, அல்காரிதமின் அடிப்படை செயல்பாடுகளை அடையாளம் காண வேண்டும். அடிப்படை செயல்பாடு என்பது அல்காரிதமில் அதிக முறை நிகழும் செயல்பாடு ஆகும். பின்னர், அந்த செயல்பாடுகள் எத்தனை முறை நிகழ்கின்றன என்பதை எண்ண வேண்டும்.
உதாரணமாக, பின்வரும் நிரலைக் கவனியுங்கள்:
``` for (int i = 0; i < n; i++) {
System.out.println(i);
} ```
இந்த நிரலில், `System.out.println(i)` என்ற அடிப்படை செயல்பாடு `n` முறை நிகழ்கிறது. எனவே, இந்த நிரலின் பெரிய ஓ குறியீடு O(n) ஆகும்.
மற்றொரு உதாரணம்:
``` for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) { System.out.println(i + j); }
} ```
இந்த நிரலில், `System.out.println(i + j)` என்ற அடிப்படை செயல்பாடு `n * n = n^2` முறை நிகழ்கிறது. எனவே, இந்த நிரலின் பெரிய ஓ குறியீடு O(n^2) ஆகும்.
- கிரிப்டோகரன்சி மற்றும் பிளாக்செயினில் பெரிய ஓ குறியீட்டின் பங்கு
கிரிப்டோகரன்சி மற்றும் பிளாக்செயின் தொழில்நுட்பம் போன்ற துறைகளில், பெரிய ஓ குறியீடு மிகவும் முக்கியமானது. உதாரணமாக, பிட்காயின் (Bitcoin) போன்ற கிரிப்டோகரன்சிகளில் பரிவர்த்தனைகளைச் சரிபார்க்கப் பயன்படும் அல்காரிதம்கள் திறமையானதாக இருக்க வேண்டும். பரிவர்த்தனைகளின் எண்ணிக்கை அதிகரிக்கும்போது, அல்காரிதமின் இயக்க நேரம் அதிகமாக இருந்தால், அது பிளாக்செயினின் செயல்திறனைப் பாதிக்கும்.
- **பிளாக்செயின் கன்சென்சஸ் அல்காரிதம்கள் (Blockchain Consensus Algorithms):** Proof of Work (PoW) மற்றும் Proof of Stake (PoS) போன்ற கன்சென்சஸ் அல்காரிதம்களின் செயல்திறனைப் புரிந்து கொள்ள பெரிய ஓ குறியீடு உதவுகிறது. PoW அல்காரிதம்கள் பொதுவாக அதிக கணக்கீட்டுச் செலவைக் கொண்டவை (O(n^2) அல்லது அதற்கும் அதிகம்), அதே நேரத்தில் PoS அல்காரிதம்கள் அதிக செயல்திறன் கொண்டவை (O(n log n) அல்லது அதற்கும் குறைவு).
- **கிரிப்டோகிராஃபிக் ஹாஷிங் (Cryptographic Hashing):** SHA-256 மற்றும் Keccak-256 போன்ற ஹாஷிங் அல்காரிதம்கள் O(n) நேரத்தில் செயல்படுகின்றன.
- **டிஜிட்டல் கையொப்பங்கள் (Digital Signatures):** ECDSA போன்ற டிஜிட்டல் கையொப்ப அல்காரிதம்களின் செயல்திறன் கிரிப்டோகரன்சி பரிவர்த்தனைகளின் வேகத்தை பாதிக்கிறது.
- பெரிய ஓ குறியீட்டின் வரம்புகள்
பெரிய ஓ குறியீடு ஒரு பயனுள்ள கருவியாக இருந்தாலும், அது சில வரம்புகளைக் கொண்டுள்ளது.
- இது அல்காரிதமின் சரியான இயக்க நேரத்தை வழங்காது. மாறாக, உள்ளீட்டின் அளவு அதிகரிக்கும்போது இயக்க நேரம் எவ்வாறு அதிகரிக்கும் என்பதை மட்டுமே குறிக்கிறது.
- இது நிலையான காரணிகளைப் (constant factors) புறக்கணிக்கிறது. சில நேரங்களில், நிலையான காரணிகள் அல்காரிதமின் செயல்திறனில் குறிப்பிடத்தக்க தாக்கத்தை ஏற்படுத்தலாம்.
- இது அல்காரிதமின் செயல்திறனைப் பற்றிய முழுமையான படத்தைக் கொடுக்காது. உதாரணமாக, ஒரு அல்காரிதம் அதிக நினைவகத்தைப் பயன்படுத்தினால், அது பெரிய ஓ குறியீட்டில் பிரதிபலிக்காது.
- பெரிய ஓ குறியீட்டை மேம்படுத்துவதற்கான வழிகள்
- திறமையான அல்காரிதம்களைத் தேர்ந்தெடுக்கவும்.
- தரவு கட்டமைப்புகளைச் (data structures) சரியாகப் பயன்படுத்தவும்.
- சுழல்களைக் குறைக்கவும்.
- நினைவக பயன்பாட்டைக் குறைக்கவும்.
- குறியீட்டை மேம்படுத்தவும்.
- முடிவுரை
பெரிய ஓ குறியீடு என்பது அல்காரிதம்களின் செயல்திறனைப் புரிந்து கொள்ளவும், மேம்படுத்தவும் உதவும் ஒரு முக்கியமான கருவியாகும். கிரிப்டோகரன்சி மற்றும் பிளாக்செயின் போன்ற துறைகளில், செயல்திறன் மிக்க அல்காரிதம்களை உருவாக்குவது மிக முக்கியம். எனவே, பெரிய ஓ குறியீட்டின் அடிப்படைக் கருத்துகளைப் புரிந்துகொள்வது இந்த துறைகளில் பணிபுரிபவர்களுக்கு மிகவும் அவசியம். பெரிய ஓ குறியீட்டைப் பயன்படுத்தி, நீங்கள் சிறந்த மற்றும் திறமையான நிரல்களை எழுத முடியும்.
அல்காரிதம் தரவு கட்டமைப்பு நேர சிக்கல்தன்மை இட சிக்கல்தன்மை வரிசைப்படுத்தும் அல்காரிதம்கள் தேடல் அல்காரிதம்கள் பிளாக்செயின் கிரிப்டோகரன்சி பிட்காயின் எத்தீரியம் ஸ்மார்ட் ஒப்பந்தங்கள் Proof of Work Proof of Stake SHA-256 Keccak-256 ECDSA மெர்ஜ் சார்ட் குயிக் சார்ட் பபிள் சார்ட் நேரியல் தேடல் பைனரி தேடல் தரவுத்தொகுப்பு கணினி நிரலாக்கம் செயல்திறன் மேம்பாடு மென்பொருள் பொறியியல் தரவு அறிவியல் செயற்கை நுண்ணறிவு இயந்திர கற்றல் தரவு பகுப்பாய்வு வணிக நுண்ணறிவு
பரிந்துரைக்கப்பட்ட எதிர்கால சந்தை பதிவு தளங்கள்
தளம் | எதிர்கால செயல்பாடுகள் | பதிவு |
---|---|---|
Binance Futures | 125x வரை மூலதனம், USDⓈ-M ஒப்பந்தங்கள் | இங்கு பதிவு செய்யவும் |
Bybit Futures | நிரந்தர தலைகீழ் ஒப்பந்தங்கள் | வணிகத்தை தொடங்கு |
BingX Futures | நகல் வணிகம் | BingX இல் சேர் |
Bitget Futures | USDT உறுதியான ஒப்பந்தங்கள் | கணக்கை திற |
BitMEX | கிரிப்டோ சந்தை, 100x வரை மூலதனம் | BitMEX |
நமது சமூகத்தில் சேர்க்கை
@strategybin என்ற Telegram சேனலுக்கு குழுசேர்க்கை செய்து மேலும் தகவல்களைப் பெறுங்கள். சிறந்த இலாப தளங்கள் – இங்கு பதிவு செய்யவும்.
நமது சமூகத்தில் பங்கேற்கவும்
@cryptofuturestrading என்ற Telegram சேனலுக்கு குழுசேர்க்கை செய்து பகுப்பாய்வு, இலவச சமிக்ஞைகள் மற்றும் மேலும் தகவல்களைப் பெறுங்கள்!