এটি আসলে একটি গভীর সমস্যা যার কিছু পদ্ধতিগত এবং কিছু বাস্তববাদী উত্তর রয়েছে। আমি ধরে নিয়েছি আপনি হাতে থাকা অ্যালগরিদম (গুলি) সম্পর্কে কিছু জানতে চান । যদি আপনি জানতে চান যে প্রদত্ত ইনপুটগুলি প্রদত্ত মেশিনে কোন অ্যালগরিদম আরও ভাল কাজ করে, এগিয়ে যান এবং রানটাইমগুলি পরিমাপ করুন। আপনি যদি কোনও প্রদত্ত অ্যালগরিদমের জন্য কোনও সংকলকের মানের তুলনা করতে চান তবে এগিয়ে যান এবং রানটাইমগুলি পরিমাপ করুন। অ্যালগরিদম সম্পর্কে কিছু শেখার জন্য, এটি করবেন না।
রানটাইম ব্যবহার করা ভাল ধারণা না হওয়ার কারণ সম্পর্কে প্রথমে কিছু কারণ বলি।
একটি মেশিনে একটি ভাষা এবং একটি সংকলক ব্যবহার করে পরিমাপ করা সাধারণ রানটাইমগুলির কোনও অর্থ নেই যদি আপনি কোনও উপাদান পরিবর্তন করেন। এমনকি একই অ্যালগরিদমের সামান্য পৃথক বাস্তবায়নও ভিন্নভাবে সম্পাদন করতে পারে কারণ আপনি কিছু সংকলক অপিমেশনকে ক্ষেত্রে ক্ষেত্রে ট্রিগার করেন তবে অন্যটিতে নয়।
- ভবিষ্যদ্বাণী
সুতরাং আপনার কিছু ইনপুট জন্য কয়েক রানটাইম আছে। এটি অন্য কোনও ইনপুটটির রানটাইম সম্পর্কে কী বলে? সাধারণভাবে, কিছুই না।
- তাৎপর্য
সাধারণত, আপনি সমস্ত ইনপুটগুলি (কোনও আকারের) মাপদণ্ড করবেন না , যাতে তাত্ক্ষণিকভাবে আপনার অ্যালগোরিদমগুলির তুলনা করার ক্ষমতা সীমাবদ্ধ করে: সম্ভবত আপনার পরীক্ষার সেটটি একের মধ্যে সবচেয়ে খারাপ ক্ষেত্রে এবং অন্য অ্যালগরিদমের সেরা ক্ষেত্রে ট্রিগার করেছিল? অথবা রানটাইম আচরণের জন্য আপনার ইনপুটগুলি খুব ছোট ছিল ।
- মিটারিং
পরিমাপ রানটাইম ভাল তুচ্ছ নয়। জেআইটি আছে কি? কোন বিতর্ক হয়েছে, অর্থাৎ আপনি কি অ্যালগোরিদম এমনকি চালানোর সময় গণনা করছেন? আপনি কি অন্য একই রান (অন্য অ্যালগরিদমের) জন্য একই মেশিন অবস্থার নির্দিষ্ট পুনরুত্পাদন করতে পারেন, বিশেষ একত্রে একযোগে প্রক্রিয়া এবং ক্যাশে? মেমরি ল্যাটেন্সি কিভাবে মোকাবেলা করা হয়?
আমি আশা করি এগুলি আপনাকে নিশ্চিত করেছে যে রানটাইমগুলি অ্যালগরিদমের তুলনা করার জন্য একটি ভয়ঙ্কর পরিমাপ এবং অ্যালগরিদম রানটাইম তদন্তের জন্য কিছু সাধারণ, বিমূর্ত পদ্ধতি প্রয়োজন।
প্রশ্নের দ্বিতীয় অংশে। কেন আমরা তুলনা বা অনুরূপ প্রাথমিক ক্রিয়াকলাপ ব্যবহার করব?
বিশ্লেষণযোগ্য ট্র্যাকটেবিলিটি
ধরে নিলে আপনি আনুষ্ঠানিক বিশ্লেষণ করতে চান, আপনাকে এটি করতে সক্ষম হতে হবে। স্বতন্ত্র বিবৃতি গণনা খুব প্রযুক্তিগত, কখনও কখনও এমনকি কঠিন; কিছু লোক তবুও এটি করে (উদাঃ নুথ)। কেবলমাত্র কয়েকটি বিবৃতি গণনা করা - যা রানটাইমকে প্রাধান্য দেয় - এটি সহজ। একই কারণে, আমরা প্রায়শই "কেবল" তদন্ত করি (উপরের সীমাগুলি) সবচেয়ে খারাপ ক্ষেত্রে রানটাইম।
আধিপত্য
নির্বাচিত অপারেশন রানটাইমের উপর আধিপত্য বিস্তার করে। এর অর্থ এই নয় যে এটি সর্বাধিক রানটাইম অবদান রাখে - তুলনা স্পষ্টভাবে হয় না, উদাহরণস্বরূপ কুইকসোর্টে শব্দ-আকারের পূর্ণসংখ্যগুলি বাছাই করার সময়। তবে তারা বেশিরভাগ ক্ষেত্রেই মৃত্যুদন্ড কার্যকর করা হয় , তাই তাদের গণনা করে আপনি গণনা করেন যে কতবার অ্যালগোরিদমের সর্বাধিক সম্পাদিত অংশগুলি চালানো হয়। ফলস্বরূপ, আপনার অ্যাসেম্পোটিক রানটাইম প্রভাবশালী প্রাথমিক ক্রিয়াকলাপের সংখ্যার সাথে সমানুপাতিক। এজন্য আমরা কেবল তুলনাগুলি গণনা করেও আমরা ল্যান্ডাউ স্বরলিপি এবং "রানটাইম" শব্দটি ব্যবহার করে স্বাচ্ছন্দ্য বোধ করি।
মনে রাখবেন যে একাধিক অপারেশন গণনা করা কার্যকর হতে পারে। উদাহরণস্বরূপ, কিছু কুইকসোর্ট ভেরিয়েন্টগুলি তুলনা বেশি করে তবে অন্যদের তুলনায় কম স্বাপ হয় (গড়)।
আপনার তত্ত্বটি যে ভবিষ্যদ্বাণীগুলি করা হয়েছে তা সঠিক কিনা তা যাচাই করার জন্য আপনি সমস্ত তত্ত্বটি করার পরে, আপনি সমস্ত তত্ত্বটি সম্পন্ন করার পরে রানটাইমগুলিতে পুনর্বিবেচনা করতে চাইতে পারেন। যদি সেগুলি না হয় তবে আপনার তত্ত্বটি কার্যকর নয় (অনুশীলনে) এবং প্রসারিত করতে হবে। মেমোরি হায়ারার্কি প্রথম জিনিসগুলির মধ্যে একটি যা আপনি উপলব্ধি করেন তা গুরুত্বপূর্ণ তবে মৌলিক বিশ্লেষণে অনুপস্থিত।