অ্যালগোরিদমের কার্যকারিতা
চৌকস অ্যালগোরিদম ডিজাইন করা আমাদের উদ্দেশ্য। অর্থাৎ
আমাদের জানতে হবে ডিজাইন করা অ্যালগরিদমটি কতটুকু কার্যকরী। অ্যালগোরিদমের
কার্যকারিতা নিরূপণে আমরা প্রধানত দুইটি বিষয় বিবেচনায় আনতে পারি –
·
সময়ঃ অ্যালগরিদমটি যে
সমস্যা সমাধানের জন্য ডিজাইন করা হয়েছে তা সমাধান করতে কতটুকু সময় নিচ্ছে।এটাকে
টাইম কমপ্লেক্সিটি বলে।
·
মেমরিঃ অ্যালগরিদমটি
সমস্যা সমাধানের সময় কতখানি কম্পিউটার মেমরি ব্যাবহার করছে। এটা স্পেস
কমপ্লেক্সিটি নামে পরিচিত।
টাইম
কমপ্লেক্সিটি
একটা
অ্যালগোরিদম আসলেই কতটুকু সময় নেয় অর্থাৎ অ্যালগোরিদমের রানিং টাইম কত হবে সেটা
কিছু বিষয়ের উপর নিরভর করে। যেমন-
·
যে কম্পিউটারে অ্যালগোরিদম টা রান করানো হচ্ছে
সেটা কি সিঙ্গেল নাকি মাল্টিপ্রসেসর বিশিষ্ট?
·
কম্পিউটার আর্কিটেকচার – ৩২ বিট নাকি ৬৪ বিট ?
·
ইনপুট
তবে টাইম কমপ্লেক্সিটি নির্ণয়ের সময় কম্পিউটার
কনফিগারেশন কে বিবেচনায় আনা হয় না।বিভিন্ন মানের বা সাইজের ইনপুটের জন্য প্রাপ্ত
সময়ের সাপেক্ষে গ্রোথ রেট হিসেব করা হয়।এখন চিন্তার বিষয় হচ্ছে কিভাবে আমরা গ্রোথ
রেটের জন্য রাশি প্রতিপাদন করতে পারি।তো সেজন্য একটা মডেল কম্পিউটার বিবেচনায় আনা
যাক যা নিম্নোক্ত বৈশিষ্ট্য বহন করেঃ
- - সিঙ্গেল প্রসেসর বিশিষ্ট
- - ৩২ বিট আর্কিটেকচার
- - আর ধরে নিলাম যোগ-বিয়োগ এবং লজিকাল অপারেশান, ভ্যারিয়েবল আসাইন এবং ভ্যালু রিটার্ন করতে আমাদের মডেল কম্পিউটারের ১ ইউনিট সময় লাগে।
-
মডেল কম্পিউটার টি নির্দেশনাসমূহ একটার পর একটা
সম্পাদন করে।
তাহলে
এখন একটা সহজ উদাহরণ দেখা যাক।২ টা সংখ্যা যোগ করার অ্যালগোরিদম ডিজাইন করব আমরাঃ
Summation (NUM1,
NUM2)
{
return NUM1 + NUM2 ;
}
এবার উপরের
অ্যালগরিদমটি আমদের মডেল কম্পিউটারে রান করাব।এখানে দেখা যাচ্ছে ১ টা যোগ অপারেশান
করা হয়েছে এবং যোগফলটি রিটার্ন করা হয়েছে।তাহলে এই অ্যালগোরিদমের রানিং টাইম হবে,
Tsummation
= 1 unit time for addition + 1 unit time for returning
= 2 unit time
তাহলে
আমরা বলতে পারি এটা একটা constant
টাইম
অ্যালগোরিদম।
আরও একটা
উদাহরণ দেখা যাক। 1 + 2 +
3 + ……… + n পর্যন্ত যোগফল বের করার অ্যালগোরিদম ও তার রানিং টাইম
হিসাব করব;
|
Line no.
|
Pseudocode
|
Cost
|
No. of time
|
|
1.
2.
3.
4.
|
Determine_SUM(n)
{
sum: = 0;
for present_number: = 1 to n do
sum = sum + present_num;
return sum;
}
|
1
( C1)
2
( C2)
2
( C3)
1
( C4)
|
1
n+1
n
1
|
উপরের
টেবিলে 1 + 2 + 3 + ……… +
n পর্যন্ত যোগফল বের করার Pseudocode
দেখানো হয়েছে। ১ নং লাইনে ‘sum’ variable এ ‘০’ অ্যাসাইন করতে
কস্ট হয়েছে ১ এবং No. of operation = 1 । ২ নং লাইনে(for i = 1; i<= n; i++) আমরা দুইটা কাজ করেছি
– একটা কম্পারিজন আর অন্যটা increment. তাই ২ নং লাইনের কস্ট
২ এবং No. of operation = n + 1 (1 থেকে n পর্যন্ত n বার ও false condition এর জন্য 1 বার ; এই মোট n + 1 বার) । ৩ নং লাইনে ২ টা কাজ করা
হয়েছে – একটা যোগ আর একটা অ্যাসাইন। তাহলে ৩ নং লাইনের মোট কস্ট ২ এবং No. of operation = n । ৪ নং লাইনে রিটার্ন
করা হয়েছে সুতরাং কস্ট ১ এবং No. of operation = 1 . তাহলে অ্যালগরিদমটির
মোট রানিং টাইম হচ্ছে –
Tsum = 1 + 2(n+ 1) + 2n +
1 = 4n + 4
অথবা, T (n) = Cn + C’ where C = C2
+ C3 C’ = C1 + C2 + C4
এবার দুইটা ম্যাট্রিক্স এর যোগফল বের করার অ্যালগোরিদম
ডিজাইন করা যাক ।
A = [ 2 3] B = [6 7] C
= A + B = ?
[4 5] [8 9]
Pseudocode:
Sum_Matrix( A , B )
{
for i: =1 to n do
for j: =1 to n do
C [i] [j] = A [i] [j] + B [i] [j];
Print ß C
}
- উপরের কোডে ভেতরের লুপ টা n বার ঘুরবে। পরেরবার ঘুরবে n-1 বার। তাহলে মোট লুপ চলেছে n + (n-1) + (n + 2) + …….. + 1 = n(n+ 1) / 2 বার।অর্থাৎ TmatrixSum = n2/2 + n/2 যা an2+ bn + c এর মত । তাহলে প্রথম উদাহরনের constant time complexity , ২য় উদাহরনের লিনিয়ার টাইম কমপ্লেক্সিটি, ৩য় উদাহরনের quadratic টাইম কমপ্লেক্সিটি। সুতরাং এদেরকে গ্রাফে স্থাপন করলে নিচের চিত্র পাওয়া যাবেঃ