මේවා වැදගත් වන්නේ ඇයි?
මේ වන විට, අපි පරිගණකයට උපදෙස් දෙන ආකාරය (Programming) සහ එම උපදෙස් වස්තූන් (Objects) ලෙස සංවිධානය කරන ආකාරය (OOP) ඉගෙන ගෙන අවසන්. නමුත් දත්ත ගබඩා කිරීම පමණක් ප්රමාණවත් නොවේ; එය කාර්යක්ෂමව ගබඩා කිරීම සහ වේගවත්ව සැකසීම අත්යවශ්ය වේ. දක්ෂ මෘදුකාංග ඉංජිනේරුවෙකු සහ සාමාන්ය ක්රමලේඛකයෙකු අතර ඇති ප්රධානතම වෙනස මෙයයි.
මෙය තේරුම් ගැනීමට පුස්තකාලයක් ගැන සිතන්න.
- දත්ත ව්යුහය (Data Structure): මෙය දත්ත සංවිධානය කරන ආකාරයයි. පුස්තකාලයේ සියලුම පොත් එක ගොඩකට දැමුවහොත් (නරක දත්ත ව්යුහයක්), ඔබට අවශ්ය පොත සොයාගැනීම ඉතා අපහසු වේ. නමුත් පොත් විෂය අනුව, කර්තෘගේ නමේ අකාරාදිය අනුව රාක්කවල අடுக்கුවහොත් (හොඳ දත්ත ව්යුහයක්), පොතක් සොයාගැනීම ඉතා පහසුය.
- ඇල්ගොරිතමය (Algorithm): මෙය ගැටළුවක් විසඳීම සඳහා ඇති පියවර මාලාවයි. රාක්කවල අடுக்கුවත්, ඔබ පොත සොයන ආකාරය (ඇල්ගොරිතමය) වැදගත් වේ. ඔබ එකින් එක සියලුම රාක්ක පරීක්ෂා කළහොත් (නරක ඇල්ගොරිතමයක්), බොහෝ කාලයක් ගතවේ. නමුත් ඔබ කෙලින්ම නිවැරදි විෂය ඇති රාක්කයට ගොස්, එහි අකාරාදිය අනුව පොත සෙවුවහොත් (හොඳ ඇල්ගොරිතමයක්), එය ඉතා ඉක්මන්ය.
පොදු දත්ත ව්යුහ (Common Data Structures)
1. ශ්රේණිය (Array)
මෙය එකම වර්ගයේ දත්ත, මතකයේ එක ළඟ, පිළිවෙලට ගබඩා කරන ක්රමයකි. සෑම දත්තයකටම අංකයක් (index) ඇත. මෙය හරියට එක ළඟ ඇති, අංක යෙදූ තැපැල් පෙට්ටි වැනිය. ඔබට පෙට්ටියේ අංකය জানা থাকলে, කෙලින්ම එම පෙට්ටියට ගොස් ලිපියක් ගත හැක (වේගවත් ප්රවේශය - fast access).
2. සම්බන්ධිත ලැයිස්තුව (Linked List)
මෙහිදී දත්ත එක ළඟ ගබඩා නොවේ. සෑම දත්තයක්ම (node) ඊළඟ දත්තය කොහේදැයි දනී (pointer). මෙය හරියට නිධාන සෙවීමක් වැනිය; පළමු ඉඟියෙන් දෙවැන්නත්, දෙවැන්නෙන් තෙවැන්නත් සොයාගත යුතුය. මැදට අලුත් ඉඟියක් එකතු කිරීම හෝ ඉවත් කිරීම පහසුය (flexible size).
3. අට්ටි (Stack)
මෙය "අවසානයට ඇතුල්වූ දේ, පළමුවෙන් පිටවීම" (Last-In, First-Out - LIFO) මූලධර්මය මත ක්රියා කරයි. මෙය හරියට එක මත එක තැබූ පිඟන් අට්ටියක් වැනිය. ඔබට අලුත් පිඟානක් තැබිය හැක්කේ උඩින්ම පමණි. පිඟානක් ඉවත් කළ හැක්කේද උඩින්ම පමණි.
4. පෝලිම (Queue)
මෙය "පළමුවෙන් ඇතුල්වූ දේ, පළමුවෙන් පිටවීම" (First-In, First-Out - FIFO) මූලධර්මය මත ක්රියා කරයි. මෙය ප්රවේශ පත්ර කවුන්ටරයක ඇති පෝලිමක් වැනිය. පෝලිමට මුලින්ම පැමිණි පුද්ගලයා, ප්රවේශ පත්රය මුලින්ම ලබාගෙන පිටවී යයි.
ඇල්ගොරිතම වර්ග
ගැටළු විසඳීම සඳහා ඇති පියවර මාලාව ඇල්ගොරිතම ලෙස හැඳින්වේ. ප්රධාන වර්ග දෙකකි:
- සෙවුම් ඇල්ගොරිතම (Searching Algorithms): දත්ත සමූහයක් තුළින් නිශ්චිත දත්තයක් සොයා ගැනීම. (උදා: Linear Search, Binary Search)
- වර්ගීකරණ ඇල්ගොරිතම (Sorting Algorithms): දත්ත සමූහයක් නිශ්චිත අනුපිළිවෙලකට (උදා: අකාරාදී පිළිවෙලට) සැකසීම. (උදා: Bubble Sort, Quick Sort)
අවසාන වශයෙන්
දත්ත ව්යුහ සහ ඇල්ගොරිතම යනු මෘදුකාංග ඉංජිනේරු විද්යාවේ න්යායාත්මක පදනමයි. විශාල දත්ත ප්රමාණයක් සමග ක්රියා කරන (scalable) සහ ඉහළ කාර්යසාධනයක් ඇති මෘදුකාංග නිර්මාණය කිරීමට මෙම දැනුම අත්යවශ්ය වේ.
මේ දක්වා, අපි වැඩසටහනක් ක්රියාත්මක වන විට, එහි මතකයේ (RAM) දත්ත කළමනාකරණය කරන ආකාරය ඉගෙන ගත්තෙමු. නමුත් වැඩසටහන නැවැත්වූ විට එම දත්ත මැකී යයි. දත්ත ස්ථිරව (persistently) ගබඩා කර තබන්නේ කෙසේද? ඒ සඳහා අපට දත්ත සමුදා (Databases) අවශ්ය වේ. අපගේ ඊළඟ මොඩියුලයෙන්, "දත්ත සමුදා කළමනාකරණ පද්ධති (DBMS) සහ SQL" පිළිබඳව අපි ඉගෙන ගනිමු.