অ্যালগরিদম হে (লগ এন) হয় কিনা তা নির্ধারণ করা হচ্ছে


25

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

আমি ও (এন) এর সাথে জানি, আপনার সাধারণত একক লুপ থাকে; ও (এন ^ 2) একটি ডাবল লুপ; ও (এন ^ 3) একটি ট্রিপল লুপ ইত্যাদি, কীভাবে ও (লগ এন) সম্পর্কে?


2
stackoverflow.com/questions/749819/... অথবা এই সত্যিই লম্বা পড়ুন: stackoverflow.com/questions/487258/...
wkl

আহ, এটাই সেই জায়গা যেখানে আমি দেখিনি :)
আতিফ

উত্তর:


32

আমি ও (এন) এর সাথে জানি, আপনার সাধারণত একক লুপ থাকে; ও (এন ^ 2) একটি ডাবল লুপ; ও (এন ^ 3) একটি ট্রিপল লুপ ইত্যাদি, কীভাবে ও (লগ এন) সম্পর্কে?

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

for (i = 0; i < log2(input.count); i++) {
    doSomething(...);
}

সুতরাং, যে কোনও অ্যালগরিদম যেখানে প্রয়োজনীয় ক্রিয়াকলাপগুলির সংখ্যার ইনপুট আকারের লগারিদমের ক্রম হয় তা হ'ল (লগ এন)। বিগ-ও বিশ্লেষণ আপনাকে যে গুরুত্বপূর্ণ বিষয়টি বলেছে তা হ'ল কীভাবে কোনও অ্যালগরিদমের কার্য সম্পাদনের সময় ইনপুটটির আকারের সাথে সম্পর্কিত হয়: আপনি যদি ইনপুটটির আকার দ্বিগুণ করেন তবে অ্যালগরিদম আরও 1 টি পদক্ষেপ নেয় (ও (লগ এন)) , দ্বিগুণ পদক্ষেপ (ও (এন)), বহু পদক্ষেপের দ্বিগুণ (ও (এন ^ 2)), ইত্যাদি

এটি অভিজ্ঞতা থেকে জানতে সাহায্য করে যে বারবার তাদের ইনপুটটিকে পার্টিশন করে এমন আলগোরিদিমগুলি তাদের কার্য সম্পাদনের উপাদান হিসাবে 'লগ এন' করে? অবশ্যই। তবে বিভাজনটির জন্য সন্ধান করবেন না এবং এই সিদ্ধান্তে ঝাঁপুন না যে অ্যালগোরিদমের কার্যকারিতা হ'ল (লগ এন) - এটি ও (এন লগ এন) এর মতো কিছু হতে পারে, যা বেশ আলাদা different


3
মনে রাখবেন যে "আকারের লগারিদমের ক্রম অনুসারে" বলার জন্য আরও উচ্চারণের উপায়টি "" আকারের অঙ্কের সংখ্যার ক্রম অনুযায়ী "বলতে হয়।

স্কেলিংয়ের কথা বলার সময় ক্যালিব লগারিদমের আসল বেসটি গুরুত্বহীন।

@ কালেব কথা বলার বিষয়টি বিগ-ও দিয়ে বোঝা যায় না। একটি শব্দগুচ্ছ আপনার পছন্দ হতে পারে: যখন অঙ্কের সংখ্যা দ্বিগুণ হয়, পদক্ষেপের সংখ্যা দ্বিগুণ হয়।

@ কালেব কথা বলার বিষয়টি বিগ-ও দিয়ে বোঝা যায় না। একটি শব্দগুচ্ছ আপনার পছন্দ হতে পারে: যখন অঙ্কের সংখ্যা দ্বিগুণ হয়, পদক্ষেপের সংখ্যা দ্বিগুণ হয়।

@ থরবজরনআরভানএন্ডারসেন হ্যাঁ, এটিই "আকারের লোগারিদম" এর অর্থ। আপনি যে বাক্যটি আলাদাভাবে বলতে পছন্দ করেছেন তা বাদ দিয়ে বাক্যাংশটিতে আপনার সমস্যাটি কী তা আমি নিশ্চিত নই। মূলত, আমি মনে করি আমরা একমত হই।
কালেব

25

ধারণাটি হ'ল একটি অ্যালগরিদম হ'ল O(log n)যদি কোনও কাঠামো 1 দ্বারা 1 দ্বারা স্ক্রোল করার পরিবর্তে আপনি কাঠামোটিকে অর্ধ ওভারে বারে বিভক্ত করেন এবং প্রতিটি বিভাজনের জন্য অবিচ্ছিন্ন ক্রিয়াকলাপ করেন। উত্তর স্থানটি বিভক্ত হতে থাকে যেখানে অ্যালগরিদমগুলি অনুসন্ধান করুন O(log n)। এর উদাহরণ বাইনারি অনুসন্ধান , যেখানে আপনি নম্বর না পাওয়া পর্যন্ত আপনি অর্ডার দেওয়া অ্যারেটিকে অর্ধেক করে বারে বারে ভাগ করে রাখেন।

দ্রষ্টব্য: আপনার অগত্যা এমনকি অর্ধেক অংশে বিভক্ত হওয়ার প্রয়োজন নেই।


1
আমি যদি ইনপুটটিকে দুই ভাগে ভাগ করে ফেলি এবং তারপরে আবার বিভাজনের আগে বাকীটির উপর 2 ^ (n / 2) বার পুনরাবৃত্তি করি? (অবশ্যই আমি তখন কী জানি, আমি কেবল একটি উদাহরণ দেখাতে চেয়েছিলাম যেখানে এই সরল পদ্ধতিটি ব্যর্থ হয়)।
ট্যামস সেজেলি

@ আফিশ এটি একরকম বিরল। অনুসন্ধান করার সময় এটি দর্শনীয়ভাবে বিরল।
ডোনাল ফেলো

1
@ ডোনালফেল্লোস অ্যালগরিদম তত্ত্ব কোনও অনুগত বিজ্ঞান নয়। এবং প্রশ্ন অনুসন্ধান সম্পর্কে ছিল না, এটি কেবলমাত্র log nমানুষের মধ্যে ট্রিগারযুক্ত বাইনারি অনুসন্ধানের প্রতিক্রিয়ার উল্লেখ ।
ট্যামস সেজেলি

2
পার্টিশনটি অ্যালগোরিদম ও (লগ এন) করে না, এটি (সাধারণত) লগ এন এর একটি ফ্যাক্টর বিগ-ও সীমাতে যুক্ত করে। হিপসোর্ট এবং একত্রীকরণের মতো পুনরাবৃত্তিমূলক নিখুঁত উদাহরণ: এগুলি ইনপুট বিভক্ত করে, তবে তারপরে তারা পুনরায় ক্রমযুক্ত ফলাফল উভয় পার্টিশনকেই বিভাজন করে। ফলাফলটি হ'ল (এন লগ এন) কর্মক্ষমতা।
কালেব

@ আফিশ: ভালো কথা এই উত্তরটির সাথে আমার লক্ষ্যটি হ'ল প্রশ্নের প্রকৃতি বিবেচনা করে এটিকে যথাসম্ভব সহজ রাখা। আমি এই বিন্দুটি সহজেই অতিক্রম করার চেষ্টা করার জন্য আমি "আপনি কাঠামাকে অর্ধেক ভাগে ভাগ করুন ..." থেকে "আপনি কাঠামুকে অর্ধেক ভাগ করুন ... এবং প্রতিটি বিভাজনের জন্য অবিচ্ছিন্ন ক্রিয়াকলাপ করুন" আমি লাইনটি পরিবর্তন করেছি।
কেসি প্যাটন

2

সাধারণ উদাহরণগুলি বাইনারি অনুসন্ধানের সাথে সম্পর্কিত। উদাহরণস্বরূপ, বাইনারি অনুসন্ধান অ্যালগরিদম সাধারণত হয় O(log n)

আপনার যদি বাইনারি অনুসন্ধানের গাছ থাকে তবে লকআপ , সন্নিবেশ করা এবং মুছুন সমস্ত O(log n)জটিলতা।

আপনি নিয়মিতভাবে পার্টিশন করেন এমন যে কোনও পরিস্থিতিতে প্রায়শই কোনও log nউপাদান জড়িত থাকে । এ কারণেই অনেকগুলি বাছাই করা অ্যালগরিদমের O(nlog n)জটিলতা রয়েছে কারণ তারা প্রায়শই একটি সেট বিভাজন করে এবং যায় সেগুলি অনুসারে বাছাই করে।


1

আপনি যদি এটি "একক লুপ -> ও (এন), ডাবল লুপ -> ও (এন ^ 2)" এর মতো সহজ চান তবে উত্তরটি সম্ভবত "ট্রি -> ও (লগ এন)"। গাছকে মূল থেকে এক (সমস্ত নয়!) পাতা বা অন্য পথে গোল করে আরও নির্ভুলভাবে অনুসরণ করা। যাইহোক, এগুলি সমস্ত ওভারসিম্প্লিফিকেশন।


তো, আমার উত্তরে কী ভুল? আমি গঠনমূলক সমালোচনার জন্য উন্মুক্ত।
স্কার্ফরিজ

0

অ্যালগরিদম হে (লগ এন) হয় কিনা তা সনাক্ত করার কোনও সহজ উপায় আছে কিনা তা আপনি জানতে চান।

ঠিক আছে: চালান এবং সময় এটি। এটি ইনপুটগুলির জন্য চালান 1.000, 10.000, 100.000 এবং এক মিলিয়ন।

আপনি যদি 3,4,5,6 সেকেন্ডের (বা কিছু একাধিক) চলমান সময়ের মতো দেখতে পান তবে আপনি নিরাপদে এটি ও (লগ এন) বলতে পারবেন। যদি এটি আরও বেশি পছন্দ করে: 1,10,100,1000 সেকেন্ড তবে এটি সম্ভবত ও (এন)। এবং যদি এটি 3,40,500,6000 সেকেন্ডের মতো হয় তবে এটি ও (এন লগ এন)।


প্রত্যেকের সুস্পষ্ট কারণে উভয়কেই এই উত্তর দেওয়া উচিত:
gnasher729
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.