সংযোজন সময় জটিলতা


11

উইকিপিডিয়া হিসাবে যোগ করার সময় জটিলতার তালিকাবদ্ধ করে , যেখানে বিটের সংখ্যা bএনএনএন

এটি কি একটি অনমনীয় তাত্ত্বিক নীচে আবদ্ধ? বা এটিই এখনকার দ্রুততম পরিচিত অ্যালগরিদমের জটিলতা। আমি জানতে চাই, কারণ সংযোজনের জটিলতা অন্যান্য সমস্ত গাণিতিক ক্রিয়াকলাপ এবং এগুলি ব্যবহার করে এমন সমস্ত অ্যালগোরিদমকে আন্ডারস্কোর করে।

যে সংযোজন আলগোরিদম রয়েছে তা তাত্ত্বিকভাবে অসম্ভব ? বা আমরা সংযোজন জন্য লিনিয়ার জটিলতায় আবদ্ধ।(এন)

উত্তর:


17

যদি আপনার অ্যালগরিদম টাইমের তুলনায় asyptotically কম ব্যবহার করে , তবে এতে সংখ্যার যোগ করা সংখ্যার সমস্ত সংখ্যা পড়ার পক্ষে পর্যাপ্ত সময় নেই। আপনি কল্পনা করতে পারেন আপনি খুব বেশি সংখ্যক (যা 8MB টেক্সট ফাইলগুলিতে সঞ্চিত) পরিচালনা করছেন। অবশ্যই সংখ্যার মানটির তুলনায় খুব দ্রুত সংযোজন করা যেতে পারে ; এটি ( লগ ( এন ) ) সময়ে চলবে , যদি এন যোগফলের মান হয়।এনO(log(N))N

এর অর্থ এই নয় যে আপনি কিছুটা গতি বাড়িয়ে তুলতে পারেন; যদি আপনার প্রসেসর প্রতিটি অপারেশন 32 টি বিট পরিচালনা করে তবে আপনি এন ব্যবহার করেন বার, তবে এটি এখনও(এন)এবং(এন) নয়n32O(n)o(n)


তাত্ত্বিকভাবে প্রয়োজনীয় সমস্ত ডেটা পড়ছে । কোন দুটি সংখ্যার উপরন্তু জন্য এবং , একটি : একটি , একটি + + 2 একটি । গণনা করা হচ্ছে 2 একটি , মধ্যে সম্পন্ন করা যাবে হে ( 1 ) অপারেশন নাড়াচাড়া মাধ্যমে। একটি 0 যুক্ত করা হচ্ছে । এটা বিবেচনা করুন। আপনি যদি যোগফলের জন্য একটি দ্রুততর অনুমান না খুঁজে পান, অনুমানটি এটি সঠিক না হওয়া পর্যন্ত পরিমার্জন করুন। কম সময়ে এন অপারেশন? একটি,একটি:একটি,একটি+ +2একটি2একটিহে(1)0এন
টোবি আলাফিন

3
হ্যাঁ, এটি একটি তাত্ত্বিক প্রয়োজনীয়তা, কারণ: ইনপুটটির প্রতিটি বিট আউটপুটে অ-তুচ্ছভাবে ব্যবহৃত হয় , যেখানে অ-তুচ্ছভাবে আমি বোঝায় এটি সনাক্তকরণের কাজ নয়। আপনার উদাহরণ, কিনা 2 একটি মধ্যে নির্ণিত করা যেতে পারে হে ( 1 ) সময় গণনীয় মডেল নির্ভর করে: একটি সংযোজন 0 একটি ধ্রুবক সময় অপারেশন তারপর হ্যাঁ। আপনার যদি র‌্যাম অ্যাক্সেস থাকে তবে আপনার ইতিমধ্যে একটি , বা হে ( এন ) এর দৈর্ঘ্য জানা থাকলে বিটের ঠিকানা লিখতে আপনার ( লগ ( এন ) ) সময় প্রয়োজন2একটি2একটিহে(1)0হে(লগ(এন))একটিহে(এন)সময় তোমরা সবাই পড়তে আছে যদি খুঁজে বের করতে। এই সালে 2 একটি উদাহরণ, অনেক আউটপুট বিট ইনপুট বিট তুচ্ছ ফাংশন আছে। একটি2একটি
লিওউ ভিঙ্কুইজজেন

আমি একটি অ্যালগরিদম যে দৈর্ঘ্য খুঁজে বের করে আছে মধ্যে হে ( লগ ) । এটি বাইনারি অনুসন্ধান ব্যবহার করে। একটিহে(লগএন)
টবি আলাফিন

3
@ টোবিআলাফিন যদি আপনার মডেলটি র্যামের ঠিকানাটিকে সমর্থন করে তবে আপনার বাইনারি অনুসন্ধান পদক্ষেপে চলে, সঠিক। টুরিং মেশিনে এবং একটি পাঠ্য ফাইলটিতে মূল মেমোরিতে লোড করা যায় না, এটি O ( n ) সময় নেয় । উভয় ক্ষেত্রেই, আপনার প্রশ্নের উত্তর দিতে, সহ বা ছাড়া র্যাম লুকআপ গতি বাড়াতে অ্যাড্রেসিং, আপনার অ্যালগরিদম ইনপুট গনা সব বিট তাকান করতে হবে একটি + + । মনে করুন যে এটি হয়নি, এবং 42 বিটের একটি ইনপুটতে, এটি 6- বিটটি পরিদর্শন করে না । তারপরে আমি সেই বিটটি ফ্লিপ করতে পারি এবং এটি ভুল উত্তর দেয়। হে(লগএন)হে(এন)একটি+ +426
লিওউ ভিঙ্কুইজজেন

1
Ω(এন)

7

জটিলতার বিশ্লেষণকে যেকোনও আনুষ্ঠানিক ধারণা দেওয়ার জন্য, আপনাকে একটি আনুষ্ঠানিক গণনা মডেল নির্দিষ্ট করতে হবে যার মধ্যে অবজেক্টের অ্যালগোরিদম কার্যকর করা হচ্ছে, বা খুব কমপক্ষে একটি ব্যয় মডেল , যা উল্লেখ করে যে বেসিক ক্রিয়াকলাপগুলি কী এবং তাদের খরচ।

Θ(1)

Θ(|এক্স|)

এখন, অপারেশনগুলির তুলনায় কোনও ব্যয়ও কম হতে পারে? সম্ভবত, তবে আপনাকে আনুষ্ঠানিকভাবে একটি কম্পিউটেশনাল মডেলটি সংজ্ঞায়িত করতে হবে যাতে এটি ঘটতে পারে।


1
Θ(লগএন)এন

3

Ω(এন)

আপনার অ্যালগরিদম সফলভাবে প্রতিটি বিট না পড়ে 1010100110 এবং 0010010110 যুক্ত করুন। আপনার অ্যালগরিদমকে স্বেচ্ছাচারী ইনপুট যুক্ত করতে সক্ষম করার জন্য , আমি এলোমেলোভাবে এই বিটগুলির মধ্যে একটি ফ্লিপ করতে সক্ষম হওয়া উচিত, এবং অ্যালগরিদম এখনও একটি সঠিক (তবে পৃথক) সংযোজন করে। তবে যদি আপনার অ্যালগরিদম প্রতিটি বিট না পড়ে, তবে এটি কীভাবে বলতে পারে যে উল্টানো ইনপুটটি মূল ইনপুটটির চেয়ে আলাদা ছিল?


এন

একেবারে। আপনার অ্যালগরিদমে আপনাকে "আনুমানিক" অর্থ কী তা নির্ধারণ করতে হবে। এই সংজ্ঞাটির উপর নির্ভর করে, দুটি সবচেয়ে উল্লেখযোগ্য বিট যুক্ত করা একটি আনুমানিক যোগফল হতে পারে, যা ও (এন) সময়ে করা যেতে পারে । আপনি যখন "সংযোজন" অ্যালগরিদম উল্লেখ করেন, আমি মনে করি উত্তরটি অবশ্যই সঠিক হওয়া উচিত বলে আমরা সবাই এটি গ্রহণ করি।
মার্ডপাইরেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.