কিভাবে একটি অ্যালগরিদমের সময় জটিলতা সন্ধান করবেন


889

প্রশ্নটি

কিভাবে একটি অ্যালগরিদমের সময় জটিলতা সন্ধান করতে?

এসও-তে কোনও প্রশ্ন পোস্ট করার আগে আমি কী করেছি?

আমি মধ্য দিয়ে চলে গেছে এই , এই এবং অন্যান্য অনেক সংযোগগুলি

তবে যেখানে সময় জটিলতা গণনা করা যায় তার জন্য আমি স্পষ্ট এবং সোজা সামনের কোনও ব্যাখ্যা খুঁজে পাচ্ছিলাম না।

আমি কি জানি ?

নীচের মত একটি সহজ কোডের জন্য বলুন:

char h = 'y'; // This will be executed 1 time
int abc = 0; // This will be executed 1 time

নীচের মত লুপের জন্য বলুন:

for (int i = 0; i < N; i++) {        
    Console.Write('Hello World !');
}

int i = 0; এটি কেবল একবার কার্যকর করা হবে । সময়টি আসলে i=0ঘোষণার জন্য না করে গণনা করা হয় ।

i <এন; এটি এন + 1 বার কার্যকর করা হবে

আমি ++; এটি এন বার কার্যকর করা হবে

সুতরাং এই লুপ দ্বারা প্রয়োজনীয় অপারেশন সংখ্যা

{1+ (এন + 1) + এন} = 2 এন + 2

দ্রষ্টব্য: এটি এখনও ভুল হতে পারে, কারণ সময় জটিলতার গণনা সম্পর্কে আমার বোঝার বিষয়ে আমি আত্মবিশ্বাসী নই

আমি কি জানতে চাই ?

ঠিক আছে, সুতরাং এই ছোট বুনিয়াদি গণনাগুলি আমার মনে হয় আমি জানি তবে বেশিরভাগ ক্ষেত্রে আমি সময়ের জটিলতা দেখেছি

হে (ঢ) হে (N2), হে (লগ ঢ) হে (ঢ!) .... এবং অনেক অন্যান্য ,

কেউ কীভাবে আমাকে বুঝতে সাহায্য করতে পারেন যে কীভাবে একজন অ্যালগরিদমের সময় জটিলতা গণনা করে? আমি নিশ্চিত যে আমার মতো প্রচুর নবাগত শিশু এটি জানতে চায়।


138
আগ্রহীদের জন্য বোনাস: বিগ হে চিট শীট বিগোচিটশিট ডটকম
মিশনফোর্ড

4
এই ব্লগটি দেখুন: mohalgorithmsorbit.blogspot.com । এটি পুনরাবৃত্ত এবং (বিশেষত) পুনরাবৃত্ত আলগোরিদিম উভয়কেই কভার করে।
মোহাম্মদ এন্নাহাদি এল ইদ্রিসি

1
কেন কনসোল.উরাইট ('হ্যালো ওয়ার্ল্ড!'); একটি মেশিন নির্দেশ না?
চেতন


1
@ চেটান যদি আপনার বোঝায় যে Console.Writeজটিলতা নিরূপণের সময় আপনার বিবেচনা করা উচিত , এটি সত্য, তবে এই ক্ষেত্রে কিছুটা অপ্রাসঙ্গিকও, কারণ এটি কেবল একটি ধ্রুবক কারণকে পরিবর্তন করে, যা বিগ-ও উপেক্ষা করে (উত্তরগুলি দেখুন), সুতরাং শেষ ফলাফলটি এখনও রয়েছে ও (এন) এর জটিলতা।
বার্নহার্ড বার্কার

উত্তর:


394

কিভাবে একটি অ্যালগরিদমের সময় জটিলতা সন্ধান করবেন

আপনি কতগুলি মেশিন নির্দেশাবলী যুক্ত করেন এটি এর ইনপুটটির আকারের ফাংশন হিসাবে কার্যকর করবে এবং তারপরে বৃহত্তর (যখন এন খুব বড় হয়) পদে অভিব্যক্তিটিকে সরল করুন এবং কোনও সরলকরণকারী ধ্রুবক উপাদানকে অন্তর্ভুক্ত করতে পারেন।

উদাহরণস্বরূপ, আসুন আমরা 2N + 2এটিকে ঠিক হিসাবে বর্ণনা করার জন্য মেশিনের নির্দেশাবলী কীভাবে সহজ করি তা দেখতে দিন O(N)

আমরা দু'জনকে কেন সরিয়ে 2দেব?

এন বড় হওয়ার সাথে সাথে আমরা অ্যালগরিদমের পারফরম্যান্সে আগ্রহী।

2N এবং 2 দুটি পদ বিবেচনা করুন।

এন বড় হওয়ার সাথে সাথে এই দুটি পদটির আপেক্ষিক প্রভাব কী? ধরা যাক এন মিলিয়ন।

তারপরে প্রথম মেয়াদটি 2 মিলিয়ন এবং দ্বিতীয় মেয়াদটি মাত্র 2।

এই কারণে, আমরা বড় এন এর বৃহত্তম শর্তাদি বাদে সমস্ত বাদ দিই

সুতরাং, এখন আমরা থেকে 2N + 2গিয়েছিলাম 2N

Ditionতিহ্যগতভাবে, আমরা কেবল ধ্রুবক কারণ পর্যন্ত পারফরম্যান্সে আগ্রহী ।

এর অর্থ হ'ল এন বড় হয়ে গেলে পারফরম্যান্সে কিছু ধ্রুব পার্থক্য রয়েছে কিনা তা আমরা সত্যিই চিন্তা করি না। 2N এর ইউনিট যাইহোক প্রথম স্থানে ভালভাবে সংজ্ঞায়িত করা হয়নি। সুতরাং আমরা সহজ অভিব্যক্তি পেতে একটি ধ্রুবক ফ্যাক্টর দ্বারা গুণ বা ভাগ করতে পারি।

তাই 2Nন্যায়বান হয় N


53
ওহে আমাকে "কেন ও (2 এন + 2) ও (এন) কে খুব সুন্দরভাবে ব্যাখ্যা করার জন্য ধন্যবাদ, তবে এটি কেবল আরও বড় প্রশ্নের একটি অংশ ছিল, আমি চাইছিলাম যে কোনও ব্যক্তি কোনও লুকানো সংস্থার সাথে কোনও লিঙ্কের দিকে নির্দেশ করতে পারে বা এতে জেনারেল আমি জানতে চেয়েছিলাম যে আপনি কীভাবে ও (এন), ও (এন 2), ও (লগ এন), ও (এন!) ইত্যাদি জটিলতার সাথে শেষ করতে পারেন। আমি জানি আমি অনেক জিজ্ঞাসা করতে পারি তবে তবুও আমি চেষ্টা করতে পারি: {)
ইয়াসের শায়খ

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

4
উত্তরের উত্তর প্রদান করা ভবিষ্যতের পাঠকদের জন্য অনেক সাহায্য করবে। কেবলমাত্র একটি লিঙ্ক হস্তান্তর করা যার জন্য আমাকে সাইনআপ করতে হবে, যখন আমি কেবল কিছু সুন্দরভাবে বর্ণিত পাঠ্যটি দিয়ে যেতে চাই তখন সত্যিই আমাকে সাহায্য করে না।
খারাপ_কিপয়েন্ট

2
আমি ডিএস এবং সময় জটিলতার উপর ভাল জ্ঞান পেতে চাইলে ডঃ নবীন গার্গের (আইআইটি দিল্লি অধ্যাপক) ভিডিওগুলি দেখার পরামর্শ দিচ্ছি। লিঙ্কটি দেখুন। nptel.ac.in/courses/106102064
রোহিত বান্দিল

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

389

এটি একটি দুর্দান্ত নিবন্ধ: http://www.daniweb.com/software-de વિકાસ ment / কম্পিউটার কম্পিউটার / বিজ্ঞান / পাঠ্য / 13488/ time-complexity- of- algorithm

নীচের উত্তরটি উপরে থেকে অনুলিপি করা হয়েছে (যদি দুর্দান্ত লিঙ্কটি আবদ্ধ হয়)

সময়ের জটিলতা গণনার জন্য সর্বাধিক সাধারণ মেট্রিক হ'ল বিগ ও স্বরলিপি। এটি সমস্ত ধ্রুবক কারণগুলি সরিয়ে দেয় যাতে চলমান সময়টি N এর সাথে সম্পর্কিত হিসাবে অনুমান করা যায় যেহেতু N অসীমের কাছে যায়। সাধারণভাবে আপনি এটি এরকমভাবে ভাবতে পারেন:

statement;

ধ্রুবক। উক্তির চলমান সময়টি এন এর সাথে পালটে যাবে না relation

for ( i = 0; i < N; i++ )
     statement;

রৈখিক লুপের চলমান সময়টি সরাসরি N এর সাথে আনুপাতিক হয় When যখন এন দ্বিগুণ হয়, তখন চলমান সময়টিও ঘটে।

for ( i = 0; i < N; i++ ) {
  for ( j = 0; j < N; j++ )
    statement;
}

চতুর্ভুজ হয়। দুটি লুপের চলমান সময়টি N এর বর্গক্ষেত্রের সাথে সমানুপাতিক হয় যখন এন দ্বিগুণ হয়, চলমান সময় N * N দ্বারা বৃদ্ধি পায় When

while ( low <= high ) {
  mid = ( low + high ) / 2;
  if ( target < list[mid] )
    high = mid - 1;
  else if ( target > list[mid] )
    low = mid + 1;
  else break;
}

লোগারিথমিক। অ্যালগরিদমের চলমান সময়টি 2 টি 2 দ্বারা ভাগ করা যায় এমন সংখ্যার সাথে সমানুপাতিক This

void quicksort ( int list[], int left, int right )
{
  int pivot = partition ( list, left, right );
  quicksort ( list, left, pivot - 1 );
  quicksort ( list, pivot + 1, right );
}

এন এন লগ (এন)। চলমান সময়টিতে এন লুপগুলি (পুনরাবৃত্ত বা পুনরাবৃত্ত) থাকে যা লোগারিদমিক হয়, সুতরাং অ্যালগরিদমটি লিনিয়ার এবং লোগারিদমিকের সংমিশ্রণ।

সাধারণভাবে, প্রতিটি আইটেমের সাথে এক মাত্রায় কিছু করা লিনিয়ার, প্রতিটি আইটেমের সাথে দুটি মাত্রায় কিছু করা চতুর্ভুজযুক্ত, এবং কর্মক্ষেত্রকে অর্ধেকভাগে ভাগ করা লোগারিথমিক। ঘনক, ঘৃণ্য এবং বর্গমূলের মতো আরও বিগ ও ব্যবস্থা রয়েছে তবে সেগুলি প্রায় সাধারণ নয়। বিগ হে নোটেশনটি O ( <type> )কোথায় <type>পরিমাপ তা বর্ণিত হয়েছে । কুইকোর্টোর্ট অ্যালগরিদম হিসাবে বর্ণনা করা হবে O ( N * log ( N ) )

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


10
Quicksort যদিও এই আচরণ বিরল সবচেয়ে খারাপ ক্ষেত্রে আলগোরিদিম, এন ^ 2 একটি চলমান সময় আছে।
এনবিরো 8

2
আইআইআরসি, লিডল ও ও বিগ ওমেগা সর্বোত্তম এবং গড় কেস জটিলতার জন্য ব্যবহৃত হয় (বিগ ও এর সাথে সবচেয়ে খারাপ পরিস্থিতি রয়েছে), তাই "সেরা, গড় এবং সবচেয়ে খারাপ কেস ব্যবস্থা। প্রত্যেকটির নিজস্ব বিগ ও স্বরলিপি থাকবে।" ভুল হবে। আরও নির্দিষ্ট অর্থ সহ আরও বেশি চিহ্ন রয়েছে এবং সিএস সর্বদা উপযুক্ত প্রতীক ব্যবহার করে না। আমি ল্যান্ডাউ প্রতীক বিটিডব্লিউ নামে এই সমস্তগুলি শিখতে এসেছি । +1 যাইহোক বি / সি সেরা উত্তর।
hiergiltdiestfu

@ হাইগার্টডিস্টফু বিগ-ও, বিগ-ওমেগা ইত্যাদি কোনও অ্যালগোরিদমের সেরা, গড় বা সবচেয়ে খারাপ ক্ষেত্রে যে কোনও একটিতে প্রয়োগ করা যেতে পারে। কীভাবে ও ও worst সবচেয়ে খারাপ এবং সেরা ক্ষেত্রে সম্পর্কিত?
বার্নহার্ড বার্কার

: এছাড়াও, কিভাবে কোন পদ্ধতির জন্য বড় হে নিরূপণ করা খুঁজছেন কেউ যদি হয় stackoverflow.com/a/60354355/4260691
OhadM

অন্যতম সেরা ব্যাখ্যা।
শিবরাজ পাতিল

172

এখান থেকে নেওয়া - একটি অ্যালগরিদমের সময় জটিলতার পরিচয়

1। পরিচিতি

কম্পিউটার বিজ্ঞানে, একটি অ্যালগরিদমের সময় জটিলতা ইনপুট প্রতিনিধিত্ব করে স্ট্রিংয়ের দৈর্ঘ্যের ফাংশন হিসাবে চালানোর জন্য অ্যালগরিদম দ্বারা যে পরিমাণ সময় নিয়েছিল তা পরিমাণযুক্ত করে।

2. বিগ হে স্বরলিপি

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

উদাহরণস্বরূপ, যদি আকার n এর সমস্ত ইনপুটগুলিতে অ্যালগরিদমের জন্য প্রয়োজনীয় সময় সর্বাধিক 5n 3 + 3n হয়, অ্যাসিম্পটোটিক সময়ের জটিলতা হ'ল (এন 3 )। আরও পরে।

আরও কয়েকটি উদাহরণ:

  • 1 = ও (এন)
  • n = O (n 2 )
  • লগ (এন) = ও (এন)
  • 2 এন + 1 = ও (এন)

3. ও (1) ধ্রুব সময়:

একটি অ্যালগরিদম ইনপুট আকার নির্বিশেষে একই পরিমাণ সময় প্রয়োজন হলে ধ্রুবক সময় চলতে বলা হয়।

উদাহরণ:

  • অ্যারে: যে কোনও উপাদান অ্যাক্সেস করা
  • স্থির আকারের স্ট্যাক: পুশ এবং পপ পদ্ধতি
  • স্থির আকারের সারি: এনকুই এবং ডিক্যু পদ্ধতিগুলি

4. ও (এন) লিনিয়ার সময়

একটি অ্যালগরিদম লিনিয়ার সময়ে চলতে বলা হয় যদি এর সময় সম্পাদন সরাসরি ইনপুট আকারের সাথে সমানুপাতিক হয়, অর্থাৎ ইনপুট আকার বাড়ার সাথে সাথে সময় রৈখিকভাবে বৃদ্ধি পায়।

নিম্নলিখিত উদাহরণগুলি বিবেচনা করুন, নীচে আমি একটি উপাদানকে রৈখিকভাবে অনুসন্ধান করছি, এটি ও (এন) এর একটি সময়ের জটিলতা রয়েছে।

int find = 66;
var numbers = new int[] { 33, 435, 36, 37, 43, 45, 66, 656, 2232 };
for (int i = 0; i < numbers.Length - 1; i++)
{
    if(find == numbers[i])
    {
        return;
    }
}

আরও উদাহরণ:

  • অ্যারে: লিনিয়ার সন্ধান, ট্র্যাভারসিং, ন্যূনতম অনুসন্ধান করুন
  • অ্যারেলিস্ট: পদ্ধতি রয়েছে
  • সারি: পদ্ধতি রয়েছে

5. ও (লগ এন) লগারিদমিক সময়:

একটি অ্যালগরিদম লগারিদমিক সময়ে চালিত হয় বলে যদি এর সময় সম্পাদন ইনপুট আকারের লগারিদমের সাথে সমানুপাতিক হয়।

উদাহরণ: বাইনারি অনুসন্ধান

"বিশটি প্রশ্ন" গেমটি স্মরণ করুন - কাজটি হ'ল একটি বিরতিতে একটি লুকানো সংখ্যার মান অনুমান করা। প্রতিবার আপনি অনুমান করার সময় আপনাকে অনুমান করা হয় যে আপনার অনুমানটি খুব বেশি বা খুব কম। বিশটি প্রশ্ন গেমটি এমন একটি কৌশল বোঝায় যা আপনার অনুমান নম্বরটি ব্যবধানের আকার অর্ধেক করতে ব্যবহার করে। এটি বাইনারি অনুসন্ধান হিসাবে পরিচিত সাধারণ সমস্যা সমাধানের পদ্ধতির একটি উদাহরণ

6. ও (এন 2 ) চতুর্ভুজ সময়

একটি অ্যালগরিদম চতুর্ভুজ সময়ে চলতে বলা হয় যদি এর সময় সম্পাদন ইনপুট আকারের বর্গক্ষেত্রের সমানুপাতিক হয়।

উদাহরণ:

7. কিছু দরকারী লিঙ্ক


17
দ্রষ্টব্য: প্রথম লিঙ্কটি নষ্ট হয়ে গেছে।
জিজি

2
বিভ্রান্তি এড়াতে ও (এন 2) ও (এন ^ 2) লিখতে হবে।
রিজকি হাদিয়াতুররাস্যেদ

100

যদিও এই প্রশ্নের জন্য কিছু ভাল উত্তর রয়েছে। আমি এখানে বেশ কয়েকটি উদাহরণ সহ আরও একটি উত্তর দিতে চাই loop

  • ও (এন) : একটি লুপের সময় জটিলতাটিকে ও (এন) হিসাবে বিবেচনা করা হয় যদি লুপ ভেরিয়েবলগুলি ধ্রুবক পরিমাণে বাড়ানো / হ্রাস করা হয়। উদাহরণস্বরূপ নিম্নলিখিত ফাংশনগুলিতে ও (এন) সময় জটিলতা রয়েছে।

    // Here c is a positive integer constant   
    for (int i = 1; i <= n; i += c) {  
        // some O(1) expressions
    }
    
    for (int i = n; i > 0; i -= c) {
        // some O(1) expressions
    }
    
  • ও (এন ^ সি) : নেস্টেড লুপগুলির সময়ের জটিলতা আন্তঃতম বিবৃতিটি সম্পাদনের সময়টির সমান। উদাহরণস্বরূপ নীচের নমুনা লুপগুলিতে ও (এন ^ 2) সময়ের জটিলতা রয়েছে

    for (int i = 1; i <=n; i += c) {
       for (int j = 1; j <=n; j += c) {
          // some O(1) expressions
       }
    }
    
    for (int i = n; i > 0; i += c) {
       for (int j = i+1; j <=n; j += c) {
          // some O(1) expressions
    }
    

    উদাহরণস্বরূপ বাছাই বাছাই এবং সন্নিবেশ সাজানোর ক্ষেত্রে ও (এন ^ 2) সময়ের জটিলতা রয়েছে।

  • ও (লগন) একটি লুপের সময়ের জটিলতাটিকে ও (লগন) হিসাবে বিবেচনা করা হয় যদি লুপের ভেরিয়েবলগুলি স্থির পরিমাণে বিভক্ত / গুণিত হয়।

    for (int i = 1; i <=n; i *= c) {
       // some O(1) expressions
    }
    for (int i = n; i > 0; i /= c) {
       // some O(1) expressions
    }
    

    উদাহরণস্বরূপ বাইনারি অনুসন্ধানে ও (লগন) সময়ের জটিলতা রয়েছে।

  • ও (লগলগন) একটি লুপের সময় জটিলতাটিকে ও (লগলগন) হিসাবে বিবেচনা করা হয় যদি লুপের ভেরিয়েবলগুলি ধ্রুবক পরিমাণে তাত্পর্যপূর্ণভাবে হ্রাস / বাড়ানো হয়।

    // Here c is a constant greater than 1   
    for (int i = 2; i <=n; i = pow(i, c)) { 
       // some O(1) expressions
    }
    //Here fun is sqrt or cuberoot or any other constant root
    for (int i = n; i > 0; i = fun(i)) { 
       // some O(1) expressions
    }
    

সময়ের জটিলতা বিশ্লেষণের একটি উদাহরণ

int fun(int n)
{    
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j < n; j += i)
        {
            // Some O(1) task
        }
    }    
}

বিশ্লেষণ :

For i = 1, the inner loop is executed n times. For i = 2, the inner loop is executed approximately n/2 times. For i = 3, the inner loop is executed approximately n/3 times. For i = 4, the inner loop is executed approximately n/4 times. ……………………………………………………. For i = n, the inner loop is executed approximately n/n times.

সুতরাং উপরের অ্যালগরিদমের মোট সময় জটিলতা (n + n/2 + n/3 + … + n/n), যা হয়ে যায়n * (1/1 + 1/2 + 1/3 + … + 1/n)

সিরিজ সম্পর্কে গুরুত্বপূর্ণ জিনিসটি (1/1 + 1/2 + 1/3 + … + 1/n)হ'ল সমান (লগন) । সুতরাং উপরের কোডটির জটিলতা হ'ল ও (এনলগন)


রেফ: 1 2 3


1
@ সিমন, আপনি কি অনুমান করতে পারেন কোন অংশটি ভুল?
zangw

জিজ্ঞাসা করার জন্য ধন্যবাদ. আমি কোডটি ভুল লিখেছি। আমি আমার মন্তব্য মুছে ফেললাম। দুঃখিত!
সাইমন

74

উদাহরণ সহ সময়ের জটিলতা

1 - বুনিয়াদি অপারেশনস (গাণিতিক, তুলনা, অ্যারের উপাদানগুলিতে অ্যাক্সেস করা, কার্যনির্বাহীকরণ): চলমান সময় সর্বদা স্থির থাকে O (1)

উদাহরণ:

read(x)                               // O(1)
a = 10;                               // O(1)
a = 1.000.000.000.000.000.000         // O(1)

2 - যদি অন্য বিবৃতি হয়: কেবলমাত্র দুটি বা ততোধিক সম্ভাব্য বিবৃতি থেকে সর্বোচ্চ চলমান সময় নেওয়া।

উদাহরণ:

age = read(x)                               // (1+1) = 2
if age < 17 then begin                      // 1
      status = "Not allowed!";              // 1
end else begin
      status = "Welcome! Please come in";   // 1
      visitors = visitors + 1;              // 1+1 = 2
end;

সুতরাং, উপরের সিউডো কোডটির জটিলতা টি (এন) = 2 + 1 + সর্বোচ্চ (1, 1 + 2) = 6. সুতরাং, এর বড় ওহ এখনও ধ্রুবক টি (এন) = ও (1)।

3 - লুপিং (এর জন্য, পুনরাবৃত্তি করার জন্য): এই বিবৃতিটির জন্য চলমান সময়টি সেই লুপিংয়ের অভ্যন্তরে অপারেশন সংখ্যা দ্বারা গুণিত লুপিংয়ের সংখ্যা।

উদাহরণ:

total = 0;                                  // 1
for i = 1 to n do begin                     // (1+1)*n = 2n
      total = total + i;                    // (1+1)*n = 2n
end;
writeln(total);                             // 1

সুতরাং, এর জটিলতা হ'ল টি (এন) = 1 + 4 এন + 1 = 4 এন + 2. সুতরাং, টি (এন) = ও (এন)।

4 - নেস্টেড লুপ (লুপিংয়ের ভিতরে লুপিং): যেহেতু মূল লুপিংয়ের ভিতরে কমপক্ষে একটি লুপিং রয়েছে, তাই এই বিবৃতিটির চলমান সময় হে (এন ^ 2) বা ও (এন ^ 3) ব্যবহৃত হয়।

উদাহরণ:

for i = 1 to n do begin                     // (1+1)*n  = 2n
   for j = 1 to n do begin                  // (1+1)n*n = 2n^2
       x = x + 1;                           // (1+1)n*n = 2n^2
       print(x);                            // (n*n)    = n^2
   end;
end;

প্রচলিত চলমান সময়

অ্যালগরিদম বিশ্লেষণ করার সময় কিছু প্রচলিত সময় রয়েছে:

  1. ও (1) - ধ্রুবক সময় ধ্রুবক সময় মানে চলমান সময় ধ্রুবক হয়, এটি ইনপুট আকার দ্বারা প্রভাবিত হয় না

  2. ও (এন) - লিনিয়ার সময় যখন একটি অ্যালগরিদম n ইনপুট আকার গ্রহণ করে, এটি n ক্রিয়াকলাপও সম্পাদন করবে।

  3. ও (লগ এন) - লোগারিদমিক সময় অ্যালগরিদম যার চলমান সময় রয়েছে (লগ এন) ও (এন) এর চেয়ে সামান্য দ্রুত। সাধারণত, অ্যালগরিদম সমস্যাটিকে একই আকারের সাব সমস্যাগুলিতে ভাগ করে দেয়। উদাহরণ: বাইনারি অনুসন্ধান অ্যালগরিদম, বাইনারি রূপান্তর অ্যালগরিদম।

  4. ও (এন লগ এন) - রৈখিক সময় এই চলমান সময়টি প্রায়শই "বিভাজন ও বিজয় অ্যালগোরিদম" পাওয়া যায় যা সমস্যাটিকে পুনরাবৃত্তভাবে সাব-সমস্যায় বিভক্ত করে এবং তারপরে এন সময়ে মার্জ করে। উদাহরণ: বাছাই অ্যালগরিদম।

  5. ও (এন 2 ) - চতুষ্কোণ সময় চেহারা বুদ্বুদ বাছাই অ্যালগরিদম!

  6. ও (এন 3 ) - কিউবিক সময় এর ও (এন 2 ) এর সাথে একই নীতি রয়েছে ।

  7. ও (২ এন ) - ক্ষতিকারক সময়টি ইনপুট বড় হওয়ায় এটি খুব ধীর হয়, যদি এন = 1000.000, টি (এন) হবে 21000.000। ব্রুট ফোর্স অ্যালগরিদমের এই চলমান সময় রয়েছে।

  8. ও (এন!) - স্বল্পমাত্রার সময় উদাহরণ: ট্র্যাভেল সেলসম্যান প্রবলেম (টিএসপি)

এই নিবন্ধ থেকে নেওয়া । খুব ভাল ব্যাখ্যা করা উচিত একটি পড়া উচিত।


আপনার 2nd উদাহরণে, আপনি লিখেছেন visitors = visitors + 1হয় 1 + 1 = 2। আপনি দয়া করে আমাকে ব্যাখ্যা করতে পারেন আপনি কেন এমন করলেন?
সজিব আচার্য

3
@ সজিব আচার্য এটি ডান থেকে বামে দেখুন প্রথম পদক্ষেপ: visitors + 1 দ্বিতীয় পদক্ষেপ গণনা করুন : প্রথম ধাপ থেকে মান নির্ধারণ করুন visitors সুতরাং উপরের অভিব্যক্তি দুটি বিবৃতি গঠিত হয়; প্রথম পদক্ষেপ + দ্বিতীয় পদক্ষেপ => 1 + 1 = 2
বোজিদার সিকানজিক

@ এনব্রো কেন এটি 1 + 1 ইনage = read(x) // (1+1) = 2
হামটি

@ বোজিদারসিকানজিক কেন এটি 1 + 1 ইনage = read(x) // (1+1) = 2
হামটি

1
@ হুমটি এই উত্তরের সূচনা পরীক্ষা করুন: read(x) // O(1) a = 10; // O(1)প্রথমটি ফাংশন কল => ও (1) ///// দ্বিতীয়টি এসাইনমেন্ট, যেমন এনবিও বলেছে, তবে 10 স্থির, সুতরাং দ্বিতীয়টি => ও (1) ...
বোজিদার সিকানজিক

41

আপনি কোড বিশ্লেষণ করার সময়, প্রতিটি ক্রিয়াকলাপ গণনা করা / সময়ের জটিলতা স্বীকার করে আপনাকে শেষ লাইনে এটিকে বিশ্লেষণ করতে হবে, পুরো চিত্রটি পাওয়ার জন্য আপনাকে এটিকে যোগ করতে হবে।

উদাহরণস্বরূপ, লিনিয়ার জটিলতার সাথে আপনার একটি সাধারণ লুপ থাকতে পারে তবে পরে একই প্রোগ্রামে আপনার একটি ট্রিপল লুপ থাকতে পারে যার ঘন জটিল রয়েছে , সুতরাং আপনার প্রোগ্রামটি কিউবিক জটিলতা পাবে । বৃদ্ধির ফাংশন ক্রমটি এখানে খেলতে আসে।

আসুন দেখে নেওয়া যাক অ্যালগোরিদমের সময় জটিলতার জন্য কী কী সম্ভাবনা রয়েছে, আপনি উপরে বর্ণিত ক্রম ক্রম দেখতে পারেন:

  • ধ্রুব সময় বৃদ্ধির একটি আদেশ হয়েছে1উদাহরণস্বরূপ: a = b + c

  • লোগারিদমিক সময়টির ক্রম বৃদ্ধির ক্রমLogNথাকে, সাধারণত আপনি যখন অর্ধেক (বাইনারি অনুসন্ধান, গাছ, এমনকি লুপগুলি)কোনওকিছু ভাগ করে নিচ্ছেন বা কোনওভাবে কোনওভাবে গুণিত করেন তখন তা ঘটে।

  • লিনিয়ার , বৃদ্ধির ক্রমNউদাহরণস্বরূপ

    int p = 0;
    for (int i = 1; i < N; i++)
      p = p + 2;
    
  • লিনিয়ারিথমিক , বৃদ্ধির ক্রমn*logNহয় সাধারণত বিভাজনে এবং অ্যালগোরিদমকে জয় করতে।

  • কিউবিক , বৃদ্ধির ক্রমN^3, সর্বোত্তম উদাহরণটি একটি ট্রিপল লুপ যেখানে আপনি সমস্ত ট্রিপল্ট পরীক্ষা করেন:

    int x = 0;
    for (int i = 0; i < N; i++)
       for (int j = 0; j < N; j++)
          for (int k = 0; k < N; k++)
              x = x + 2
    
  • সূচকীয় , বৃদ্ধির ক্রম2^Nসাধারণত যখন আপনি নিখরচায় অনুসন্ধান করেন তখন ঘটে থাকে, উদাহরণস্বরূপ কিছু সেটের সাবসেটগুলি পরীক্ষা করুন।


যদি এমনটি হত তবে জটিলতা কী হবে? (int i = 0; i <N; i ++) এর জন্য (int j = i + 1; j <N; j ++) এর জন্য (int k = j + 1; k <N; k ++) x = x + 2
ব্যবহারকারী3156040

35

আলগাভাবে বলতে গেলে সময়ের জটিলতা সংক্ষিপ্ত করার একটি উপায় যা ইনপুট আকার বাড়ার সাথে সাথে অ্যালগোরিদমের ক্রিয়াকলাপ বা রান-টাইম কীভাবে বৃদ্ধি পায়।

জীবনের বেশিরভাগ জিনিসের মতো একটি ককটেল পার্টি আমাদের বুঝতে সাহায্য করতে পারে।

চালু)

আপনি যখন পার্টিতে পৌঁছেছেন তখন আপনাকে সবার হাত কাঁপতে হবে (প্রতিটি আইটেমটিতে একটি অপারেশন করুন)। উপস্থিতদের সংখ্যা Nবাড়ার সাথে সাথে আপনার হাত নেড়ে নিতে সময় / কাজের সময় লাগবে যেমন বাড়ছে O(N)

কেন O(N)এবং না cN?

মানুষের সাথে হাত মিলাতে যে পরিমাণ সময় লাগে তাতে তারতম্য রয়েছে। আপনি এটি গড়তে পারেন এবং একটি ধ্রুবক এ এটি ক্যাপচার করতে পারেন c। তবে এখানে মৌলিক ক্রিয়াকলাপ - সবার সাথে হাত মিলানো --- সর্বদা আনুপাতিক হবে O(N), তা যাই হোক না কেন c। আমাদের ককটেল পার্টিতে যাওয়া উচিত কিনা তা নিয়ে বিতর্ক করার সময় আমরা প্রায়শই বেশি আগ্রহী যে এই সভাগুলি কেমন হবে তার বিশদ বিবরণের চেয়ে আমাদের সবার সাথে দেখা করতে হবে।

O (n ^ 2)

ককটেল পার্টির হোস্টটি চায় আপনি একটি নির্বোধ খেলা খেলেন যেখানে প্রত্যেকে প্রত্যেকের সাথে দেখা করে। সুতরাং, আপনাকে অবশ্যই N-1অন্য লোকের সাথে দেখা করতে হবে এবং, কারণ পরবর্তী ব্যক্তি ইতিমধ্যে আপনার সাথে দেখা করেছে, তাদের অবশ্যই N-2লোকদের সাথে দেখা করতে হবে , ইত্যাদি। এই সিরিজের যোগফল x^2/2+x/2। উপস্থিতদের সংখ্যা বাড়ার সাথে সাথে এই x^2শব্দটি দ্রুতগতিতে আসে , সুতরাং আমরা কেবল সমস্ত কিছু বাদ দিই।

O (n ^ 3)

আপনাকে অন্য সবার সাথে দেখা করতে হবে এবং প্রতিটি বৈঠকের সময় আপনার অবশ্যই রুমে থাকা প্রত্যেকের সম্পর্কে কথা বলতে হবে।

হে (1)

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

ও (লগ এন)

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

ও (এন লগ এন)

উপরের অ্যালগরিদম ব্যবহার করে আপনি টেবিলে কোথায় বসবেন তা খুঁজে পেতে পারেন। যদি প্রচুর সংখ্যক লোক টেবিলে আসে, একবারে এবং একবারে এই কাজটি করে, এটি ও (এন লগ এন) সময় নিতে পারে। এটি প্রমাণিত হয় যে কোনও আইটেমের সংগ্রহের তুলনা করার সময় সেটিকে সাজানোর জন্য কত সময় লাগে।

সেরা / সবচেয়ে খারাপ কেস

আপনি পার্টিতে পৌঁছেছেন এবং ইনিগোটি সন্ধান করতে হবে - এটি কতক্ষণ সময় নেবে? এটি আপনি পৌঁছানোর উপর নির্ভর করে। সবাই যদি চারপাশে কল্পনা করে থাকে যে আপনি সবচেয়ে খারাপ ক্ষেত্রে আঘাত করেছেন: এটিতে O(N)সময় লাগবে । তবে, সবাই যদি টেবিলে বসে থাকেন তবে O(log N)সময় লাগবে মাত্র । অথবা হতে পারে আপনি হোস্টের ওয়াইনগ্লাস-চেঁচানোর শক্তিটি উত্তোলন করতে পারেন এবং এটিতে O(1)সময় লাগবে ।

হোস্টটি অনুপলব্ধ বলে ধরে নিলে, আমরা বলতে পারি যে আপনি পৌঁছানোর সময় দলের অবস্থার উপর নির্ভর করে ইনিগো-ফাইন্ডিং অ্যালগরিদমের একটি নিম্ন-সীমা O(log N)এবং একটি উপরের-সীমানা রয়েছে O(N)

স্পেস এবং যোগাযোগ

অ্যালগরিদম কীভাবে স্থান বা যোগাযোগ ব্যবহার করে তা বোঝার জন্য একই ধারণাগুলি প্রয়োগ করা যেতে পারে।

প্রাক্তন সম্পর্কে "গানের জটিলতা" শিরোনামে নূত একটি সুন্দর কাগজ লিখেছেন ।

উপপাদ্য 2: জটিলতা ও (1) এর ইচ্ছামত দীর্ঘ গান আছে।

প্রুফ: (ক্যাসি এবং সানশাইন ব্যান্ডের কারণে)। (15) দ্বারা সংজ্ঞায়িত গানগুলি বিবেচনা করুন, তবে সাথে

V_k = 'That's the way,' U 'I like it, ' U
U   = 'uh huh,' 'uh huh'

সকল কে।


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

5

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


2

ও (এন) হ'ল বড় একটি স্বরলিপি একটি অ্যালগরিদমের সময় জটিলতা লেখার জন্য ব্যবহৃত হয়। আপনি যখন একটি অ্যালগোরিটমে মৃত্যুদন্ডের সংখ্যা যুক্ত করেন আপনি 2N + 2 এর মতো ফলস্বরূপ একটি অভিব্যক্তি পাবেন, এই অভিব্যক্তিতে N হ'ল পদটি (এটির মানটি বৃদ্ধি বা হ্রাস হলে অভিব্যক্তিতে সবচেয়ে বেশি প্রভাব ফেলতে পারে)। এখন ও (এন) হ'ল সময় স্বাচ্ছন্দ্য যখন এন আধিপত্যের পদটি। উদাহরণ

For i= 1 to n;
  j= 0;
while(j<=n);
  j=j+1;

এখানে অভ্যন্তরীণ লুপের জন্য মৃত্যুদণ্ডের মোট সংখ্যা হ'ল এন + 1 এবং বহিরাগত লুপের জন্য মোট মৃত্যুদন্ডের সংখ্যা হ'ল এন (এন + 1) / 2, সুতরাং সম্পূর্ণ অ্যালগরিদমের জন্য মৃত্যুদণ্ডের মোট সংখ্যা এন + 1 + এন (এন + 1/2) ) = (এন ^ 2 + 3 এন) / 2। এখানে এন ^ 2 হ'ল প্রভাবশালী শব্দ তাই এই অ্যালগরিদমের জন্য সময় জটিলতা হ'ল (এন ^ 2)

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