সম্পাদনা করুন: সংশোধন 3 তে প্রধান পুনর্বিবেচনা।
যেহেতু আমি কখনই কোনও ক্লাস শিখি নি, তাই আমাদের কী শেখানো উচিত সে সম্পর্কে আমি দৃ conv় বিশ্বাসের সাথে কিছু দাবি করতে পারি না বলে আমি মনে করি না। তবুও, আমি এটি সম্পর্কে যা ভেবেছিলাম তা এখানে।
প্রাকৃতিক উদাহরণ রয়েছে যেখানে লিখিত "সীমাবদ্ধ কৌশল" প্রয়োগ করা যাবে না। উদাহরণস্বরূপ, ধরুন আপনি আকারের দ্বিগুণের সাথে একটি স্থির-দৈর্ঘ্যের অ্যারে ব্যবহার করে একটি "পরিবর্তনশীল দৈর্ঘ্যের ভেক্টর" (সি ++ তে যেমন ভেক্টর <T>) প্রয়োগ করেন (আপনি প্রতিবার অ্যারের আকার ছাড়িয়ে যাবেন, আপনি অ্যারেরটিকে এখনকার দ্বিগুণ হিসাবে পুনরায় গণনা করুন এবং সমস্ত উপাদানগুলি অনুলিপি করুন)। যখন আমরা ভেক্টরে n উপাদানগুলি সঞ্চয় করি তখন অ্যারের আকার S ( n ) হয় n এর চেয়ে বড় বা সমান 2 এর ক্ষুদ্রতম শক্তি । আমরা বলতে চাই যে এস ( এন ) = ও ( এন ), তবে সংজ্ঞা হিসাবে লেখা হিসাবে "সীমাবদ্ধ কৌশল" ব্যবহার করা আমাদের এটি করতে দেয় না কারণ এস ( এন)) / n এর পরিধি [1,2) থেকে ঘন ঘন দোলায়মান। এটি Ω () এবং) () এর ক্ষেত্রেও প্রযোজ্য।
কিছুটা পৃথক বিষয় হিসাবে, যখন আমরা অ্যালগোরিদমের জটিলতা বর্ণনা করতে এই স্বরলিপিগুলি ব্যবহার করি, তখন আমি মনে করি যে আপনার Ω () এর সংজ্ঞাটি কখনও কখনও অসুবিধে হয় (যদিও আমি অনুমান করি যে এই সংজ্ঞাটি সাধারণ)। এটি f ( n ) = Ω ( g ( n )) সংজ্ঞায়িত করা আরও সুবিধাজনক যদি কেবল এবং কেবলমাত্র লিম্সআপ f ( n ) / g ( n )> ০ থাকে This কারণ কিছু সমস্যা অসীমভাবে এন এর অনেকগুলি মানের জন্য তুচ্ছ ( যেমন একটি শীর্ষ স্থানে একটি বিজোড় সংখ্যা এন সহ কোনও গ্রাফের উপর নিখুঁত মেশিং সমস্যা । এটি Θ () এবং) () এর ক্ষেত্রেও প্রযোজ্য।
অতএব, আমি ব্যক্তিগতভাবে দেখতে পেয়েছি যে একটি অ্যালগোরিদমের জটিলতা বর্ণনা করতে নীচের সংজ্ঞাগুলি সবচেয়ে সুবিধাজনক: ফ , জি : ℕ → ℝ > 0 ,
- f ( n ) = o ( g ( n )) যদি এবং কেবলমাত্র যদি লিম্সআপ f ( n ) / g ( n ) = 0. (এটি লিমিট f ( n ) / g ( n এর সমতুল্য হয় ) ) = 0.)
- f ( n ) = O ( g ( n )) যদি এবং কেবলমাত্র লিম্সআপ এফ ( এন ) / জি ( এন) থাকে ) <∞ থাকে ∞
- f ( n ) = Θ ( g ( n )) এবং কেবল যদি 0 <লিমসআপ এফ ( এন ) / জি ( এন) হয় ) <∞ থাকে ∞
- f ( n ) = Ω ( g ( n )) এবং কেবলমাত্র যদি লিম্সআপ f ( n ) / g ( n )> 0. (এটি সেই চ ( n ) এর সমান হয় o ( g ( n ) নয় )) নয়))
- f ( n ) = ω ( g ( n )) যদি এবং কেবলমাত্র লিম্সআপ f ( n ) / g ( n ) = ∞ হয় ∞ (এটি যে ফ ( এন ) এর সমান, ও ( জি ( এন )) নয়)
বা সমতুল্য,
- f ( n ) = o ( g ( n )) কেবলমাত্র প্রতিটি সি > ০ এর জন্য, যথেষ্ট পরিমাণে বড় n , f ( n ) ≤ c ⋅ g ( n ) এর জন্য।
- f ( n ) = O ( g ( n )) যদি এবং কেবলমাত্র কিছু সি > 0 এর জন্য থাকে তবে যথেষ্ট পরিমাণে বড় n , f ( n ) ≤ c ⋅ g ( n )।
- f ( n ) = Θ ( g ( n )) এবং কেবল যদি f ( n ) = O ( g ( n )) এবং f ( n ) = Ω ( g ( n )) হয়।
- f ( n ) = Ω ( g ( n )) যদি এবং কেবল কিছু d > 0 এর জন্য হয় তবে অসীম অনেকের জন্য n , f ( n ) ≥ d ⋅ g ( n) ) এর জন্য।
- f ( n ) = ω ( g ( n )) এবং শুধুমাত্র যদি প্রতিটি d > 0 এর জন্য হয় তবে অসীম অনেক n , f ( n ) ≥ d ⋅ g ( n ) এর জন্য।
তবে আমি জানি না এটি একটি সাধারণ অনুশীলন কিনা। এটি শেখানোর পক্ষে উপযুক্ত কিনা তাও আমি জানি না। সমস্যাটি হ'ল আমরা মাঝে মাঝে তার পরিবর্তে (যেমন আপনি প্রথম সংজ্ঞায় করেছিলেন)) () এর সংজ্ঞা দিতে চাই definition উদাহরণস্বরূপ, যখন আমরা বলি "এই র্যান্ডমাইজড অ্যালগরিদমের ত্রুটি হওয়ার সম্ভাবনা 2 −Ω ( n ) ", তখন আমরা এর অর্থ এই করি না যে ত্রুটি হওয়ার সম্ভাবনা কেবলমাত্র অসীম বহু n এর জন্য তাত্পর্যপূর্ণভাবে ছোট !