টাইম কমপ্লেক্সিটি, স্পেস কমপ্লেক্সিটি, বিগ ও নোটেশন(পর্ব-০১)

টাইম কমপ্লেক্সিটি, স্পেস কমপ্লেক্সিটি, বিগ ও নোটেশন নিয়ে কথা বলার আগে একটু অন্য কথা বার্তা বলি অন্য কথা বার্তা মানে কোডিং এর বাহিরে কোনো কথা না। কোডিং এর কথা যেহেতু চলেই আসলো চলেন কোডিং নিয়ে একটু কথা বলি।

একটা কোড কে কখন গুড কোড বলা হবে?

উত্তর: একটা কোড কে তখনই গুড কোড বলা হবে যখন ওই কোড টা রিডেবল, মেইনটেনেবল এবং স্কেলেবল হবে।

এখন আবার মনে প্রশ্ন জাগলো তাহলে রিডেবল বা রিডাবলিটি, মেইনটেনেবল এবং স্ক্যালাবিলিটি এইটা আবার কি! একদম সহজ করে যদি ইংরেজিতে বলি তাহলে,

What is Readability?

Ans:*Readability is your code just generally clean. Can others understand your code.*

রিডাবলিটি মানে হচ্ছে আপনার কোড কে এমন ভাবে লিখা মানে ক্লিন কোড লিখা যাতে অন্য ডেভেলপাররা আপনার কোড দেখে সহজে বুঝতে পারে।

maintainable code simply means “code that is easy to modify or extend”

স্ক্যালাবল কোড বলতে কি বুঝায় তা যদি একটু নরমালি উদাহরণের মাধ্যমে বুঝার চেষ্টা করি: ধরেন আপনি সম্যসা সমাধানের জন্য কোড লিখলেন এবং সেই কোড ১০০০ টা ইনপুট এর জন্য আউটপুট ঠিক মতো দিচ্ছে। একটা সময় আপনার ইনপুট এর পরিমান ৫০০০ হলো তা ও ঠিক মতো চলতেছে। ১০,০০০ ইনপুট দেয়ার পর কেমন যেন একটু স্লো আউটপুট দিতেছে মনে হচ্ছে। এইবার আপনি ১ মিলিয়ন ইনপুট দেওয়ার পর দেখলেন ৪-৫ সেকেন্ড হয়ে গেছে কিন্তু আপনার প্রোগ্রাম কোনো আউটপুট দিতেছে না। ১০ সেকেন্ডস পর আপনি আউটপুট দেখতে পেলেন। মানে আপনার এলগোরিদমটি ছোট ইনপুট এর জন্য ঠিক ঠাক মতো কাজ করলে অনেক বড় ইনপুট এর জন্য আর ঠিক মতো কাজ করতে পারতেছে না।

তাহলে, এই উদাহরণ থেকে আমার বুঝতে পারলাম আমরা একটা সমস্যা সমাধানের জন্য যখন কোনো কোড লিখি বা কোনো এলগোরিদম লিখি তা ছোট ইনপুট এর জন্য কেমন পারফর্ম করে এবং লার্জ এমাউন্ট ইনপুট এর কেমন পারফর্ম করবে তার উপর ডিপেন্ড করে আমি বুঝবো আমার কোড এর স্কেলিবিলিটি কেমন। আপাদত্ত এইটুকু বুঝলেই হবে।

আমরা যখন একটা এলগোরিদম ইমপ্লিমেন্ট করবো তখন আমাদের কয়েকটা ব্যাপার মাথায় রাখতে হবে।

  • আমার অ্যালগোরিদম কি নির্ধারিত সময়ের মধ্যে ফলাফল এনে দিবে?

  • সর্বোচ্চ কত বড় ইনপুটের জন্য আমার অ্যালগোরিদম কাজ করবে?

  • আমার অ্যালগোরিদম কতখানি মেমরি ব্যবহার করছে?

এই ব্যাপার গুলো জাস্ট একটু মাথায় রাখেন আমরা বিস্তারিত আলোচনার করবো এই ব্যাপার গুলো নিয়ে।

টাইম কমপ্লেক্সিটি এবং স্পেস কমপ্লেক্সিটি কি?

প্রথমে আমরা বিস্তারিত জানার চেষ্টা করবো টাইম কমপ্লেক্সিটি কি?

প্রথমে একটা উদাহরণ দেখি:

ধরেন আপনার কাছে একটা লো কনফিগারেশনের একটা কম্পিউটার আছে এবং আপনার ফ্রেন্ড এর কাছে একটা ম্যাকবুক কম্পিউটার আছে। আপনার ২ জনেই প্রবলেম সলভিং করতে ভালোবাসেন। অনলাইন থেকে একটা প্রব্লেম খোঁজে বের করলেন সল্ভ করার জন্য। প্রবলেম টা হচ্ছে একটা অ্যারের মধ্যে ১,০০০ ডাটা আছে এবং আপনাকে এই ১,০০০ ডাটা প্রিন্ট(আউটপুট) করে দেখাতে হবে। আপনি একটা লুপ লিখে সুন্দর করে সবগুলা ডাটা আউটপুট এ দেখিয়ে দিলেন। আপনার ফ্রেন্ড ও একদম সেইম আপনার মতো কোড লিখে প্রবলেমটার সলুয়েশন করেছে। কিন্তু সমস্যা হচ্ছে সেইম কোড লিখার পর ও আপনার কোড রান হতে সময় নিচ্ছে ১০ সেকেন্ডস এবং আপনার ফ্রেন্ড এর কোড রান হতে সময় নিচ্ছে ১সেকেন্ড।

এখন প্রশ্ন হচ্ছে কোন কম্পিউটার এর টাইম কমপ্লেক্সিটি ভালো?

যদি আপনার উত্তর হয়

আপনার ফ্রেন্ড এর কম্পিউটার(ম্যাক বুক)।

তাহলে আপনাকে কংগ্রাচুলেশন আপনার উত্তর ভুল হয়েছে।

আর আপনার উত্তর যদি হয়

আপনার কম্পিউটার।

তাহলে ও আপনাকে কংগ্রাচুলেশন আপনার উত্তর ভুল হয়েছে।

তাহলে সঠিক উত্তর কোনটা? সঠিক উত্তর হলো ২ টা কম্পিউটার এর টাইম কমপ্লেক্সিটি একই।

এইটা কেমন কথা ভাই! ২ টি কম্পিউটারের টাইম কমপ্লেক্সিটি কিভাবে একই হয়! আচ্ছা বুঝিয়ে বলছি আমরা প্রথমে যখন টাইম কমপ্লেক্সিটি সম্পর্কে পড়াশোনা শুরু করি তখন আমরা ভাবি যে টাইম কমপ্লেক্সিটি বলতে বুঝায় একটা প্রোগ্রাম রান করতে কত সময় নিচ্ছে সেটাই হচ্ছে ওই প্রোগ্রামের টাইম কমপ্লেক্সিটি। সেই হিসেবে আমরা এখন পর্যন্ত ভাবতেছি আমার বন্ধুর (ম্যাক কম্পিউটার) এর টাইম কমপ্লেক্সিটি বেশি।

So, What is the time complexity?

Ans:*Time Complexity is a function that gives us the relationship between about how the time will grows as the input grows.*

Time Complexity != Time Taken

বাংলাতে যদি একদম সহজ করে বলি তাহলে টাইম কমপ্লেক্সিটি হচ্ছে: ইনপুটের আকার বাড়ার সাথে সাথে একটি ফাংশন চলতে কি পরিমান সময় লাগতেছে সেটাই হচ্ছে ঐ ফাংশন এর টাইম কমপ্লেক্সিটি

Screenshot_24.jpg

উপরের ছবি টা ভালো করে খেয়াল করলে আমরা দেখবো ওল্ড কম্পিউটার এবং ম্যাক কম্পিউটার ২ টার ক্ষেত্রেই ইনপুট এর উপর ডিপেন্ড করে সময়ের পরিমান লিনিয়ার ভাবে বাড়তেছে। এই ব্যাপারটাই হচ্ছে মূলত টাইম কমপ্লেক্সিটি এবং এইটা হচ্ছে টাইম কমপ্লেক্সিটি এর ম্যাথেমেটিক্যাল ফাংশন।