গৃহীত উত্তরটি বেশ ভাল হলেও এটি কেন আসল কারণ তা স্পর্শ করে না O(n)=O(2n)।
বিগ-হে স্বরলিপি বর্ণনা কর্মক্ষমতা প্রসারণ
এর মূল অংশে, বিগ-ও নোটেশন কোনও অ্যালগরিদম চালাতে কতক্ষণ সময় নেয় তার বিবরণ নয়। এছাড়াও এটি কতগুলি ধাপ, কোডের রেখা বা একটি অ্যালগোরিদমকে তুলনা করে তার বর্ণনা নয়। ইনপুট সংখ্যার সাথে কীভাবে একটি অ্যালগোরিদম স্কেল করে তা বর্ণনা করার জন্য এটি সবচেয়ে কার্যকর।
উদাহরণস্বরূপ, বাইনারি অনুসন্ধান করুন। বাছাই করা তালিকা দেওয়া হল, আপনি কীভাবে এর অভ্যন্তরে একটি স্বেচ্ছাসেবক মান খুঁজে পাবেন? ঠিক আছে, আপনি মাঝখানে শুরু করতে পারে। যেহেতু তালিকাটি বাছাই করা হয়েছে, মাঝারি মানটি আপনাকে বলবে যে আপনার টার্গেটের মানটি তালিকার অর্ধেকের মধ্যে রয়েছে So সুতরাং আপনাকে যে তালিকাটি অনুসন্ধান করতে হবে সেটি এখন অর্ধেকে বিভক্ত। এটি পুনরাবৃত্তভাবে প্রয়োগ করা যেতে পারে, তারপরে নতুন তালিকার মাঝখানে যাবেন এবং এভাবে তালিকার আকার 1 না হওয়া পর্যন্ত আপনি নিজের মানটি খুঁজে পেয়েছেন (বা তালিকায় এটি বিদ্যমান নেই)। তালিকার আকার দ্বিগুণ করা কেবলমাত্র অ্যালগরিদমে আরও একটি পদক্ষেপ যুক্ত করে, এটি লোগারিথমিক সম্পর্ক। সুতরাং এই অ্যালগরিদম হয়O(logn)। লোগারিদম বেস 2, তবে এটি কোনও বিষয় নয় - সম্পর্কের মূলটি হ'ল তালিকার একটি ধ্রুবক মান দ্বারা কেবলমাত্র গুণকে সময়কে স্থির করে রাখে।
একটি অচলিত তালিকার মাধ্যমে একটি স্ট্যান্ডার্ড অনুসন্ধানের বিপরীতে - এক্ষেত্রে কোনও মান অনুসন্ধান করার একমাত্র উপায় হ'ল প্রতিটি পরীক্ষা করে। সবচেয়ে খারাপ ক্ষেত্রে (যা বিগ-ও বিশেষত বোঝায়) হ'ল আপনার মানটি একেবারে শেষে, যার অর্থ আকারের তালিকার জন্যn, আপনাকে যাচাই করতে হবে nমান। তালিকার আকার দ্বিগুণ করা আপনার যাচাই করতে হবে তার দ্বিগুণ দ্বিগুণ, যা লিনিয়ার সম্পর্ক।O(n)। এমনকি প্রতিটি মানের জন্য আপনাকে দুটি ক্রিয়াকলাপ করতে হয়েছিল এমনকি কিছু প্রক্রিয়াজাতকরণ উদাহরণস্বরূপ, রৈখিক সম্পর্ক এখনও ধরে রেখেছে।O(2n) এটি কেবল বর্ণনাকারী হিসাবে কার্যকর নয়, কারণ এটি ঠিক একই স্কেলিবিলিটিটিকে বর্ণনা করে O(n)।
আমি প্রশংসা করি যে এই উত্তরগুলির অনেকগুলিই মূলত আপনাকে বিগ-ও এর সংজ্ঞাটি পড়ে নিজেকে এই সিদ্ধান্তে আসতে বলেছে। তবে এই স্বজ্ঞাত বোঝাপড়াটি আমার মাথাটি চারপাশে মুড়িয়ে রাখতে বেশ খানিকটা সময় নিয়েছিল এবং তাই আমি এটিকে যতটা পারলাম পরিষ্কারভাবে আপনার কাছে রেখে দিলাম।