এই প্রযুক্তিগতভাবে কি "হ্যালো ওয়ার্ল্ড" এর জন্য একটি ও (1) অ্যালগরিদম?


117

এটিকে "হ্যালো, ওয়ার্ল্ড!" এর জন্য ও (1) অ্যালগরিদম হিসাবে শ্রেণীবদ্ধ করা হবে? ??

public class Hello1
{
   public static void Main()
   {
      DateTime TwentyYearsLater = new DateTime(2035,01,01);
      while ( DateTime.Now < TwentyYearsLater )
      { 
          System.Console.WriteLine("It's still not time to print the hello ...");
      }
      System.Console.WriteLine("Hello, World!");
   }
}

আমি ব্যবহার করার কথা ভাবছি

DateTime TwentyYearsLater = new DateTime(2035,01,01);
while ( DateTime.Now < TwentyYearsLater )
{ 
   // ... 
}

একটি ব্যস্ত লুপ হিসাবে কোড স্নিপেট একটি রসিকতা হিসাবে রাখা যখনই কেউ একটি নির্দিষ্ট জটিলতার একটি অ্যালগরিদম জন্য জিজ্ঞাসা। এটা কি সঠিক হবে?


15
এটি O(N)জটিলতা নয়O(1)
ফাবজান

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

131
@ ফ্যাজান এখানে নেই Nযে অ্যালগরিদম নির্ভর করে, তাই আপনি আসলে এটি বলতে পারবেন না যে এটি একটি ও (এন) অ্যালগরিদম।
17

29
প্রযুক্তিগতভাবে কোনও ইনপুট নেই, তাই কোনও অর্থবোধও Nকরে না। তবে আপনি এমন DateTime.Nowএকটি ইনপুট বিবেচনা করতে পারেন যা এটি ফলাফলের উপর এখনও নির্ভর করে। আপনি যদি এর জন্য একটি বাস্তবসম্মত মান ধরে নিতে পারেন DateTime.Nowতবে হ্যাঁ, প্রোগ্রামটি নিয়মিত পরিমাণে লুপ করে।
অকর্মা

43
সমস্যা বিবৃতিতে এন কী তা নির্ধারণ করতে হবে।
ইয়াকুব মাসাদ

উত্তর:


406

এই প্রসঙ্গে বিগ ও স্বরলিপি কোনও ফাংশনের ইনপুট আকার এবং input ইনপুটটির জন্য ফলাফলটি গণনা করার জন্য যে ক্রিয়াকলাপ সম্পাদন করা প্রয়োজন তার মধ্যে একটি সম্পর্ক বর্ণনা করতে ব্যবহৃত হচ্ছে।

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


6
কি হবে O(max(1, 2035 - yearTheProgramIsStarted))?
বার্গি

19
@Bergi [বাস্তবিক কোনো [( stackoverflow.com/questions/34048740/... ), আপনি শুধু লুপের পুনরাবৃত্তিও বিশুদ্ধরূপে বার আপনি কাজ চালানোর উপর ভিত্তি করে সংখ্যা বর্ণনা করতে পারবে না। এবং অবশ্যই আপনি এটিকে একত্রিত করেছেন যে ব্যবহারকারী যেকোন সময় সিস্টেম ঘড়িটি যেকোন সময় পরিবর্তিত হতে পারে যেকোন সময় চাইবে, ইত্যাদি and আপনার কাছে এখনও একটি সুগঠিত ইনপুট নেই যা সংখ্যার সাথে সঠিকভাবে সম্পর্কিত হতে পারে আউটপুট উত্পাদন প্রয়োজন অপারেশন। মুরগি, এমনকি আউটপুট নিজেই সুসংগত নয়।
19

23
যে কেউ তর্ক করতে পারে যে সিস্টেমের অবস্থা (যা ঘড়িটি অন্তর্ভুক্ত করে) প্রোগ্রামটির ইনপুটটির অংশ। সেই অর্থে, আপনি তারিখটি ইনপুট প্যারামিটার হিসাবে ব্যবহার করতে পারেন, যদিও তা সুস্পষ্ট নয়। যদিও এটি অদ্ভুত।
কনার ক্লার্ক 19

9
আরও স্পষ্ট করে বলতে গেলে, 'অন্তর্নিহিত' ইনপুটটি 1 লা জানুয়ারী, 2035 এবং আজকের মধ্যে ব-দ্বীপ।
কনার ক্লার্ক

6
@ হটেন তবে সিস্টেমের সময় কোনও নির্দিষ্ট মান নয়। এই ফাংশনটি হয় না শুধু একটি গ্রহণ করার মতো একই DateTimeইনপুট হিসাবে শুরুর সময় জন্য। আমি আগেই বলেছি, সময়ের সাথে সাথে সিস্টেমের ঘড়িটি পরিবর্তন হতে পারে । এবং আবারও আপনি কাজী ইনপুটটি সরাসরি ম্যাপ করতে পারবেন না যা আপনি একটি নির্দিষ্ট আউটপুটকে বর্ণনা করছেন। কোনও নির্দিষ্ট শুরুর সময়, বা এমন দুটি প্রোগ্রামের জন্য জ্ঞাত সংখ্যক ক্রিয়াকলাপ নেই যা সর্বদা একটি বোধগম্য মান পায় DateTime.Now, তাই আপনি সময়টিকে পরিবর্তনের সাথে সাথে দুটিটিকে সংযুক্ত করতে পারবেন না, কারণ আপনি যখন তাদের সাথে সম্পর্কিতও করতে পারবেন না সময় পরিবর্তন হয় না
পরিবেশন করুন

88

বিগ-ও স্বরলিপিটির অর্থ মোটামুটিভাবে 'কাজের পরিমাণে একটি অপারেশন দেওয়া হয়, এন, গণনার সময়, N এর সাথে আনুপাতিক, অ্যালগোরিদম কি লাগে?'। উদাহরণস্বরূপ, আকারের অ্যারের বাছাই করতে N ^ 2, Nlog (N), ইত্যাদি লাগতে পারে etc.

এটিতে কাজ করার জন্য কোনও পরিমাণ ইনপুট ডেটা নেই। সুতরাং এটি না O(anything)

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

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

প্রযুক্তিগতভাবে এটি কী, এটি একটি নিয়ন্ত্রণ ব্যবস্থা। উইকিপিডিয়া থেকে;

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

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

বিমূর্ত

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

স্ট্রং চার্চ-টিউরিং থিসিস (এসসিটি) একটি নতুন দৃষ্টান্ত হিসাবে ইন্টারঅ্যাকশন গ্রহণযোগ্যতা বাধাগ্রস্ত করে, টিউরিং মেশিনস (টিএমএস) সমস্ত গণনা ক্যাপচার করে বলে বিস্তৃত বিশ্বাস, সুতরাং টিএমএসের চেয়ে বেশি সংখ্যক গণনার গণনা অসম্ভব। এই গবেষণাপত্রে, আমরা দেখাই যে এসসিটি মূল চার্চ-টিউরিং থিসিসকে (সিটিটি) এমনভাবে পুনরায় ব্যাখ্যা করে যে টুরিং কখনই উদ্দেশ্য করে না; মূলটির সাথে এটির সাধারণত ধারণা করা সমতুল্যতা একটি পৌরাণিক কাহিনী। এসসিটিতে বিস্তৃত বিশ্বাসের historicalতিহাসিক কারণগুলি সনাক্ত এবং বিশ্লেষণ করি। কেবল এটি মিথ্যা বলে স্বীকার করেই আমরা গণনার বিকল্প দৃষ্টান্ত হিসাবে মিথস্ক্রিয়া গ্রহণ করতে শুরু করতে পারি


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

@ বেরগি - হ্যাঁ, আপনার বক্তব্য দেখুন! কেবলমাত্র একটি আনুমানিকতা তৈরি করা, সত্যই, তবে হ্যাঁ - আপনি যদি কাজের পরিমাণ এবং সেখানে যাওয়ার জন্য যে পরিমাণ পদক্ষেপ গ্রহণ করেন তা পরিমাপ করতে পারেন, বিগ-ও two দুটি ব্যবস্থার সম্পর্ককে প্রতিফলিত করে। ক্লোজার?
স্টিভ

@ কেপ্প - এটি একটি বিশুদ্ধ ফাংশন নয় কারণ এটি একটি শূন্য পদ্ধতি, তবে আমরা যদি কনসোল আউটপুট গণনা করি তবে এটি এখনও এলোমেলো; এটি Hello "হ্যালো, ওয়ার্ল্ড!" এর যে কোনও একটিকে আউটপুট দিতে পারে "হ্যালো প্রিন্ট করার এখনও সময় আসেনি ... e n হেলো, ওয়ার্ল্ড!", "হ্যালো প্রিন্ট করার এখনও সময় হয়নি ... এখনও ছাপার সময় হয়নি হ্যালো ... \ n হেলো, ওয়ার্ল্ড! ", ...}
স্টিভ কুপার

1
Stdout এ মুদ্রণ আউটপুট না?
rpax

4
@rpax গাণিতিকভাবে নয়, না। একটি ফাংশন ইনপুট থেকে আউটপুটগুলিতে একটি অপরিবর্তিত অনুবাদ; উদাহরণস্বরূপ, 'স্কোয়ার' হ'ল ফাংশন যা সর্বদা 9 ফেরত দেয় যদি আপনি 3 ইনপুট করেন A একই পরামিতিগুলির সাথে কল যদি সর্বদা একই রিটার্ন মান দেয় তবে একটি সি # পদ্ধতি কেবল গণিতের ফাংশন। অন্যথায় - যদি এর কনসোলটিতে লিখন, গ্রাফিক্স প্রদর্শন, মেমরি বরাদ্দ করার মতো পার্শ্ব-প্রতিক্রিয়া থাকে - সেগুলি গাণিতিক ফাংশন নয়। (আমার উত্তরের সাথে একটি লিঙ্ক যুক্ত করবে যা এতে বিস্ময়কর বিবরণে প্রবেশ করবে :))
স্টিভ কুপার

41

না, আপনার কোডের সময় জটিলতা রয়েছে O(2^|<DeltaTime>|),

বর্তমান সময়ের সঠিক কোডিংয়ের জন্য।
দয়া করে আমাকে প্রথমে আমার ইংরাজির জন্য ক্ষমা চাইতে দিন।

CS এ বিগ ও কী কী এবং কীভাবে কাজ করে

প্রোগ্রামের চলমান সময়ের সাথে ইনপুট বেঁধে রাখতে বড় ও স্বরলিপি ব্যবহার করা হয় না
বিগ ও স্বরলিপিটি হ'ল কঠোরতার পিছনে রেখে দু'টি পরিমাণের অ্যাসিম্পটোটিক অনুপাত প্রকাশ করার উপায় ।

অ্যালগরিদম বিশ্লেষণ যদি এই দুটি পরিমাণে হয় না ইনপুট (যার জন্য প্রথমে একটি "পরিমাপ" ফাংশন থাকতে হবে) এবং চলমান সময়।
এগুলি সমস্যা 1 এর কোডিংয়ের দৈর্ঘ্য এবং আগ্রহের মেট্রিক।

সাধারণত ব্যবহৃত মেট্রিকগুলি হয়

  1. গণনার একটি প্রদত্ত মডেলটিতে অ্যালগরিদম সম্পূর্ণ করতে প্রয়োজনীয় পদক্ষেপের সংখ্যা।
  2. গণনার মডেল দ্বারা এমন কোনও ধারণা উপস্থিত থাকলে স্থান প্রয়োজন।

স্পষ্টতই একটি টিএমকে মডেল হিসাবে ধরে নেওয়া হয় যাতে প্রথম পয়েন্টটি ট্রানজিশন 2 ফাংশনের অ্যাপ্লিকেশনের সংখ্যায় অর্থাত্ "পদক্ষেপ" অনুবাদ করে এবং দ্বিতীয়টি কমপক্ষে একবার লেখা বিভিন্ন টেপ কোষের সংখ্যা অনুবাদ করে ।

এটি কি প্রায়শই স্পষ্টতই ধরে নেওয়া যায় যে আমরা মূলটির পরিবর্তে বহুভিত্তিক সম্পর্কিত এনকোডিংটি ব্যবহার করতে পারি, উদাহরণস্বরূপ এমন ক্রিয় যা শুরু থেকে শেষ অবধি অনুসন্ধান করে তার মধ্যে O(n)জটিলতা থাকে যদিও এই ধরণের অ্যারের উদাহরণের কোডিংয়ের দৈর্ঘ্য হওয়া উচিত despite n*b+(n-1)যেখানে bপ্রতিটি উপাদানটির প্রতীক সংখ্যা (ধ্রুবক) থাকে। এটি কারণ bহিসাবে গণনা মডেলের একটি ধ্রুবক হিসাবে বিবেচিত হয় এবং তাই উপরের অভিব্যক্তি এবং nasyptotically একই হয়।

এই ব্যাখ্যা দিয়েছে কেন মত একটি অ্যালগরিদম ট্রায়াল বিভাগ একটি হল সূচকীয় মূলত একটি সত্ত্বেও অ্যালগরিদম for(i=2; i<=sqr(N); i++)অ্যালগরিদম মত 3

এই দেখুন ।

এর অর্থ হ'ল বড় হে নোটেশন সমস্যাটি বর্ণনা করতে যতগুলি প্যারামিটার ব্যবহার করতে পারে তা ব্যবহার করতে পারে, কিছু অ্যালগরিদমের জন্য কে প্যারামিটার থাকা অস্বাভাবিক নয় ।

তাই এই নয় "ইনপুট" বা সম্পর্কে যে "কোন ইনপুট হয়"।

স্টাডি কেস এখন

বড় ও স্বরলিপি আপনার অ্যালগরিদমকে প্রশ্নবিদ্ধ করে না, এটি কেবল ধরে নেয় যে আপনি কী করছেন তা আপনি জানেন। এটি মূলত এমন একটি সরঞ্জাম যা সর্বত্র প্রযোজ্য এমনকি অ্যালগরিদম পর্যন্ত যা ইচ্ছাকৃতভাবে কৃপণ হতে পারে (আপনার মতো)।

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

বিশেষত উদাহরণটি হ'ল:

<DeltaTime>

যেখানে <>অর্থ কোনও, অ প্যাথলজিকাল, পছন্দের কোডিং।

খুব গুরুত্বপূর্ণ স্পষ্টতা জন্য নীচে দেখুন ।

সুতরাং আপনার বড় হে জটিলতার সময়টি কেবলমাত্র O(2^|<DeltaTime>|), কারণ আপনি প্রচুর পুনরাবৃত্তি করেন যা বর্তমান সময়ের মানের উপর নির্ভর করে। অন্যান্য সংখ্যার ধ্রুবকগুলি রাখার কোনও অর্থ নেই কারণ অ্যাসিম্পটোটিক স্বরলিপিটি দরকারী কারণ এটি ধ্রুবকগুলি দূর করে (উদাহরণস্বরূপ এর ব্যবহার O(10^|<DeltaTime>|*any_time_unit)অর্থহীন)।

ট্র্যাফিক অংশটি যেখানে

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

আপনার মডেলটিতে যদিও সময়টি গণনার অংশ, আপনি কার্যনির্বাহী লোকের পরিভাষাটি এই কথাটি ব্যবহার করে ব্যবহার করতে পারেন যে মেইন শুদ্ধ নয় তবে ধারণাটি একই is

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

এই এনকোডিংটি বেছে নেওয়ার জন্য এই প্রতিবিম্বটি গুরুত্বপূর্ণ <DeltaTime>, এটি মূলত <(কারেন্টটাইম, টাইমইনফিউচার)> রচনার একটি ঘনীভূত উপায়। যেহেতু সময়টি প্রাথমিকভাবে নেই, তাই কারেন্টটাইমের কোডিং খুব ভালভাবে এখন শব্দ (বা অন্য কোনও পছন্দ) শব্দটি হতে পারে আগের দিনই গতকাল হিসাবে কোড করা যেতে পারে , সেখানে এই ধারণাটি ভেঙে যে শারীরিক সময় হিসাবে কোডিংয়ের দৈর্ঘ্য বৃদ্ধি পায় এগিয়ে যায় (এবং ডেল্টটাইমের একটি হ্রাস পায়)

দরকারী কিছু করার জন্য আমাদের কম্পিউটারের মডেলটিতে সময়কে সঠিকভাবে মডেল করতে হবে।

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

আপনার বিভ্রান্তি, যদি থাকে তবে এই শব্দটি থেকে উদ্ভূত হয় যে শব্দটির সময়টি 'এর সময়ের জটিলতা কী?' এবং 'কত সময় লাগবে?' খুব ভিন্ন জিনিস বোঝাতে

হায়রে পরিভাষা একই শব্দ ব্যবহার করে তবে আপনি নিজের পদক্ষেপে "স্টেপস জটিলতা" ব্যবহার করে চেষ্টা করতে পারেন এবং নিজেকে আপনার প্রশ্নটি পুনরায় জিজ্ঞাসা করতে পারেন, আমি আশা করি যে উত্তরটি আপনাকে সত্যই বুঝতে সাহায্য করবে ^ _ ^


1 এটি একটি অ্যাসিম্পটোটিক পদ্ধতির প্রয়োজনীয়তাও ব্যাখ্যা করে কারণ প্রতিটি উদাহরণের ভিন্নতা রয়েছে, তবে নির্বিচারে নয়, দৈর্ঘ্য।
2 আমি আশা করি আমি এখানে সঠিক ইংরেজি শব্দটি ব্যবহার করছি।
3 এছাড়াও আমরা প্রায়শই log(log(n))গণিতে শব্দগুলি খুঁজে পাই ।
4 আইড ইস্ট, একটি পদক্ষেপ অবশ্যই কিছু সীমাবদ্ধ থাকতে পারে, তবে নাল নয়, সংযুক্ত নয়, সময়ের ব্যবধান।
5 এর অর্থ হ'ল এর মধ্যে শারীরিক সময়ের জ্ঞান হিসাবে গণনা মোড, এটি তার শর্তাদি দিয়ে এটি প্রকাশ করতে পারে। .NET ফ্রেমওয়ার্কে জেনারিকগুলি কীভাবে কাজ করে তা একটি উপমা।


3
"সুতরাং আপনার বড় হে চলমান সময় ঠিক" .. আমি নিশ্চিত যে আপনি বোঝাতে চেয়েছিলেন 'বড় হে জটিলতা' ?. এছাড়াও, আমরা কেবল 'ডেল্টটাইম' কে আমাদের 'এন' ডান বলতে পারি so সুতরাং আপনার বলা ও (2 ^ N) ফিবোনাচি অ্যালগরিদমের জটিলতার মতো কিছু। আপনি কিভাবে "2 ^" এ এসেছেন?
রস

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

আমি দুঃখিত, তবে আপনি কীভাবে জটিলতাটি এই সিদ্ধান্তে পৌঁছেছেন যে আপনি উত্তরে আরও উত্তর দিতে পারেন O(2^n)? এটি নতুনদের জন্য পরিষ্কার নয়।
আর্টুরো টরেস সানচেজ

2
@YuniMj যদিও আপনার যুক্তি টেকনিক্যালি ভুল নয়, আমি মনে করি যে পরিমাপ নাছোড়বান্দা দ্বারা আকার এর DeltaTimeতার পরিবর্তে মান , আপনি শুধু অতিরিক্ত বিভ্রান্তির যোগ করছি। উদাহরণস্বরূপ, তবে এই যুক্তিটির কোনও অনুকূল সাজানোর অ্যালগরিদমের সময় জটিলতা নেই $ O (n \ cdot লগ এন) $ $ কেন? কারণ আপনি বাছাই করার জন্য কেবলমাত্র চূড়ান্তভাবে অনেকগুলি পৃথক্ অবজেক্টগুলিকে সারণি করতে পারেন, সেক্ষেত্রে আপনি সর্বদা uc O (n) in বাছাই করতে বালতি সাজান ব্যবহার করতে পারেন $ বা আপনার অবজেক্টের আকার সীমাহীন, এক্ষেত্রে $ O (n \ সিডট লগ এন) $ ধরে রাখবে না, যেহেতু একক তুলনায় আর ধ্রুবক সময় থাকবে না ...
fgp

1
এফডব্লিউআইডাব্লু ও (2 ^ n)! = ও (10 ^ n) স্ট্যাকওভারফ্লো.com
নাথান এফডি

29

যদিও এখানে দুর্দান্ত উত্তরগুলির একটি গুচ্ছ রয়েছে, তবে আমি তাদের সমস্ত কিছুটা আবার নতুন করে বলি।

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

  • আমরা আপনার অ্যালগরিদমকে একটি ধ্রুবক ফাংশন হিসাবে বিবেচনা করতে পারি যা কোনও আকারের যে কোনও ইনপুট নেয়, এটিকে উপেক্ষা করে, একটি নির্দিষ্ট সময়ের জন্য অপেক্ষা করে এবং শেষ করে। এক্ষেত্রে এর রানটাইম হ'ল চ (এন) = কনস্ট , এবং এটি ও (1) -কালীন অ্যালগরিদম। এই আপনি শুনতে চেয়েছিলেন তাই না? হ্যাঁ, এটি, প্রযুক্তিগতভাবে, একটি হে (1) -আলগরিদম
  • আমরা TwentyYearsLaterআগ্রহের "ইনপুট-আকার" -র মতো পরামিতি হিসাবে বিবেচনা করতে পারি । এক্ষেত্রে রানটাইমটি f (n) = (nx) যেখানে x প্রার্থনার মুহুর্তে "" এখন সময় "। যখন এইভাবে দেখা যায়, এটি একটি ও (এন) -কালীন অ্যালগরিদম। যখনই আপনি আপনার প্রযুক্তিগতভাবে O (1) -ালগোরিদম অন্য লোকের কাছে দেখেন এই পাল্টা যুক্তির প্রত্যাশা করুন ।
  • ওহ, তবে অপেক্ষা করুন, যদি কে =TwentyYearsLater ইনপুট হয় তবে এর আকার n আসলে এটির উপস্থাপনের জন্য প্রয়োজনীয় বিটের সংখ্যা, যেমন এন = লগ (কে) । ইনপুট এন এবং রানটাইমের আকারের মধ্যে নির্ভরতা তাই চ (এন) = 2 ^ n - এক্স । আপনার অ্যালগোরিদম সবেমাত্র দ্রুত ধীর হয়ে গেছে বলে মনে হচ্ছে! বিতৃষ্ণা।
  • প্রোগ্রামটির আর একটি ইনপুট হ'ল লুপে অনুরোধের অনুক্রমের জন্য ওএসের দেওয়া উত্তরগুলির প্রবাহDateTime.Now । আমরা আসলে কল্পনা করতে পারি যে প্রোগ্রামটি চালানোর মুহুর্তে এই পুরো ক্রমটি ইনপুট হিসাবে সরবরাহ করা হয়েছে। রানটাইমটি তখন এই ক্রমের সম্পত্তির উপর নির্ভর করে বিবেচনা করা যেতে পারে - যথা প্রথম TwentyYearsLaterউপাদান পর্যন্ত এর দৈর্ঘ্য । এক্ষেত্রে রানটাইম আবার f (n) = n এবং অ্যালগরিদম হল ও (এন)

তবে আবার, আপনার প্রশ্নে আপনি এমনকি রানটাইম সম্পর্কে আগ্রহী তা বলেননি। আপনি যদি মেমরি ব্যবহার বোঝাতে চান? আপনি যে পরিস্থিতিটি মডেল করেছেন তার উপর নির্ভর করে আপনি বলতে পারেন যে অ্যালগোরিদমটি হ'ল (1)-স্মৃতি বা সম্ভবত, ও (এন)-মেমরি (যদি বাস্তবায়নের জন্য DateTime.Nowসম্পূর্ণ অনুরোধের ক্রমটি কিছুটা ট্র্যাক রাখা প্রয়োজন) keep

এবং যদি আপনার লক্ষ্যটি ছিল অযৌক্তিক কিছু নিয়ে আসা, তবে কেন আপনি সমস্ত কিছু লিখে না গিয়ে বলুন যে আপনি কী পর্দার পিক্সেলগুলিতে অ্যালগরিদমের কোডের আকারটি বাছাই করা জুম স্তরের উপর নির্ভর করে তা সম্পর্কে আগ্রহী। এটি এফ (জুম) = 1 / জুমের মতো কিছু হতে পারে এবং আপনি গর্বের সাথে আপনার অ্যালগরিদমকে ও (1 / এন) -পিক্সেল আকার হিসাবে ঘোষণা করতে পারেন !


+1 টি। আমি বিশ্বাস করি যে "ওএসের DateTime.Nowঅনুরোধের ক্রমকে দেওয়া উত্তরগুলির প্রবাহটি এখানে আসল ইনপুট But তবে আমি মনে করি যে উপসংহারটি এটি ও (এন) নয়, তবে এটি ও (কে), যেখানে কে দৈর্ঘ্য প্রথম TwentyYearsLaterউপাদান পর্যন্ত ।
justhalf

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

21

আমাকে সার্ভির সাথে কিছুটা দ্বিমত পোষণ করতে হবে। এই প্রোগ্রামটিতে একটি ইনপুট রয়েছে, এটি সুস্পষ্ট না হলেও, এবং এটিই সিস্টেমের সময়। এটি এমন কোনও প্রযুক্তি হতে পারে যা আপনি ইচ্ছা করেন নি, তবে আপনার TwentyYearsFromNowপরিবর্তনশীলটি এখন সিস্টেমের সময় থেকে বিশ বছর নয় , এটি স্থায়ীভাবে 1 লা জানুয়ারী, 2035 এ দেওয়া হয়েছে।

সুতরাং আপনি যদি এই কোডটি গ্রহণ করেন এবং এটি মেশিনে কার্যকর করা হয় যার 1 জানুয়ারী, 1970 এর সিস্টেম সময় রয়েছে তবে কম্পিউটারটি যত দ্রুত হয় তা নির্বিশেষে এটি 65 বছর সময় নিতে চলেছে (এর ঘড়িটি ত্রুটিযুক্ত থাকলে কিছুটা ভিন্নতা থাকতে পারে) )। আপনি যদি এই কোডটি নিয়ে থাকেন এবং এটি কোনও মেশিনে চালিত হয় যা সিস্টেমের সময় জানুয়ারী 2 শে জানুয়ারী, 2035, এটি প্রায় তাত্ক্ষণিকভাবে সম্পন্ন হবে।

আমি আপনার ইনপুটটি বলব , এটি nহ'ল January 1st, 2035 - DateTime.Nowএবং এটি ও (এন)।

তারপরে অপারেশন সংখ্যার বিষয়টিও আছে। কিছু লোক লক্ষ্য করেছেন যে দ্রুত কম্পিউটারগুলি দ্রুত লুপটিতে আঘাত করবে, ফলে আরও বেশি অপারেশন ঘটবে, তবে এটি অপ্রাসঙ্গিক। বিগ-ও স্বরলিপি দিয়ে কাজ করার সময়, আমরা প্রসেসরের গতি বা অপারেশনগুলির সঠিক সংখ্যা বিবেচনা করি না। যদি আপনি এই অ্যালগরিদমটি নিয়ে যান এবং এটি একটি কম্পিউটারে চালান, এবং আবার এটি চালিয়ে যান তবে একই কম্পিউটারে 10x দীর্ঘতর জন্য, আপনি 10x একই ফ্যাক্টরের দ্বারা ক্রিয়াকলাপের সংখ্যা বাড়ার আশা করবেন।

এটি হিসাবে:

আমি [redacted কোড] কোড স্নিপেট একটি ব্যস্ত লুপ হিসাবে যখনই কেউ একটি নির্দিষ্ট জটিলতার অ্যালগরিদম জিজ্ঞাসা হিসাবে একটি রসিকতা হিসাবে রাখা হিসাবে ব্যবহার করার কথা ভাবছি। এটা কি সঠিক হবে?

না সত্যিই না. অন্যান্য উত্তর এটি কভার করেছে, তাই আমি কেবল এটি উল্লেখ করতে চেয়েছিলাম wanted আপনি সাধারণত মৃত্যুদণ্ডের বছরগুলিকে কোনও বড়-ও স্বরলিপিতে সম্পর্কিত করতে পারেন না। যেমন। 20 বছরের মৃত্যুদণ্ড = ও (এন ^ 87) বা এই বিষয়ে অন্য কিছু বলার উপায় নেই। এমনকি আপনি যে অ্যালগরিদম দিয়েছেন তাতে আমি TwentyYearsFromNow20120, 75699436 বা 123456789 বছর পরিবর্তন করতে পারলাম এবং বিগ-ও এখনও ও (এন)।


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

When working with big-O notation, we don't consider the speed of the processor or the exact number of operations.এটি একটি মিথ্যা বিবৃতি। খুব সুন্দর যে কোনও সংবেদনশীল অপারেশন যা আপনি বিগ হে মানের গণনা করার চেষ্টা করবেন তা হার্ডওয়ারের উপর ভিত্তি করে পরিচালিত ক্রিয়াকলাপগুলির সংখ্যা পরিবর্তন করে না, তবে এটি একটি করে । বিগ ও হ'ল ইনপুটটির আকারের সাথে অপারেশনগুলির সংখ্যার সম্পর্কযুক্ত a বেশিরভাগ অপারেশনের জন্য যা সিস্টেম হার্ডওয়্যার থেকে স্বতন্ত্র। এই ক্ষেত্রে এটি হয় না
পরিবেশন করুন

If you took this algorithm and ran it on a computer, and then ran it again but for 10x longer on the same computer, you would expect the number of operations to grow by the same factor of 10x.এটিও একটি ভুল বক্তব্য। পরিবেশগতভাবে অগত্যা লুপের ক্রমানুসারে রৈখিকভাবে পরিবর্তন হবে না। উদাহরণস্বরূপ, কম্পিউটারে এমন অন্যান্য প্রোগ্রাম থাকতে পারে যা বিভিন্ন সময়ে বিভিন্ন সময়ে কমপক্ষে সিপিইউ সময় ব্যবহার করে, সময়ের সাথে সাথে এই অ্যাপ্লিকেশনটির দেওয়া সময় পরিবর্তন করে।
পরিবেশন করুন

আমি এই সম্পর্কে @ সার্ভেয়ের সাথে রয়েছি, তবে কিছুটা ভিন্ন কারণে। প্রধান ফাংশনটি কোনও প্যারামিটার নেয় না এবং কোনও ইনপুট দেয় না। আপনি যদি চান এটি শূন্য => শূন্য একটি ফাংশন। সময় কী তা বিবেচনা করে না, এখনও কিছু দেয় না।
স্টিভ কুপার 20

1
যদি আমরা এই সংজ্ঞাটি ব্যবহার করে থাকি - "গণিতে, একটি ফাংশন হ'ল ইনপুটগুলির সেট এবং অনুমোদিত আউটপুটগুলির সংস্থার সাথে সম্পত্তির সাথে সম্পর্ক যা প্রতিটি ইনপুট ঠিক একটি আউটপুট সম্পর্কিত to" (উইকিপিডিয়া) - এবং আমরা কনসোল আউটপুটটিকে 'ফাংশনটির আউটপুট' হিসাবে গণনা করছি, এটির পরিবর্তে দ্রুত কম্পিউটারে দীর্ঘতর হয়ে উঠবে, কারণ এটি লিখবে "" হ্যালো প্রিন্ট করার এখনও সময় আসেনি ... "" বেশি ঘন ঘন.
স্টিভ কুপার

13

বিগ-ও বিশ্লেষণ এতে জড়িত প্রসেসিংয়ের পরিমাণ নিয়ে ডিল করে যেহেতু প্রক্রিয়াজাত হওয়া ডেটার পরিমাণ সীমা ছাড়াই বৃদ্ধি পায়।

এখানে, আপনি কেবলমাত্র স্থির আকারের একক বস্তুর সাথে কাজ করছেন dealing যেমন, আপনি কীভাবে আপনার শর্তাদি সংজ্ঞায়িত করেন তার উপর বিগ-ও বিশ্লেষণ প্রয়োগ ভারীভাবে (প্রাথমিকভাবে?) নির্ভর করে।

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

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


10

বড়-ও কিসের সাথে আপেক্ষিক?

আপনি অন্তর্নিহিত বলে মনে হচ্ছে twentyYearsLaterএটি একটি "ইনপুট"। যদি আপনি সত্যিই আপনার ফাংশন লিখেছেন

void helloWorld(int years) {
   // ...
}

এটি ও (এন) হবে যেখানে এন = বছর (বা কেবল বলুন) O(years) )।

আমি বলতে হবে আপনার আলগোরিদিম হে (ঢ) যাই হোক না কেন আপনি যে নম্বরে দিয়ে শুরু কোডের লাইন লিখতে ঘটতে আপেক্ষিক twentyYearsLater =। তবে লোকেরা সাধারণত আসল উত্স কোডে সংখ্যাগুলি ইনপুট হিসাবে বিবেচনা করে না। তারা ইনপুট হিসাবে কমান্ড লাইন ইনপুট, বা ফাংশন স্বাক্ষর ইনপুটটিকে ইনপুট হিসাবে বিবেচনা করতে পারে, তবে সম্ভবত সম্ভবত উত্স কোড নয় code আপনি কি আপনার বন্ধুর সাথে এই বিষয়ে বিতর্ক করছেন - এটি কি "ইনপুট"? আপনি নিজের কোডটিকে এমনভাবে সাজিয়েছেন যাতে স্বজ্ঞাতভাবে এটি কোনও ইনপুটের মতো মনে হয় এবং আপনি অবশ্যই আপনার প্রোগ্রামের line নং লাইনে N নম্বরটির সাথে এটির বড় চলমান সময় জিজ্ঞাসা করতে পারেন, তবে যদি আপনি এই জাতীয় কোনও ডিফল্ট পছন্দ ব্যবহার করেন ইনপুট হিসাবে আপনাকে অবশ্যই এটি সম্পর্কে সুস্পষ্ট হওয়া দরকার।

আপনি যদি কমান্ড লাইন বা ফাংশনের ইনপুটটির মতো ইনপুটটিকে আরও কিছু সাধারণ হিসাবে গ্রহণ করেন তবে কোনও আউটপুট নেই এবং ফাংশনটি হ'ল (1)। এটি বিশ বছর সময় নেয়, তবে যেহেতু বড়-ও ধ্রুবক একাধিক পর্যন্ত পরিবর্তিত হয় না, ও (1) = ও (বিশ বছর)।

অনুরূপ প্রশ্ন - রানটাইমটি কী:

void sortArrayOfSizeTenMillion(int[] array)

ধরে নিলে এটি যা বলবে তাই করে এবং ইনপুটটি বৈধ, এবং অ্যালগরিদম একটি চটকদার বা বুদ্বুদ সাজানোর বা যুক্তিসঙ্গত কোনও কিছুকে জোর দেয়, এটি হে (1)।


ইনপুটটিকে হার্ডকডিংয়ের অর্থ এই নয় যে ইনপুটটি অদৃশ্য হয়ে যাবে। বা কুইকোর্ট এবং O (1) সময়ের জটিলতার কোনও ক্ষেত্রে উদাহরণস্বরূপ নয়। bigocheatsheet.com
থিও ব্রিংকম্যান

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

সমানভাবে 'অ-প্রযুক্তিগত পদগুলিতে' আপনি প্রশ্নে থাকা অ্যালগরিদমকে সাসপেনশন ব্রিজ হিসাবে বর্ণনা করতে পারেন।
থিও ব্রিংকম্যান

@ থি ব্রিংকম্যান না, আপনি পারেননি। এটি কারও কাছে বোধগম্য হবে না।
djechlin

এটি ও (1) বুদ্বুদ বাছাই হিসাবে বর্ণনা করার মতো প্রতিটি বিটকে ততটা অর্থে তোলে।
থিও ব্রিংকম্যান

8

এই "অ্যালগরিদম" O (1) বা ধ্রুবক সময় হিসাবে সঠিকভাবে বর্ণনা করা হয়েছে। এটি যুক্তিযুক্ত হয়েছে যে এই প্রোগ্রামটিতে কোনও ইনপুট নেই, তাই বিগ ওহের ক্ষেত্রে বিশ্লেষণ করার মতো কোনও এন নেই। আমি কোনও মতামত নেই যে কোনও ইনপুট নেই। এটি যখন একটি এক্সিকিউটেবল এবং ইনভয়েশনে সংকলিত হয় তখন ব্যবহারকারী যথেচ্ছ দৈর্ঘ্যের কোনও ইনপুট নির্দিষ্ট করতে পারে। এই ইনপুট দৈর্ঘ্য এন।

প্রোগ্রামটি কেবল ইনপুটটিকে (যে কোনও দৈর্ঘ্যের) উপেক্ষা করে, তাই যে সময় নেওয়া হয় (বা নির্ধারিত মেশিনের নির্দেশাবলীর সংখ্যা) ইনপুটটির দৈর্ঘ্য নির্বিশেষে (নির্ধারিত পরিবেশ = প্রারম্ভকালীন সময় + হার্ডওয়্যার দেওয়া) একই, তাই হে (1 )।


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

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

Let's suppose that there is a finite lower bound on the amount of time a loop iteration takesএটি একটি ভুল ধারণা। প্রোগ্রামটি চিরকাল চলতে পারে। আমাকে যা করতে হবে তা হ'ল এখন থেকে আমার সিস্টেমের ঘড়ি সেট করা 50 বছর, এটি শুরু করুন এবং এটি কখনই শেষ হবে না। বা আমি ঘড়িটি এগিয়ে যাওয়ার চেয়ে দ্রুত পেছন দিকে চালিয়ে যেতে পারি, বা অতীতের অনির্দিষ্ট স্থানে এটি শুরু করতে পারি । আপনি কেবল ধরে নিতে পারবেন না যে প্রোগ্রামটি কত দিন চালিত হবে তার একটি নীচে আবদ্ধ রয়েছে; এটি চিরকাল চলতে পারে। তবে, যদিও আমরা আপনার (মিথ্যা) অনুমানটি সত্য হিসাবে গ্রহণ করি, আপনি এখনও ইনপুটটিতে সঞ্চালিত ক্রিয়াকলাপের সাথে সম্পর্কিত করতে পারবেন না।

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

[সম্পূর্ণরূপে ভুল] যুক্তি দ্বারা প্রতিটি একক অ্যালগরিদম সর্বদা ও (1) হয় কারণ প্রতিটি পৃথক ক্রিয়াকলাপ সর্বদা স্থির থাকে। আপনি কেবল প্রদর্শন করছেন যে বিগ হে সমান কী তা আপনি জানেন না। এটি (প্রসঙ্গে) ইনপুটটির আকারের মধ্যকার সম্পর্ককে বর্ণনা করার জন্য একটি সরঞ্জাম যা সম্পাদিত প্রাসঙ্গিক ক্রিয়াকলাপের সংখ্যা। ও (1) এর অর্থ ইনপুট নির্বিশেষে ক্রমাগত ক্রিয়াকলাপ সম্পাদন করা হয়। এখানে সেখানে নয় অপারেশনের একটি ধ্রুবক সংখ্যা সঞ্চালিত ইনপুট নির্বিশেষে সেখানে সম্ভাব্য অসীম অপারেশন সঞ্চালিত অসীম ধ্রুবক হয়! =।
পরিবেশন করুন

6

আমি অবাক হওয়া একটি জিনিস এখনও উল্লেখ করা হয়নি: বড়-ও স্বরলিপি একটি উপরের আবদ্ধ!

যে বিষয়টি সবার নজরে এসেছে তা হ'ল অ্যালগরিদমের ইনপুটগুলি বর্ণনা করার মতো কোনও এন নেই, সুতরাং এর সাথে বিগ-ও বিশ্লেষণ করার কিছুই নেই। যাইহোক, এটি সহজে কিছু প্রাথমিক কৌশলগুলির সাথে সহজেই প্রশমিত করা হয়, যেমন একটি int n"হ্যালো ওয়ার্ল্ড" nবার গ্রহণ ও প্রিন্ট করা । এটি সেই অভিযোগের আশেপাশে ফিরে আসবে এবং সেই DateTimeমনস্ট্রোসিটি কীভাবে কাজ করে তার আসল প্রশ্নে ফিরে আসবে ।

সময় লুপটি কখন শেষ হয়ে যাবে তার কোনও প্রকৃত গ্যারান্টি নেই। আমরা এটা করতে হবে মনে করতে চাই কিছু সময়, কিন্তু যে বিবেচনা DateTime.nowআয় সিস্টেম তারিখ এবং সময় । এটি একতরফাভাবে বাড়ছে এমন কোনও গ্যারান্টি নেই। এটা সম্ভব যে কিছু রোগতাত্ত্বিক প্রশিক্ষিত বানর ক্রমাগত সিস্টেমের তারিখ এবং সময় পরিবর্তন করে 21 ই অক্টোবর, 2015 12:00:00 ইউটিসি পর্যন্ত কেউ বানরকে কিছু স্বয়ং-ফিটিংয়ের জুতা এবং একটি হোভারবোর্ড না দেয়। এই লুপটি আসলে অসীম সময়ের জন্য চালাতে পারে!

আপনি যখন বড়-ও স্বরলিপিগুলির গাণিতিক সংজ্ঞাটি খনন করেন, সেগুলি ওপরের সীমানা। তারা সবচেয়ে খারাপ পরিস্থিতি প্রদর্শন করে, যতই সম্ভাবনা থাকুক না কেন। এখানে সবচেয়ে খারাপ পরিস্থিতি * পরিস্থিতি অসীম রানটাইম, তাই আমরা ঘোষণা করতে বাধ্য হই যে এই অ্যালগরিদমের রানটাইম জটিলতা বর্ণনা করার জন্য কোনও বড়-ও স্বরলিপি নেই। এটি উপস্থিত নেই, যেমন 1/0 বিদ্যমান নেই।

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


2
ও হ'ল এক অর্থে "ওপার বাউন্ড", তবে এর অর্থ এই নয় যে আপনি কেবল ও-স্বরলিপি ব্যবহার করে "সবচেয়ে খারাপ ক্ষেত্রে জটিলতা" বলতে পারেন। প্রত্যাশিত জটিলতা, সেরা ক্ষেত্রে জটিলতা, অন্য কোনও কার্যকরী সম্পত্তি - এগুলি সমস্তই তাদের ও-সীমার ক্ষেত্রে আলোচিত হতে পারে।
কে.টি.

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

না, আপনি এখানে ভুল হয়ে আছেন। সংজ্ঞাগুলি আবার পরীক্ষা করুন।
কে.টি.

@ কেটি ঠিক আছে, আমি সেগুলি আবার যাচাই করব। আপনি তাদেরও পুনরায় পরীক্ষা করুন। en.wikedia.org/wiki/Big_O_notation এটি পরিবার-এর বাচমান-ল্যান্ডউ নোটেশন এর অধীনে
কর্ট অ্যাম্মন

আমি মনে করি আপনি কোনও ফাংশন নিতে fএবং ফাংশনটিকে gএকই হিসাবে ঘোষণা করার মতো পাগল করতে পারেন f, তবে একটি সীমাবদ্ধ ডোমেন দিয়ে কেবলমাত্র fসেরা ক্ষেত্রে অন্তর্ভুক্ত করতে পারেন , এবং তারপরে বিগ-ওহ gকরতে পারেন তবে আপনি যখন এটি করেন তখন এটি অবনমিত হতে থাকে যে।
আম্মনকে

5

জটিলতা সময় / স্থানের ক্ষেত্রে গণ্য "অশ্বশক্তি" পরিমাপ করতে ব্যবহৃত হয়। বিগ ও স্বরলিপিটি কোন সমস্যাগুলি "গণনাযোগ্য" বা "গণনাযোগ্য নয়" এবং কোন সমাধানগুলি -অ্যালগোরিদমগুলি-অন্যান্যগুলির চেয়ে ভাল তা তুলনা করতে ব্যবহার করা হয়। যেমন, আপনি যে কোনও অ্যালগোরিদমকে দুটি বিভাগে বিভক্ত করতে পারেন: যেগুলি বহুপাক্ষিক সময়ে সমাধান করা যায় এবং যেগুলি পারে না।

সেলাই অফ ইরাথোস্টিনের মতো সমস্যাগুলি হ'ল (এন ^ এক্সপ্রেস) এবং এটি এন এর ছোট মানগুলির জন্য দ্রবণযোগ্য। এগুলি গণনযোগ্য, কেবল বহু-কালীন সময়ে (এনপি) নয় এবং সুতরাং যখন কোনও জিজ্ঞাসা করা হয় যে প্রদত্ত সংখ্যাটি প্রধান বা না, উত্তর এই জাতীয় সংখ্যার বিশালতার উপর নির্ভর করে। তদ্ব্যতীত, জটিলতা হার্ডওয়্যারের উপর নির্ভর করে না, তাই দ্রুত কম্পিউটার থাকা কোনও পরিবর্তন করে না ...

হ্যালো ওয়ার্ল্ড কোনও অ্যালগরিদম নয় এবং এর জটিলতা নির্ধারণের চেষ্টা করার মতো বুদ্ধিমান-যা কিছুই নয়। একটি সাধারণ অ্যালগরিদম এর মতো কিছু হতে পারে: একটি এলোমেলো সংখ্যা দেওয়া, এটি সমান বা বিজোড় কিনা তা নির্ধারণ করুন। এখন, এটি কি বিবেচনা করে যে প্রদত্ত সংখ্যার 500 সংখ্যা রয়েছে? না, কারণ আপনাকে কেবল শেষ সংখ্যাটি সমান বা বিজোড় কিনা তা পরীক্ষা করে দেখতে হবে। আরও জটিল অ্যালগরিদমটি নির্ধারণ করা হবে যে প্রদত্ত সংখ্যাটি 3 দ্বারা সমানভাবে বিভক্ত হয়েছে কিনা তবে কিছু সংখ্যা গণনা করা "সহজ" হলেও অন্যরা "শক্ত" এবং এটি এর দৈর্ঘ্যের কারণে: সময়ের মধ্যে পুনরায় স্মৃতি নির্ধারণ করতে সময় লাগে তার তুলনা করুন একটি সংখ্যা সহ একটি সংখ্যা এবং 500 সংখ্যা সহ অন্যান্য।

আরও জটিল কেসটি হ'ল কোনও পাঠ্যকে ডিকোড করা। আপনার কাছে প্রতীকগুলির একটি আপাত র্যান্ডম অ্যারে রয়েছে যা আপনি এটিও জানেন যে ডিক্রিপটিং কী রয়েছে তাদের জন্য একটি বার্তা পৌঁছে দিচ্ছেন। ধরা যাক যে প্রেরক বামদিকে কীটি ব্যবহার করেছেন এবং আপনার হ্যালো ওয়ার্ল্ড পড়তে হবে: Gwkki Qieks। "বিগ-হাতুড়ি, নো-মস্তিষ্ক" সমাধান সেই অক্ষরগুলির জন্য সমস্ত সংমিশ্রণ তৈরি করবে: আআআ থেকে জেডজেজ এবং তারপরে কোন শব্দগুলি বৈধ কিনা তা সনাক্ত করতে একটি শব্দ অভিধান অনুসন্ধান করুন এবং সাইফারের দুটি সাধারণ অক্ষর (i, কে) ভাগ করে নিন একই অবস্থান। এই রূপান্তর ফাংশনটি কি বিগ হে!


4

বেশিরভাগ লোক দুটি খুব গুরুত্বপূর্ণ জিনিস অনুপস্থিত মনে হচ্ছে।

  1. প্রোগ্রাম করে একটি ইনপুট আছে। এটি হ'ল হার্ড-কোডেড তারিখ / সময় যার বিরুদ্ধে সিস্টেমের সময়ের তুলনা করা হচ্ছে। ইনপুটগুলি আলগোরিদম চালিত ব্যক্তির নিয়ন্ত্রণে থাকে এবং সিস্টেমের সময় হয় না। এই প্রোগ্রামটি চালাচ্ছেন এমন ব্যক্তিটি কেবল সেই তারিখ / সময়টিকে তুলনা করে কঠোর কোড করেছেন've

  2. প্রোগ্রামটি ইনপুট মানের উপর ভিত্তি করে পরিবর্তিত হয় , তবে ইনপুট সেটটির আকার নয় , যা বিগ-ও নোটেশনের সাথে সম্পর্কিত।

সুতরাং, এটি অনির্দিষ্ট এবং এই প্রোগ্রামটির জন্য সেরা 'বিগ-ও' স্বীকৃতি সম্ভবত ও (নাল), বা সম্ভবত ও (এনএন) হবে।


1
(2) ফ্ল্যাট আউট ভুল। সাধারণত "ইনপুটটির দৈর্ঘ্য" বিবেচনা করা হয়। নির্দিষ্ট আকারের অবজেক্টের একটি তালিকা বা অ্যারের জন্য (পূর্ণসংখ্যার মতো) এটি অবশ্যই সেটটির আকার হবে। 1395195191600333 এর মতো সংখ্যার গুণন করার জন্য এটি এর বাইনারি (বা দশমিক, ইত্যাদি) উপস্থাপনার দৈর্ঘ্য হবে অর্থাৎ অঙ্কের সংখ্যা। (2) তে আপনার সংজ্ঞা হিসাবে "ফাইন্ডপ্রাইম ফ্যাক্টর (ইনট নাম্বার)" এর জটিলতা নিয়ে আলোচনা করতে বিগ-ও ব্যবহার করা নিষিদ্ধ করেছে, যা বেশিরভাগ প্রতিটি ক্রিপ্টোগ্রাফার আপত্তি জানায়।
djechlin

4

প্রত্যেকের সঠিকভাবে উল্লেখ করা হয়েছে যে আপনি এন সংজ্ঞায়িত করেন না , তবে উত্তরটি সবচেয়ে যুক্তিসঙ্গত ব্যাখ্যার অধীনে নেই। তাহলে এন স্ট্রিং আমরা মুদ্রণ করছি এবং দৈর্ঘ্য হল "হ্যালো, দুনিয়া!" এটি একটি উদাহরণ, যেমন আমরা এটিকে "অ্যালগরিদম" হিসাবে বর্ণনা থেকে অনুধাবন করতে পারি hello, world!তবে আলগোরিদমটি হ'ল ( এন ), কারণ আপনার একটি আউটপুট স্ট্রিং থাকতে পারে যা ছাপাতে ত্রিশ, চল্লিশ বা পঞ্চাশ বছর সময় নেয় এবং আপনি 'এটিতে কেবল একটি ধ্রুবক সময় যুক্ত করছি। ও ( কেএন + সি ) ∈ ও ( এন )।

সংযোজন:

আমার অবাক হওয়ার বিষয়, কেউ এই নিয়ে বিতর্ক করছেন। বড় ও ও বড় of এর সংজ্ঞাগুলি স্মরণ করুন Θ ধরুন আমাদের কাছে একটি অ্যালগরিদম রয়েছে যা নিয়মিত সময়ের জন্য সি অপেক্ষা করে এবং তারপরে রৈখিক সময়ে দৈর্ঘ্যের N এর বার্তা প্রিন্ট করে । (এটি মূল কোডের নমুনার একটি সাধারণীকরণ)) নির্বিচারে বলি যে আমরা মুদ্রণ শুরু করতে বিশ বছর অপেক্ষা করি এবং ট্রিলিয়ন অক্ষর মুদ্রণের জন্য আরও বিশ বছর সময় লাগে। যাক = 20 = 10¹², উদাহরণস্বরূপ, কিন্তু কোনো ইতিবাচক বাস্তব সংখ্যার চেষ্টা করতে হবে। এটি ডি = সি / কে (এই ক্ষেত্রে 2 × 10⁻¹¹) অক্ষর অনুসারে বছরের একটি হার , সুতরাং আমাদের কার্যকর করার সময় এফ ( এন ) অ্যাসিপোটোটিকভাবেডিএন + সি সমস্ত এন > কে , এবং ( এন ) ∈ Θ ( এন ) এর জন্য < ডিএন + সি = ( এন ) <2 ডিএন N Qedবছর। যখনই এন > কে , ডিএন = সি / কে এন > সি । অতএব, ডিএন


যেখানে আমাদের এন = 13 রয়েছে
ডিজেচলিন

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

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

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

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

4

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

void TrolloWorld(long currentUnixTime, long loopsPerMs){
    long laterUnixTime = 2051222400000;  //unix time of 01/01/2035, 00:00:00
    long numLoops = (laterUnixTime-currentUnixTime)*loopsPerMs;

    for (long i=0; i<numLoops; i++){
        print ("It's still not time to print the hello …");
    }
    print("Hello, World!");
}

ইনপুটগুলি স্পষ্ট হয় যেখানে কোডটি চালু হওয়ার সময় এবং কোডটি চালিত হার্ডওয়ারের গতির দ্বারা স্পষ্টভাবে দেওয়া হওয়ার আগে। কোডটি ডিটারমিনিস্টিক এবং প্রদত্ত ইনপুটগুলির জন্য একটি সু-সংজ্ঞায়িত আউটপুট থাকে।

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


2

এই সময়ে, হ্যাঁ

এই অ্যালগরিদমের একটি অন্তর্নিহিত ইনপুট রয়েছে, যথা সময়ে প্রোগ্রামটি শুরু হয়েছিল। মৃত্যুদন্ডের সময়টি কখন শুরু হয় তার উপর নির্ভর করে রৈখিকভাবে 1 পরিবর্তিত হয়। 2035 বছর এবং তার পরে, সময় লুপটি অবিলম্বে প্রস্থান করে এবং ধ্রুব ক্রিয়াকলাপের পরে প্রোগ্রামটি সমাপ্ত হয় 2 । সুতরাং এটি বলা যেতে পারে যে রানটাইমটি O(max(2035 - start year, 1))3 । তবে যেহেতু আমাদের শুরুর বছরের নূন্যতম মান রয়েছে, তাই অ্যালগরিদমটি কার্যকর করতে কখনই 20 বছরের বেশি সময় লাগবে না (অর্থাত্ একটি ধ্রুবক মান)।

আপনি 4 নির্ধারণ করে আপনার অভিপ্রায়কে সামনে রেখে আপনার অ্যালগরিদমকে আরও তৈরি করতে পারেনDateTime TwentyYearsLater = DateTime.Now + new TimeSpan(365*20,0,0,0);

1 এটি কার্যকর করার সময়টির আরও প্রযুক্তিগত বোধ ধারণ করে যা অপারেশন সংখ্যা হিসাবে পরিমাপ করা হয় কারণ প্রতি ইউনিটে সর্বাধিক সংখ্যক ক্রিয়াকলাপ রয়েছে।
2 ধরে নেওয়া অনুমান DateTime.Nowকরা একটি ধ্রুবক ক্রিয়াকলাপ, যা যুক্তিসঙ্গত।
3 আমি এখানে কিছুটা বড় হে নোটেশনকে গালি দিচ্ছি কারণ এটি হ্রাসপ্রাপ্ত ফাংশন start year, তবে আমরা এটি সহজেই এর পরিপ্রেক্ষিতে প্রকাশ করে এটি সংশোধন করতে পারি years prior to 2035
4 তারপরে অ্যালগরিদম আর আরম্ভের সময়ের অন্তর্নিহিত ইনপুটটির উপর নির্ভর করে না, তবে এর কোনও ফল হয় না।


1

আমি যুক্তি দেব যে এটি ও (এন)। একটি রেফারেন্স হিসাবে http://www.cforcoding.com/2009/07/plain-english-explanation-of-big-o.html ব্যবহার করে ।

বিগ ও কি?

বিগ ও স্বরলিপি যখন মূল ফ্যাক্টর অনন্তের দিকে ঝুঁকছে তখন মূল কারণগুলিতে বৃদ্ধির হারকে হ্রাস করে একটি অ্যালগরিদমের আপেক্ষিক জটিলতা বর্ণনা করতে চায়।

এবং

বিগ-ও-এর সেরা উদাহরণটি আমি পাটিগণিত করা সম্পর্কে ভাবতে পারি। স্কুলে আমরা শিখেছি প্রাথমিক গাণিতিক অপারেশনগুলি হ'ল:

যোগ; বিয়োগ; গুণ; এবং বিভাগ। এর প্রতিটিই একটি অপারেশন বা সমস্যা a এগুলি সমাধান করার একটি পদ্ধতিকে অ্যালগরিদম বলা হয়।

আপনার উদাহরণের জন্য,

এন = 20 (ইউনিট বছর সহ) এর ইনপুট দেওয়া হয়েছে।

অ্যালগরিদম একটি গাণিতিক ফাংশন f ()। যেখানে f () এর মধ্যে 'ডিবাগ' স্ট্রিং সহ এন বছর অপেক্ষা করা হবে। স্কেল ফ্যাক্টরটি 1. এফ () এই স্কেল ফ্যাক্টরটি পরিবর্তন করে হ্রাস / বা বাড়ানো যেতে পারে।

এই ক্ষেত্রে, আউটপুটটিও 20 (ইনপুট পরিবর্তন আউটপুটকে রৈখিকভাবে পরিবর্তন করে)।

মূলত ফাংশন হয়

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