আপনি যদি এই অ্যালগরিদমগুলি বিশ্লেষণ করতে চান তবে আপনাকে // ডুস্টফ সংজ্ঞায়িত করতে হবে, কারণ এটি সত্যই ফলাফলটিকে পরিবর্তন করতে পারে। ধরা যাক ডাস্টফের জন্য ক্রমাগত ও (1) সংখ্যক ক্রিয়াকলাপ প্রয়োজন।
এই নতুন স্বরলিপি সহ কয়েকটি উদাহরণ এখানে দেওয়া হয়েছে:
আপনার প্রথম উদাহরণের জন্য, লিনিয়ার ট্র্যাভারসাল: এটি সঠিক!
উপর):
for (int i = 0; i < myArray.length; i++) {
myArray[i] += 1;
}
এটি লিনিয়ার (ও (এন)) কেন? আমরা ইনপুট (অ্যারে) এ অতিরিক্ত উপাদান যুক্ত করার সাথে সাথে ঘটতে থাকা অপারেশনের পরিমাণ আমরা যোগ করার উপাদানগুলির সংখ্যার সাথে আনুপাতিকভাবে বাড়িয়ে তোলে।
সুতরাং যদি স্মৃতিতে কোথাও কোনও পূর্ণসংখ্যা বৃদ্ধি করতে এটি অপারেশন করে, আমরা f (x) = 5x = 5 অতিরিক্ত ক্রিয়াকলাপের সাহায্যে লুপটি কাজ করতে পারি। 20 অতিরিক্ত উপাদানগুলির জন্য, আমরা 20 টি অতিরিক্ত ক্রিয়াকলাপ করি। একটি অ্যারের একক পাস লিনিয়ার হতে থাকে। বালতি বাছাইয়ের মতো অ্যালগরিদমগুলিও রয়েছে যা অ্যারের একক পাসে বাছাই করতে ডেটা কাঠামো কাজে লাগাতে সক্ষম।
আপনার দ্বিতীয় উদাহরণটিও সঠিক হবে এবং এর মতো দেখাচ্ছে:
O (n ^ 2):
for (int i = 0; i < myArray.length; i++) {
for (int j = 0; j < myArray.length; j++) {
myArray[i][j] += 1;
}
}
এই ক্ষেত্রে, প্রথম অ্যারেতে প্রতিটি অতিরিক্ত উপাদানগুলির জন্য, i, আমাদের সকল জে প্রসেস করতে হবে। আমি 1 যোগ করা আসলে জে যোগ (জে দৈর্ঘ্য)। সুতরাং, আপনি সঠিক! এই প্যাটার্নটি হ'ল (এন ^ 2), বা আমাদের উদাহরণে এটি আসলে ও (আই * জে) (বা n ^ 2 যদি i == জে, যা প্রায়শই ম্যাট্রিক্স অপারেশন বা বর্গক্ষেত্রের কাঠামোর ক্ষেত্রে ঘটে।
আপনার তৃতীয় উদাহরণ হ'ল ডুস্টফের উপর নির্ভর করে জিনিসগুলি পরিবর্তিত হয়; যদি কোডটি লিখিতভাবে হয় এবং স্টাফগুলি ধ্রুবক হয় তবে এটি আসলে কেবল ও (এন) হয় কারণ আমাদের আকারের অ্যারের 2 পাস রয়েছে, এবং 2n হ্রাস এন হবে to লুপগুলি একে অপরের বাইরে থাকা মূল ফ্যাক্টর নয় যা 2 code n কোড তৈরি করতে পারে; এখানে একটি ফাংশনের উদাহরণ যা 2 ^ n:
var fibonacci = function (n) {
if (n == 1 || n == 2) {
return 1;
}
else {
return (fibonacci(n-2) + fibonacci(n-1));
}
}
এই ফাংশনটি 2 ^ n, কারণ ফাংশনে প্রতিটি কল ফাংশনে TWO অতিরিক্ত কল উত্পন্ন করে (ফাইবোনাচি)। প্রতিবার আমরা যখন ফাংশনটি কল করি তখন আমাদের কাজের পরিমাণ দ্বিগুণ করতে হয়! এটি হাইড্রার মাথা কেটে ফেলার মতো এবং প্রতিটি সময় দু'টি নতুন ফোটার মতো দ্রুত তাড়াতাড়ি বেড়ে যায়!
আপনার চূড়ান্ত উদাহরণের জন্য, আপনি যদি মার্জ-সাজানোর মতো এনলগন সাজ্ট ব্যবহার করছেন তবে আপনি সঠিক যে এই কোডটি ও (এনএলজিএন) হবে। যাইহোক, আপনি নির্দিষ্ট পরিস্থিতিতে দ্রুত প্রকারের বিকাশের জন্য ডেটার কাঠামোটি কাজে লাগাতে পারেন (যেমন 1-100 এর মতো একটি জ্ঞাত, সীমিত পরিসরের মানগুলির চেয়ে বেশি) সুতরাং যদি O (nlgn) বাছাই O (nlgn) সময়ের চেয়ে কম সময় নেয় এমন কোনও ক্রিয়াকলাপের পাশে থাকে তবে মোট সময়ের জটিলতা হবে O (nlgn)।
জাভাস্ক্রিপ্টে (কমপক্ষে ফায়ারফক্সে) অ্যারে.প্রোটোটাইপ.সোর্ট () এ ডিফল্ট সাজানোটি অবশ্যই মার্জসার্ট, সুতরাং আপনি আপনার চূড়ান্ত দৃশ্যের জন্য ও (এনএলজিএন) এ খুঁজছেন।