এখানে অ্যাসিপোটোটিক বিশ্লেষণের মাধ্যমে আমি ধরে নিয়েছি যে আমরা ইনপুটটির আকার অনন্তের দিকে চলে যাওয়ার সাথে সাথে আলগোরিদমের আচরণ বোঝাই।
আমরা অ্যাসিম্পোটোটিক বিশ্লেষণের কারণটি হ'ল
এটি অনুশীলনে অ্যালগরিদমের আচরণের পূর্বাভাস দেওয়ার ক্ষেত্রে কার্যকর । পূর্বাভাসগুলি আমাদের সিদ্ধান্ত নিতে দেয়, উদাহরণস্বরূপ, যখন আমাদের কোনও সমস্যার জন্য বিভিন্ন অ্যালগরিদম থাকে তবে আমাদের কোনটি ব্যবহার করা উচিত? (দরকারী হওয়ার অর্থ এই নয় যে এটি সর্বদা সঠিক)
বাস্তব বিশ্বের যেকোন সরল মডেল সম্পর্কে একই প্রশ্ন জিজ্ঞাসা করা যেতে পারে। আমরা কেন বাস্তব বিশ্বের সরলিকৃত গাণিতিক মডেলগুলি ব্যবহার করি?
পদার্থবিজ্ঞানের কথা ভাবুন। শাস্ত্রীয় নিউটোনীয় পদার্থবিজ্ঞান বাস্তব বিশ্বের ভবিষ্যদ্বাণী করার ক্ষেত্রে আপেক্ষিক পদার্থবিজ্ঞানের মতো ভাল নয়। তবে গাড়ি, আকাশচুম্বী, সাবমেরিন, বিমান, সেতু ইত্যাদির জন্য এটি যথেষ্ট ভাল একটি মডেল There নক্ষত্র এবং গ্রহ বা ইলেকট্রনের মতো অতি উচ্চ গতির বস্তুগুলির মতো বিশাল আকাশের জিনিসগুলি।
কোনও মডেলের সীমাবদ্ধতাগুলি কী তা জানা গুরুত্বপূর্ণ।
এটি সাধারণত আসল বিশ্বের একটি যথেষ্ট পরিমাণে সমীকরণ।
অনুশীলনে আমরা প্রায়শই দেখতে পাই যে ভাল অ্যাসিম্পোটিক বিশ্লেষণ সহ একটি অ্যালগরিদম অনুশীলনে আরও ভাল কাজ করে। এটি খুব কম ক্ষেত্রেই দেখা যায় যে একটি অ্যালগরিদমের আরও ভাল অ্যাসিম্পোটিক আচরণ রয়েছে তাই যদি ইনপুটগুলি যথেষ্ট পরিমাণে বড় হতে পারে তবে আমরা সাধারণত অ্যালগরিদম আচরণের প্রথম ভবিষ্যদ্বাণী হিসাবে অ্যাসিম্পোটিক বিশ্লেষণের উপর নির্ভর করতে পারি। এটি যদি আমরা জানি তবে ইনপুটগুলি ছোট হতে চলেছে। আমরা চাই পারফরম্যান্সের উপর নির্ভর করে আমাদের আরও সাবধানী বিশ্লেষণ করার প্রয়োজন হতে পারে, উদাহরণস্বরূপ যদি আমাদের কাছে ইনপুট বিতরণ সম্পর্কিত অ্যালগরিদম সম্পর্কিত তথ্য দেওয়া হয় তবে আমরা আমাদের লক্ষ্যগুলি অর্জনের জন্য আরও সতর্ক বিশ্লেষণ করতে পারি (যেমন, দ্রুতগতিতে 99 ইনপুটগুলির%)। পয়েন্টটি প্রথম ধাপ হিসাবে অ্যাসিপটোটিক বিশ্লেষণ একটি ভাল সূচনা পয়েন্ট। অনুশীলনে আমাদের পারফরম্যান্স পরীক্ষাও করা উচিত তবে মনে রাখবেন যে এর নিজস্ব সমস্যা রয়েছে।
AAAআরও ভাল অ্যাসিপটোটিক জটিলতা রয়েছে। এর মধ্যে কোনটিই সমস্ত ইনপুটগুলিতে অন্যটির চেয়ে ভাল নয়? তারপরে এটি আরও জটিল হয়ে ওঠে এবং আমরা কী যত্ন করি তার উপর নির্ভর করে। আমরা কি বড় ইনপুট বা ছোট ইনপুট সম্পর্কে চিন্তা করি? যদি আমরা বড় ইনপুট সম্পর্কে চিন্তা করি তবে এটি সাধারণ বিষয় নয় যে একটি অ্যালগরিদমে আরও ভাল অ্যাসিপোটিক জটিলতা রয়েছে তবে আমাদের যত্ন নেওয়া বড় ইনপুটগুলির সাথে সবচেয়ে খারাপ আচরণ করে। যদি আমরা ছোট ইনপুটগুলির বিষয়ে আরও যত্নশীল হয় তবে অ্যাসিম্পটোটিক বিশ্লেষণ সে ক্ষেত্রে কার্যকর নাও হতে পারে। আমাদের যত্নশীল ইনপুটগুলিতে আমাদের আলগোরিদিমগুলির চলমান সময়কে তুলনা করা উচিত। অনুশীলনে, জটিল প্রয়োজনীয়তা সহ জটিল কাজের জন্য অ্যাসিম্পোটিক বিশ্লেষণ ততটা কার্যকর নাও হতে পারে। সাধারণ মৌলিক সমস্যার জন্য যে অ্যালগোরিদম পাঠ্যপুস্তকগুলি কভার করে এটি বেশ কার্যকর।
সংক্ষেপে অ্যাসিপটোটিক জটিলতা সাধারণ বুনিয়াদি কাজগুলির জন্য একটি অ্যালগোরিদমের আসল জটিলতার আনুমানিক গণনা করা তুলনামূলকভাবে সহজ (একটি অ্যালগোরিদম পাঠ্যপুস্তকের সমস্যা)। আমরা আরও জটিল প্রোগ্রামগুলি তৈরি করার সাথে সাথে পারফরম্যান্সের প্রয়োজনীয়তাগুলি পরিবর্তন হয় এবং আরও জটিল হয়ে যায় এবং অ্যাসিম্পোটিক বিশ্লেষণ ততটা কার্যকর নাও হতে পারে।
অ্যালগরিদমের পারফরম্যান্সের পূর্বাভাস দেওয়ার জন্য এবং এগুলির তুলনা করার জন্য অ্যাসিম্পটোটিক বিশ্লেষণকে অন্যান্য পদ্ধতির সাথে তুলনা করা ভাল। একটি সাধারণ পদ্ধতির র্যান্ডম বা বেঞ্চমার্ক ইনপুটগুলির বিরুদ্ধে পারফরম্যান্স পরীক্ষা। এটি সাধারণ যখন অ্যাসিপটোটিক জটিলতা গণনা করা কঠিন বা অপ্রয়োজনীয় যেমন, যখন আমরা স্যাট সলিউশন হিসাবে হিউরিস্টিক্স ব্যবহার করি। আর একটি ক্ষেত্রে যখন প্রয়োজনীয়তাগুলি আরও জটিল হয়, উদাহরণস্বরূপ যখন কোনও প্রোগ্রামের পারফরম্যান্স বাইরের কারণগুলির উপর নির্ভর করে এবং আমাদের লক্ষ্য হতে পারে যে কিছু নির্দিষ্ট সময়সীমার অধীনে শেষ হয় (যেমন কোনও ব্যবহারকারীর কাছে প্রদর্শিত ইন্টারফেস আপডেট করার বিষয়ে ভাবুন) এর 99% ইনপুট।
তবে মনে রাখবেন যে পারফরম্যান্স বিশ্লেষণেও এটির সমস্যা রয়েছে। এটি কমতে পারফরম্যান্সে গাণিতিক গ্রান্টির সরবরাহ করে না আমরা আসলে সমস্ত ইনপুটগুলিতে পারফরম্যান্স পরীক্ষা চালাই যা অ্যালগোরিদমকে দেওয়া হবে (প্রায়শই গণনামূলকভাবে ইনফেসবাইল) (এবং প্রায়শই কিছু ইনপুট কখনই দেওয়া হবে না তা সিদ্ধান্ত নেওয়া সম্ভব হয় না)। যদি আমরা কোনও এলোমেলো নমুনা বা একটি মানদণ্ডের বিপরীতে পরীক্ষা করি তবে আমরা স্পষ্টতই
অ্যালগরিদমের কার্যকারিতা সম্পর্কে কিছুটা নিয়মিততা ধরে নিচ্ছি , অর্থাৎ অ্যালগরিদম অন্যান্য ইনপুটগুলিতেও একইভাবে সঞ্চালন করবে যা পারফরম্যান্স পরীক্ষার অংশ ছিল না।
পারফরম্যান্স টেস্টগুলির সাথে দ্বিতীয় সমস্যাটি হ'ল তারা পরীক্ষার পরিবেশের উপর নির্ভর করে। অর্থাত্ কোনও প্রোগ্রামের পারফরম্যান্সটি কেবল ইনপুট দ্বারা নির্ধারিত হয় না তবে বাইরের কারণগুলি (যেমন মেশিনের ধরণ, অপারেশন সিস্টেম, কোডড অ্যালগরিদমের দক্ষতা, সিপিইউ ব্যবহার, মেমরি অ্যাক্সেসের সময় ইত্যাদি) এর কয়েকটি বিভিন্ন রানের মধ্যে পরিবর্তিত হতে পারে একই মেশিনে পরীক্ষা। আবার এখানে আমরা ধরে নিচ্ছি যে পারফরম্যান্স টেস্টটি করা হয় এমন নির্দিষ্ট পরিবেশগুলি প্রকৃত পরিবেশের সাথে সমান, যদি না আমরা প্রোগ্রামটি চালাতে পারি এমন সমস্ত পরিবেশে পারফরম্যান্স টেস্ট না করি (এবং কীভাবে কী কী মেশিনগুলি বাছাই করতে পারে তা আমরা কীভাবে ভবিষ্যদ্বাণী করতে পারি? 10 বছরের মধ্যে অ্যালগরিদম চালু?)।
Θ(nlgn)Θ(n2)Θ(lgn)O(n)