কোনও ও (1 / এন) অ্যালগরিদম আছে?


335

কোনও ও (1 / এন) অ্যালগরিদম আছে?

বা অন্য কিছু যা ও (1) এর চেয়ে কম?


বেশিরভাগ প্রশ্ন অনুমান করে আপনার বোঝানো হয়েছে "ও (1 / n) এর টাইম জটিলতায় কোনও অ্যালগরিদম আছে কি?" আমরা কি ধরে নেব এই ঘটনাটি? বিগ-ও (এবং বিগ-থেটা ইত্যাদি) ফাংশনগুলি বর্ণনা করে, অ্যালগরিদমগুলিকে নয়। (ফাংশন এবং অ্যালগরিদমের মধ্যে কোনও সমতা আমি জানি না))
জৈঙ্গদেব

4
এটি কম্পিউটার বিজ্ঞানের "ও (এক্স) অ্যালগরিদম" এর সাধারণ বোঝা সংজ্ঞা: একটি অ্যালগরিদম যার সময় জটিলতা ও (এক্স) (কিছু এক্স এক্সের জন্য)।
ডেভিড জেড

2
আমি বাফার ট্রি ব্যবহার করে আই / ও দক্ষ অগ্রাধিকারের সারি অ্যালগরিদমের ক্ষেত্রে এ জাতীয় আবদ্ধ শুনেছি। একটি বাফার ট্রিতে, প্রতিটি অপারেশন O (1 / B) I / Os লাগে; যেখানে বি ব্লকের আকার। এবং n ক্রিয়াকলাপের জন্য মোট I / Os হ'ল O (n / B.log (বেস এম / বি) (এন / বি)), যেখানে লগ অংশটি বাফার গাছের উচ্চতা।
কোডারর

ও (1 / n) ত্রুটির সম্ভাবনা সহ প্রচুর অ্যালগরিদম রয়েছে। উদাহরণস্বরূপ ও (এন লগ এন) বালতি সহ একটি ব্লুম ফিল্টার।
টমাস আহলে

মুরগি যোগ করে আপনি দ্রুত ডিম দিতে পারবেন না।
উইক

উত্তর:


310

এই প্রশ্নটি বোধহয় বোকা নয়। কমপক্ষে তাত্ত্বিকভাবে, (1 / এন ) এর মতো কিছু পুরোপুরি বোধগম্য হয় যখন আমরা বিগ ও স্বরলিপিটির গাণিতিক সংজ্ঞা গ্রহণ করি :

এখন আপনি সহজেই 1 / x এর জন্য g ( x ) কে প্রতিস্থাপন করতে পারেন … এটি স্পষ্টত যে উপরের সংজ্ঞাটি এখনও কিছু f এর জন্য ধারণ করে ।

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

def get_faster(list):
    how_long = (1 / len(list)) * 100000
    sleep(how_long)

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

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


22
'হার্ডওয়্যার দ্বারা প্রয়োগ করা' টিউরিং মেশিনেও প্রযোজ্য। ও (1 / এন) এর ক্ষেত্রে সর্বদা একটি ইনপুট আকার থাকবে যার জন্য অ্যালগরিদম কোনও ক্রিয়াকলাপ চালানোর কথা নয়। এবং তাই আমি ভাবব যে হে (1 / n) সময়ের জটিলতা অর্জন করা সত্যিই অসম্ভব।
রোল্যান্ড ইওয়াল্ড

28
মেহরদাদ, আপনি বুঝতে পারছেন না। ও চিহ্নিতকরণটি সীমা (প্রযুক্তিগতভাবে লিম সুপার) হিসাবে এন -> ∞ হিসাবে কিছু something অ্যালগরিদম / প্রোগ্রামের চলমান সময় হ'ল কিছু মেশিনে পদক্ষেপের সংখ্যা এবং তাই বিযুক্ত হয় - একটি অ্যালগোরিদম গ্রহণ করতে পারে এমন সময়ে একটি শূন্য-নীচের আবদ্ধ থাকে ("একটি পদক্ষেপ")। এটা তোলে হয় সম্ভবত পর্যন্ত কিছু সসীম এন একটি প্রোগ্রাম এন সঙ্গে কমছে একাধিক পদক্ষেপ নেয়, কিন্তু একমাত্র উপায় একটি আলগোরিদিম হে (1 / ঢ), বা প্রকৃতপক্ষে ণ (1), যদি পর্যাপ্ত সবার জন্য সময় 0 লাগে হতে পারে large n - যা সম্ভব নয়।
শ্রীভাতসার

28
O (1 / n) ফাংশন (গাণিতিক অর্থে) বিদ্যমান বলে আমরা একমত নই । অবশ্যই তারা করছে। তবে গণনা সহজাতভাবে পৃথক। ভ্যান নিউমান আর্কিটেকচার বা খাঁটি বিমূর্ত টিউরিং মেশিনে - কোনও প্রোগ্রামের চলমান সময় - এর মতো একটি নিম্ন সীমা রয়েছে এমন কিছু O (1 / n) হতে পারে না । সমানভাবে, O (1 / n) এমন কোনও জিনিসের নীচের সীমানা থাকতে পারে না। (আপনার "স্লিপ" ফাংশনটি আহ্বান করতে হবে, বা ভেরিয়েবল "তালিকা" পরীক্ষা করতে হবে - বা ইনপুট টেপটি একটি টুরিং মেশিনে পরীক্ষা করতে হবে So তাই নেওয়া সময়টি n হিসাবে কিছুটা + + 1 / হিসাবে পরিবর্তিত হবে) এন, যা ও (1 / n) নয়
শ্রীভাতসার

16
যদি টি (0) = ∞ হয়, তবে এটি থামবে না। "টি (0) = as এর মতো কোনও জিনিস নেই তবে এটি এখনও থামে"। তবুও, আপনি যদি R∪ {∞} এ কাজ করেন এবং টি (0) = ∞, এবং টি (n + 1) = টি (এন) / 2 সংজ্ঞায়িত করেন, তবে টি (এন) = all সমস্ত এন এর জন্য। আমাকে পুনরাবৃত্তি করতে দাও: যদি একটি স্বতন্ত্র-মূল্যের ফাংশন O (1 / n) হয় তবে সমস্ত ক্ষেত্রে এটি বৃহত্তর 0 হয় [প্রুফ: টি (এন) = ও (1 / এন) এর অর্থ একটি ধ্রুবক সি এর উপস্থিত থাকে যা এন> এন 0, টি (এন) <সি (1 / এন) এর জন্য, যার অর্থ কোনও এন> সর্বোচ্চ (এন 0,1 / সি), টি (এন) <1, যার অর্থ টি (এন) = 0।] কোন মেশিন, বাস্তব বা বিমূর্ত, 0 সময় লাগতে পারে: এটা হয়েছে ইনপুট তাকান। ওয়েল, মেশিন ছাড়াও যা কখনই কিছু করে না এবং যার জন্য টি (এন) = 0 সমস্ত এন।
শ্রীভাতসার

43
আপনার যে উত্তরটি শুরু হবে পছন্দ করতে হবে "এই প্রশ্নটি বোধহয় মূ .় নয়" "
টেলিমাচাস

138

হ্যাঁ.

রানটাইম ও (1 / n) এর সাথে "খালি" অ্যালগরিদম সহ অবিকল একটি অ্যালগরিদম রয়েছে।

অ্যালগরিদমের জন্য ও (1 / এন) হওয়ার অর্থ এটি কোনও একক নির্দেশনা সমন্বিত অ্যালগরিদমের চেয়ে কম পদক্ষেপে অ্যাসিপোটোটিক্যালি কার্যকর করে। যদি এটি সমস্ত এন> এন 0 এর জন্য এক ধাপের চেয়ে কম পদক্ষেপে কার্যকর হয় তবে অবশ্যই সেই এন এর জন্য অবশ্যই কোনও নির্দেশনা থাকা উচিত। যেহেতু 'if n> n0' চেক করতে কমপক্ষে 1 টি নির্দেশিকা ব্যয় করা হয়েছে, তাই এটি অবশ্যই সমস্ত এন এর কোনও নির্দেশনা সমন্বিত থাকতে হবে।

সংশ্লেষ: একমাত্র আলগোরিদিম যা হে (1 / এন) হ'ল খালি অ্যালগরিদম, কোনও নির্দেশাবলীর সমন্বয়ে ।


2
সুতরাং যদি কেউ জিজ্ঞাসা করে যে খালি অ্যালগরিদমের সময় জটিলতা কী, আপনি ও (1 / এন) এর সাথে উত্তর দিবেন ??? একরকম আমি সন্দেহ করি।
phkahler

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

5
না, এটির রেট করা হয়েছে কারণ এটি ভুল। N এর সাথে স্বাধীন হলে N এর সাথে একটি বড়-ওহ মান প্রকাশ করা ভুল। দ্বিতীয়ত, যে কোনও প্রোগ্রাম চালানো, এমনকী একটি সবেমাত্র বিদ্যমান, ও (1) কমপক্ষে নিয়মিত পরিমাণে সময় নেয়। এমনকি যদি তা না হয় তবে এটি ও (0) হবে, ও (1 / n) নয়।
kenj0418

32
ও (0) এর যে কোনও ক্রিয়াকলাপ হ'ল ও (1 / এন), এবং ও (এন), ও ও (এন ^ 2), ওও (2 ^ n)। দীর্ঘশ্বাস ফেলুন, কেউ কি সাধারণ সংজ্ঞা বুঝতে পারে না? ও () একটি উপরের গণ্ডি।
শ্রীভাতসার আর

16
@ kenj0418 আপনি প্রতিটি বাক্যেই ভুল হতে পেরেছেন। "এন এর সাথে স্বাধীন হলে এন এর সাথে বড় আকারের মান প্রকাশ করা ভুল is" একটি ধ্রুবক ফাংশন একটি নিখুঁতভাবে মূ go় ফাংশন। "দ্বিতীয়ত, যে কোনও প্রোগ্রাম চালানো, এমনকী একটি সবেমাত্র বিদ্যমান, ও (1) কমপক্ষে নিয়মিত পরিমাণে সময় নেয়" " জটিলতার সংজ্ঞা আসলে কোনও প্রোগ্রাম চালানো সম্পর্কে কিছুই বলে না। "এটি ও (0) হবে, ও নয় (1 / n)"। @ শ্রীভাতসার এর মন্তব্য দেখুন।
আলেক্সি রোমানভ

25

তীক্ষ্ণতম সঠিক, হে (1) সেরা সম্ভাব্য পারফরম্যান্স। তবে এটি দ্রুত সমাধান বোঝায় না, কেবল একটি নির্দিষ্ট সময় সমাধান।

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

কোনও সেটে দু'জনের কি একই জন্মদিন হয়? যখন এন 365 ছাড়িয়ে গেছে, সত্যটি ফিরে আসুন। যদিও 365 এরও কম সময়ের জন্য এটি ও (n ln n)। সমস্যাটি আস্তে আস্তে সহজ হয়ে ওঠে না, তবে এন> 365 এর জন্য কেবল ও (1) হয়ে যায় সম্ভবত কোনও দুর্দান্ত উত্তর নয়।


7
366. লিপ বছর সম্পর্কে ভুলবেন না!
নিক জনসন

1
আপনি সঠিক. কম্পিউটারগুলির মতো, আমি মাঝে মধ্যে রাউন্ডিং ত্রুটিগুলির अधीनमा থাকি :-)
অ্যাড্রিয়ান

10
+1 টি। এনপি-সম্পূর্ণ সমস্যাগুলি অনেকগুলি রয়েছে যা এন বৃদ্ধি পাওয়ার সাথে সাথে "পর্যায়ে রূপান্তর" হয়, অর্থাত্ আপনি এন এর একটি নির্দিষ্ট প্রান্তিক মানকে ছাড়িয়ে যাওয়ার সাথে সাথে তারা খুব সহজে বা আরও শক্ত হয়ে যায়। একটি উদাহরণ হ'ল সংখ্যা বিভাজনীয় সমস্যা: n nonnegative পূর্ণসংখ্যার একটি সেট দেওয়া, তাদের দুটি অংশে বিভক্ত করুন যাতে প্রতিটি অংশের যোগফল সমান হয়। এটি একটি নির্দিষ্ট প্রান্তিক মান এ নাটকীয়ভাবে সহজ হয়ে যায়।
j_random_hacker

23

এটা সম্ভব না. বিগ-ও এর সংজ্ঞা অসমতার চেয়ে বৃহত্তর নয় :

A(n) = O(B(n))
<=>
exists constants C and n0, C > 0, n0 > 0 such that
for all n > n0, A(n) <= C * B(n)

সুতরাং বি (এন) প্রকৃতপক্ষে সর্বাধিক মান, অতএব এটি এন হিসাবে বৃদ্ধি পেলে অনুমান পরিবর্তন হবে না।


42
আমার সন্দেহ এই উত্তরটি "সঠিক উত্তর", তবে দুর্ভাগ্যক্রমে আমার এটি বোঝার বুদ্ধি নেই I
ফ্রিস্পেস

12
এএআইএআইএকি এই শর্তটি সমস্ত এন এর জন্য সত্য হতে হবে না, তবে সমস্ত এন> এন টি (যেমন, কেবলমাত্র যখন ইনপুটটির আকার নির্দিষ্ট সীমাতে পৌঁছায়)।
রোল্যান্ড ইওয়াল্ড

30
সংজ্ঞা (এমনকি সংশোধন করা) কীভাবে ওপি-র প্রশ্নের সাথে বিরোধিতা করে তা আমি দেখতে পাই না। সংজ্ঞাটি সম্পূর্ণ স্বেচ্ছাসেবী কর্মের জন্য ধারণ করে! 1 / n বি এর জন্য একটি সম্পূর্ণ বুদ্ধিমান ফাংশন, এবং প্রকৃতপক্ষে আপনার সমীকরণটি এর বিরোধিতা করে না (কেবল গণিত করুন)। তাই কোন, অনেক ঐক্যমত্য সত্ত্বেও, এই উত্তর আসলে ভুল । দুঃখিত।
কনরাড রুডল্ফ

10
ভুল! আমি ডাউনভোটিং পছন্দ করি না তবে আপনি উল্লেখ করেন যে যখন কোনও স্পষ্ট sensক্যমত না হয় তখন এটি অসম্ভব। অনুশীলনে আপনি সঠিক, আপনি যদি 1 / n রানটাইম (সহজ) দিয়ে কোনও ফাংশন তৈরি করেন তবে শেষ পর্যন্ত এটি সর্বনিম্ন সময়কে হ্রাস করবে, কার্যকরভাবে কার্যকর করার সময় এটি একটি ও (1) অ্যালগোরিদমকে কার্যকর করবে। যদিও কাগজে O (1 / n) হওয়া থেকে অ্যালগরিদমকে থামানোর কিছুই নেই।
ঝেরিকো

3
@ জেসন: হ্যাঁ, এখন আপনি এটি বলছেন ... :) @ ঘেরিকো: ও সময়কালীন জটিলতা (১ / এন) কাগজের আইএমএইচওতে কাজ করে না। আমরা একটি টিউরিং মেশিনের জন্য বৃদ্ধির ফাংশন এফ (ইনপুট আকার) = # শীর্ষকে চিহ্নিত করছি। যদি এটি x পদক্ষেপের পরে দৈর্ঘ্যের এন = 1 এর ইনপুটটির জন্য থামায়, তবে আমি একটি ইনপুট আকার বেছে নেব এন >> এক্স, এটি যথেষ্ট বড় যে, যদি অ্যালগরিদম সত্যই ও (1 / n) এ থাকে তবে কোনও ক্রিয়াকলাপ হওয়া উচিত নয় সম্পন্ন. কোনও ট্যুরিং মেশিনকে কীভাবে এটি লক্ষ্য করা উচিত (এটি টেপ থেকে একবারে পড়ার অনুমতি নেই)?
রোল্যান্ড ইওল্ড

16

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

মনে রাখবেন যে ও (1) ও (6) এর সমান, কারণ "ধ্রুবক" কোনও বিষয় নয়। এজন্য আমরা বলি যে (এন) ও (3 এন) এর সমান।

সুতরাং আপনার যদি আরও 1 টি পদক্ষেপের প্রয়োজন হয় তবে এটি হে (1) ... এবং যেহেতু আপনার প্রোগ্রামটির কমপক্ষে 1 টি পদক্ষেপ প্রয়োজন, তাই সর্বনিম্ন একটি অ্যালগরিদম যেতে পারে ও (1)। যদি না আমরা এটি না করি, তবে এটি ও (0), আমি মনে করি? আমরা যদি কিছু কিছু করি তবে তা ও (1), এবং এটি সর্বনিম্ন যেতে পারে।

(আমরা যদি এটি না করা বেছে নিই, তবে এটি জেন ​​বা টাও প্রশ্নে পরিণত হতে পারে ... প্রোগ্রামিংয়ের ক্ষেত্রে, ও (1) এখনও সর্বনিম্ন)।

বা এটি সম্পর্কে:

প্রোগ্রামার : মনিব, আমি ও (1) সময়ে এটি করার একটি উপায় খুঁজে পেয়েছি!
বস : এটি করার দরকার নেই, আমরা আজ সকালে দেউলিয়ার।
প্রোগ্রামার : ওহ, তবে এটি ও (0) হয়ে যায়।


আপনার রসিকতা আমাকে টাও অফ প্রোগ্রামিং থেকে কিছু মনে করিয়ে দিয়েছে: canonical.org/~kragen/tao-of-pogramming.html#book8 (8.3)
kenj0418

শূন্য পদক্ষেপ নিয়ে গঠিত একটি অ্যালগরিদম হ'ল হে (0)। এটি একটি খুব অলস অ্যালগরিদম।
nlply

8

না, এটি সম্ভব নয়:

যেহেতু n 1 / n তে অনন্তের দিকে ঝুঁকেছে আমরা শেষ পর্যন্ত 1 / (inf) অর্জন করি যা কার্যকরভাবে 0।

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

void nothing() {};

এমনকি এটি তর্কযোগ্য!

আপনি কোনও আদেশ কার্যকর করার সাথে সাথে আপনি কমপক্ষে ও (1) এ রয়েছেন, তাই না, আমাদের ও (1 / n) এর একটি বড়-ওহ শ্রেণি থাকতে পারে না!


7

কীভাবে ফাংশনটি চালাবেন না (এনওওপি)? বা একটি নির্দিষ্ট মান ব্যবহার করে। সেটা কি হিসাবের মধ্যে আসে?


16
এটি এখনও ও (1) রানটাইম।
কনরাড রুডল্ফ

2
ঠিক আছে, এটি এখনও ও (1)। আমি দেখতে পাচ্ছি না যে কেউ এটি কীভাবে বুঝতে পারে এবং তবুও অন্য উত্তরে দাবি করুন যে NO-OP এর চেয়ে কম কিছু সম্ভব।
শ্রীভাতসার আর

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

আমি একেবারে ভালভাবে উপলব্ধি করেছি, আপনাকে ধন্যবাদ। বিন্দুটি - যেমনটি আমি অন্যান্য থ্রেডে বেশ কয়েকবার করেছি - তা হ'ল যদি সময়টি ইনপুট দিয়ে হ্রাস পায়, হারের হারে (1 / এন), তবে অবশেষে এটি NOOP দ্বারা নেওয়া সময়ের চেয়ে কমতে হবে। এটি দেখায় যে কোনও অ্যালগরিদম হ'ল asyptotically O (1 / n) হতে পারে না, যদিও অবশ্যই এর রানটাইম একটি সীমা পর্যন্ত হ্রাস পেতে পারে।
শ্রীভাতসার আর

1
হ্যাঁ ... আমি অন্য কোথাও বলেছি, যে কোনও অ্যালগরিদম যা হে (1 / এন) হয় তাও সমস্ত ইনপুটগুলির জন্য শূন্য সময় নেওয়া উচিত, সুতরাং নাল অ্যালগরিদমকে 0 সময় নিতে আপনি বিবেচনা করছেন কিনা তার উপর নির্ভর করে, একটি ও (1) রয়েছে / n) অ্যালগরিদম। সুতরাং আপনি যদি NOOP কে ও (1) হিসাবে বিবেচনা করেন তবে কোনও ও (1 / n) অ্যালগরিদম নেই।
শ্রীভাত্সআর

7

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


6
যদিও এটি বড় ও নয়। প্রশ্নের উত্তর দেওয়ার জন্য আপনি কেবল এটির নতুন সংজ্ঞা দিতে পারবেন না।
জিফ্রে 20

11
এটি কোনও পুনঃনির্ধারণ নয়, এটি
হ'ল

10
আমি বাণিজ্য দ্বারা একটি তাত্ত্বিক কম্পিউটার বিজ্ঞানী। এটি কোনও ফাংশনের অ্যাসিম্পটোটিক অর্ডার সম্পর্কে।
ডেভ

4
বিগ ও একটি স্বেচ্ছাসেবী বাস্তব ফাংশনের সম্পত্তি। সময় জটিলতা তার সম্ভাব্য অ্যাপ্লিকেশনগুলির মধ্যে একটি মাত্র। স্পেস জটিলতা (একটি অ্যালগোরিদম ব্যবহারের মেমরির পরিমাণ) অন্য একটি another যে প্রশ্ন হে সম্পর্কে (1 / ঢ) আলগোরিদিম যে বোঝা এটা এই এক (যদি না আছে আলগোরিদিম যে আমি সম্পর্কে জানি না জন্য প্রযোজ্য অন্য)। অন্যান্য অ্যাপ্লিকেশনগুলির মধ্যে জনসংখ্যা বৃদ্ধির অর্ডার অন্তর্ভুক্ত রয়েছে, যেমন কনওয়ের লাইফ in এছাড়াও দেখুন en.wikedia.org/wiki/Big_O_notation
স্টুয়ার্ট

5
@ ডেভ: এই প্রশ্নটি ছিল না যে ও (1 / n) ফাংশন রয়েছে যা স্পষ্টতই আছে কি না। বরং এটি ছিল যে ও (1 / n) অ্যালগরিদম রয়েছে কি না, যা (নাল ফাংশনটির সম্ভাব্য ব্যতীত) উপস্থিত থাকতে পারে না
কেসব্যাশ

6

ও (1) এর সহজ অর্থ "ধ্রুবক সময়"।

আপনি যখন কোনও লুপটিতে প্রারম্ভিক প্রস্থান যোগ করেন [1] আপনি (বিগ-ও স্বরলিপিতে) কোনও ও (1) অ্যালগরিদমকে ও (এন) এ পরিণত করছেন, তবে এটি দ্রুত তৈরি করছেন।

কৌশলটি সাধারণভাবে ধ্রুবক সময় অ্যালগরিদম সর্বোত্তম, এবং রৈখিক ততক্ষণে তাত্ক্ষণিক, তবে ক্ষুদ্র পরিমাণ এন এর জন্য ক্ষতিকারক অ্যালগোরিদ সম্ভবত দ্রুততর হতে পারে।

1: এই উদাহরণের জন্য একটি স্থির তালিকার দৈর্ঘ্য ধরে নেওয়া


6

যার জন্য এই প্রশ্নটি পড়ে এবং কথোপকথনটি কী তা বুঝতে চায়, তার পক্ষে এটি সহায়তা করতে পারে:

|    |constant |logarithmic |linear|  N-log-N |quadratic|  cubic  |  exponential  |
|  n |  O(1)   | O(log n)   | O(n) |O(n log n)|  O(n^2) |  O(n^3) |     O(2^n)    |
|  1 |       1 |          1 |     1|         1|        1|       1 |             2 |
|  2 |       1 |          1 |     2|         2|        4|       8 |             4 |
|  4 |       1 |          2 |     4|         8|       16|      64 |            16 |
|  8 |       1 |          3 |     8|        24|       64|     512 |           256 |
| 16 |       1 |          4 |    16|        64|      256|   4,096 |         65536 |
| 32 |       1 |          5 |    32|       160|    1,024|  32,768 | 4,294,967,296 |
| 64 |       1 |          6 |    64|       384|    4,069| 262,144 |   1.8 x 10^19 |

5

আমি বিশ্বাস করি কোয়ান্টাম অ্যালগরিদমগুলি সুপারপজিশনের মাধ্যমে "একবারে" একাধিক গণনা করতে পারে ...

আমি সন্দেহ করি এটি একটি দরকারী উত্তর।


এটি এখনও ধ্রুবক সময় হতে পারে, অর্থাৎ ও (1), যার অর্থ এটি আকারের ডেটা চালানোর জন্য একই পরিমাণ সময় নেয় কারণ এটি আকারের 1 এর ডেটা ব্যবহার করে
ফ্রিস্পেস

2
তবে সমস্যাটি যদি ফ্যাকাশে আলে হত? (আহ। হা। হা।)
জেফ মিটবল ইয়াং

7
এটি হতে পারে একটি দুর্দান্ত অবস্থান
ড্যানিয়েল আরউইকার

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

2
এটি সম্ভবত দরকারী নয়, তবে এটি সত্য হওয়ার সুবিধা রয়েছে যা এটি আরও বেশি ভোট দেওয়া উত্তরগুলির উপরে রাখে বি-)
ব্রায়ান পোস্তো

4

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


2

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


2

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


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

2

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


1
আমি নিশ্চিত নই বুঝতে পেরেছি. লগ (এন) এন এর চেয়ে কম হয় তার মানে কি লগ (এন) একটি সাবলাইনার অ্যালগরিদম? এবং অনেক লগ (এন) অ্যালগোরিদমের উপস্থিতি রয়েছে। এরকম একটি উদাহরণ বাইনারি গাছে একটি মান সন্ধান করা। যাইহোক, এগুলি এখনও 1 / N এর চেয়ে পৃথক, যেহেতু লগ (এন) সর্বদা বাড়ছে, যখন 1 / এন হ্রাসযোগ্য ক্রিয়াকলাপ।
কিব্বি

সংজ্ঞাটির দিকে তাকালে, সাবলাইনার টাইম অ্যালগরিদম হ'ল এমন কোনও অ্যালগোরিদম যার সময় আকারের চেয়ে ধীরে ধীরে N হয়।
হাও উওই লিম

2
ওহ, সাবলাইনারের সময়কালীন অ্যালগোরিদমগুলি সঠিক উত্তর দিতে পারে, যেমন একটি র‌্যাম মেশিনে অর্ডার করা অ্যারেতে বাইনারি অনুসন্ধান।
এ। রেক্স

@A। রেক্স: হাও ওউই লিম "কিছু সমস্যা" বলেছিলেন।
LarsH

1

এই সম্পর্কে কি:

void FindRandomInList(list l)
{
    while(1)
    {
        int rand = Random.next();
        if (l.contains(rand))
            return;
    }
}

তালিকার আকার বাড়ার সাথে সাথে প্রোগ্রামটির প্রত্যাশিত রানটাইম হ্রাস পাবে।


আমি মনে করি আপনি ও (এন) এর অর্থ বুঝতে পারবেন না
মার্কাস লসবার্গ

যদিও তালিকার সাথে নেই, অ্যারে বা হ্যাশের সাথে কোথায় constainsরয়েছে ও (1)
ভাভা

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

আপনি যদি দেখতে পান যে কোন মানগুলির সীমিত সেট রয়েছে তবে তিনি কিছুটা পয়েন্ট পেয়েছেন। সুতরাং আমি যখন 2 <sup> 64 </sup> মান ধারণ করে এটি সমস্ত দিক থেকে তাত্ক্ষণিক হয়ে উঠবে। যা এটিকে যাইহোক ও (1) এর চেয়ে খারাপ করে তোলে :)
ভাভা

1

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


1
"ও (1 / এন) এর চেয়ে কম নয় তবে ও (1)" - কোনও ফাংশন যদি ও (1 / এন) হয় তবে এটি ও (1 )ও হবে। এবং বিগ-ওহ অনেকটা "সম্পর্কের চেয়েও কম" সম্পর্কের মতো অনুভব করে: এটি রিফ্লেকসিভ, এটি ট্রানজিটিভ এবং যদি আমাদের f এবং g এর মধ্যে প্রতিসাম্য থাকে তবে দুটি সমতুল্য, যেখানে বিগ-থিটা আমাদের সমতুল্য সম্পর্ক। ISTR "আসল" অর্ডারিং সম্পর্কের জন্য একটি <= b এবং b <= a বোঝাতে a = b, যদিও, এবং নেটক্রাফ্ট ^ ডাব্লু উইকিপিডিয়া এটি নিশ্চিত করে। সুতরাং এক অর্থে, এটি বলা ন্যায়সঙ্গত যে হে (1 / এন) "ও (1) এর চেয়ে" কম less
জোনাস কলকার

1

হিসাবে উল্লেখ করা হয়েছে, নাল ফাংশন এর সম্ভাব্য ব্যতিক্রম বাদে, কোন কিছুই হতে পারে O(1/n) ফাংশন , কারণ সময়কালে সময় 0 যেতে হবে।

অবশ্যই, কিছু অ্যালগরিদম রয়েছে যেমন কনরাড দ্বারা সংজ্ঞায়িত করা হয়েছে, যা মনে হয় এগুলি O(1)কমপক্ষে কিছুটা অর্থে কম হওয়া উচিত ।

def get_faster(list):
    how_long = 1/len(list)
    sleep(how_long)

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


1

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

আপনি ধাপের আকার (এইচ) বা বিভাগের সংখ্যা (এন) সম্পর্কে কথা বলছেন কিনা তার উপর নির্ভর করে অনেকগুলি অ্যালগরিদমগুলি ও (এইচ ^ পি) বা ও (এন ^ {- পি}) হতে পারে। উদাহরণস্বরূপ, ইউলারের পদ্ধতিতে আপনি y (h) এর অনুমানের জন্য সন্ধান করেছেন যে আপনি y (0) এবং dy / dx (y এর ডেরিভেটিভ) জানেন। আপনার y (h) এর অনুমানটি আরও নিখুঁত হয় 0 এর নিকটতম 0 প্রতিটি বিন্দুতে, y (0) থেকে y (x / n) থেকে y (2x / n), ইত্যাদি পেতে।

সুতরাং অয়লারের পদ্ধতিটি তখন একটি ও (এইচ) বা ও (1 / এন) অ্যালগরিদম হয়, যেখানে h সাধারণত একটি ধাপের আকার হিসাবে ব্যাখ্যা করা হয় এবং n আপনি একটি বিরতি ভাগ করার সময় হিসাবে সংখ্যায়িত হয়।

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

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


0

ঠিক আছে, আমি এটি সম্পর্কে কিছুটা চিন্তাভাবনা করেছি, এবং সম্ভবত একটি অ্যালগরিদম রয়েছে যা এই সাধারণ ফর্মটি অনুসরণ করতে পারে:

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


4
ও (এন) এর পরে এটি বিভিন্ন ধরণের এন। এই কৌশলটি দ্বারা আপনি বলতে পারবেন যে প্রতিটি অ্যালগরিদমে O (q) রয়েছে যেখানে q উদাহরণস্বরূপ চিনে বসবাসকারী সংখ্যার লোক।
ভাভা

2
বয়ের-মুর একই ধরণের (ও (এন / এম)), তবে এটি সত্যই "ও (1) এর চেয়ে ভাল" নয়, কারণ এন> = মি। আমি মনে করি আপনার "অযাচিত টিএসপি" এর ক্ষেত্রেও এটি সত্য।
নিকি

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

0

আমি একটি অ্যালগরিদম দেখতে পাচ্ছি যা ও (1 / n) একটি উপরের সীমানায় স্বীকৃত:

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

এখন, যদি এটি পরিবর্তন না করা হয় তবে আপনি কেবল আইটেমের একটি তালিকা তৈরি করবেন, এলোমেলোভাবে চয়ন করুন এবং ও (1) সময় পাবেন। তবে তথ্যের গতিশীল প্রকৃতি তালিকা তৈরির বিষয়টি বাদ দেয়, আপনাকে এলোমেলোভাবে তদন্ত করতে হবে এবং তদন্তের বৈধতা পরীক্ষা করতে হবে। (এবং লক্ষ করুন যে সহজাতভাবে উত্তর নেই যে এটি ফিরে আসার পরেও কার্যকর আছে guarantee এটি এখনও ব্যবহার করতে পারে - বলুন, একটি গেমের ইউনিটের জন্য এআই। এটি লক্ষ্যবস্তুতে গুলি করতে পারে যা দৃশ্যটি বাইরে ছিটকে গিয়েছিল was ট্রিগারটি টানছে)

এটি অনন্তের সবচেয়ে খারাপ ক্ষেত্রে পারফরম্যান্স পেয়েছে তবে ডেটা স্থান পূরণের সাথে সাথে একটি গড় কেস পারফরম্যান্স down


0

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

class Function
{
    public double[] ApproximateSolution(double tolerance)
    {
        // if this isn't sub-constant on the parameter, it's rather useless
    }
}

আপনি কি সত্য উপ-ধ্রুবক, বা সাবলাইনার বোঝাতে চান? কেন আনুমানিক আলগোরিদিমগুলি সাব-ধ্রুবক হওয়া উচিত? এবং এর মানে কি ??
LarsH

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

@ অ্যান্ড্রুলি: বাহ, প্রায় 7 বছর পরে একটি উত্তর! আমি তখনকার চেয়ে স্যামের উত্তরটি আরও ভালভাবে বুঝতে পারি। সাড়া দেওয়ার জন্য ধন্যবাদ।
লার্শ

0

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

def 1_by_n(n, C = 10):   #n could be float. C could be any positive number
  if n <= 0.0:           #If input is actually 0, infinite loop.
    while True:
      sleep(1)           #or pass
    return               #This line is not needed and is unreachable
  delta = 0.0001
  itr = delta
  while delta < C/n:
    itr += delta

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

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

আমি আরও বিশ্বাস করি যে আমরা কেবল এটি বলতে পারি না যে রান সময়টি ও (1 / n)। তবে আমাদের ও (1 + 1 / n) এর মতো কিছু বলা উচিত


-1

O (1 / n) একটি অ্যালগরিদম নির্মাণ করা সম্ভব হতে পারে। একটি উদাহরণ এমন একটি লুপ হবে যা f (n) এর একাধিক বারের পুনরাবৃত্তি করে যেখানে f (n) এমন কিছু ফাংশন যার মান n এর চেয়ে বড় হওয়ার গ্যারান্টিযুক্ত এবং f (n) -n এর সীমানা হিসাবে এন অফ ইনফিনিটি হয় শূন্য। F (n) এর গণনাও সমস্ত n এর জন্য ধ্রুবক হওয়া দরকার। আমি জানি না এফ (এন) দেখতে কেমন হবে বা এই জাতীয় অ্যালগরিদমের কী প্রয়োগ হবে, আমার মতে তবে এই ধরনের ফাংশন থাকতে পারে তবে ফলিত অ্যালগরিদমের সাথে কোনও অ্যালগোরিদমের সম্ভাবনা প্রমাণ করা ছাড়া অন্য কোনও উদ্দেশ্য থাকতে পারে না I হে (1 / ঢ)।


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

-1

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


-2

উত্তর যদি ইনপুট ডেটা নির্বিশেষে একই হয় তবে আপনার কাছে একটি ও (0) অ্যালগরিদম রয়েছে।

বা অন্য কথায় - ইনপুট ডেটা জমা দেওয়ার আগে উত্তরটি জানা যায় - ফাংশনটি অপ্টিমাইজ করা যায় - সুতরাং হে (0)


সত্যি? আপনাকে এখনও কোনও মান ফেরত দিতে হবে, তবে এটি এখনও ও (1) হবে না?
জোছিম সউর

7
না, ও (0) বোঝায় যে এটি সমস্ত ইনপুটগুলির জন্য শূন্য সময় নেয়। ও (1) ধ্রুবক সময়।
পিট কির্খাম

-2

বিগ-ও স্বরলিপিটি একটি অ্যালগরিদমের জন্য সবচেয়ে খারাপ পরিস্থিতি উপস্থাপন করে যা এটির সাধারণ রান সময় হিসাবে একই জিনিস নয়। এটি প্রমাণ করা সহজ যে কোনও হে (1 / এন) অ্যালগরিদম হল একটি হে (1) অ্যালগরিদম। সংজ্ঞা অনুসারে,
ও (1 / এন) -> টি (এন) <= 1 / এন, সমস্ত এন> = সি> 0
ও (1 / এন) -> টি (এন) <= 1 / সি, যেহেতু 1 / n <= 1 / C সকল এন এর জন্য = সি
ও (1 / এন) -> ও (1), যেহেতু বিগ-ও স্বীকৃতি ধ্রুবকগুলিকে উপেক্ষা করে (অর্থাত সি এর মান কিছু যায় না)


না: বিগ ও স্বরলিপিটি গড়-কেস এবং প্রত্যাশিত সময় (এবং এমনকি সেরা-কেস) পরিস্থিতি সম্পর্কে কথা বলতেও ব্যবহৃত হয়। বাকিগুলি অনুসরণ করে।
কনরাড রুডল্ফ

'ও' স্বরলিপি অবশ্যই একটি উপরের বাউন্ডকে সংজ্ঞায়িত করে (অ্যালগোরিদমিক জটিলতার ক্ষেত্রে এটি সবচেয়ে খারাপ ক্ষেত্রে হবে)। ওমেগা এবং থেটা যথাক্রমে সেরা এবং গড় কেসটি বোঝাতে ব্যবহৃত হয়।
রোল্যান্ড ইওয়াল্ড

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

কনরাড: সত্য। তবুও, ওমেগা, থিয়েটা এবং হে সাধারণত সীমা প্রকাশ করতে ব্যবহৃত হয় এবং যদি সমস্ত সম্ভাব্য ইনপুট বিবেচনা করা হয় তবে ও ওপরের সীমানা ইত্যাদি উপস্থাপন করে
Roland Ewald

1
ও (1 / এন) ও (1) এর উপসেট হ'ল বিষয়টি তুচ্ছ এবং সংজ্ঞা থেকে সরাসরি অনুসরণ করা হয়। আসলে, যদি একটি ফাংশন জি ও (হ) হয় তবে যে কোনও ফাংশন ও (ও) হ'ল ও (হ) হয় is
টোবিয়াস

-2

ও (1) এর চেয়ে কিছুই ছোট নয় বিগ-ও স্বরলিপিটি একটি অ্যালগোরিদমের জটিলতার বৃহত্তম ক্রমকে বোঝায়

যদি একটি অ্যালগরিদমের n time 3 + n ^ 2 + n + 5 এর রানটাইম থাকে তবে এটি O (n ^ 3) নিম্ন শক্তিগুলি এখানে মোটেই গুরুত্ব দেয় না কারণ এন -> ইনফ, এন ^ 2 এর তুলনায় অপ্রাসঙ্গিক হবে এন ^ 3

অনুরূপভাবে এন -> ইনফ, ও (1 / এন) ও (1) এর তুলনায় অপ্রাসঙ্গিক হবে সুতরাং 3 + ও (1 / এন) ও (1) এর সমান হবে সুতরাং ও (1) সবচেয়ে কম সম্ভাব্য গণনাযোগ্য হবে জটিলতা


-2
inline void O0Algorithm() {}

1
এটি একটি ও (1) অ্যালগরিদম হবে।
লাসে ভি কার্লসেন

2
এটি পাশাপাশি, তবে মূল বিষয়টি এটি Ω (1) নয়। এবং কেন আমার উত্তর হ্রাস করা হয়েছে? আপনি যদি মনে করেন আমি ভুল, কিভাবে ব্যাখ্যা করবেন?
স্টুয়ার্ট

আমি অন্যত্র জিজ্ঞাসা, মূলত, এই খুব উত্তরটি সঠিক বা না, এবং এটি বিতর্কিত হবে বলে মনে হয়: stackoverflow.com/questions/3209139/...
jyoungdev

ভাল এটি ইনলাইন, যাতে আপনি এটি ও (0) বিবেচনা করতে পারেন। তবে, সমস্ত ও (0) অ্যালগরিদমগুলি তুচ্ছ (কিছুই করছে না), তাই ... খুব আকর্ষণীয় উত্তর নয় not
স্টিফান রেইচ

@ স্টেফানরিচ সত্য, এটি খুব আকর্ষণীয় উত্তর নয়, তবে এটি একটি উত্তর।
স্টুয়ার্ট

-2

এখানে একটি সাধারণ হে (1 / এন) অ্যালগরিদম। এবং এটি এমনকি আকর্ষণীয় কিছু করে!

function foo(list input) {
  int m;
  double output;

  m = (1/ input.size) * max_value;  
  output = 0;
  for (int i = 0; i < m; i++)
    output+= random(0,1);

  return output;
}

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


1
যেহেতু O (1 / n) অনুভূমিক রেখা = 1 এর নীচে নেমে যাবে এবং যখন এন অসীম পৌঁছে যাবে, তখনও আপনার কোড একটি প্রদত্ত সংখ্যক পদক্ষেপ কার্যকর করবে, এই অ্যালগরিদম হল একটি হে (1) অ্যালগরিদম। বিগ-ও স্বরলিপিটি অ্যালগরিদমের সমস্ত পৃথক অংশের একটি ক্রিয়া এবং এটি সবচেয়ে বড়টিকে পছন্দ করে। যেহেতু পদ্ধতিটি সর্বদা কিছু নির্দেশাবলী চালিত করে, যখন এন অসীম পৌঁছে যায়, আপনি প্রতিবার একই নির্দেশাবলী চালিয়ে যাবেন এবং এই পদ্ধতিটি ধ্রুব সময়ে চালিত হবে। মঞ্জুর, এটি বেশি সময় পাবে না তবে এটি বিগ-ও স্বরলিপিটির সাথে প্রাসঙ্গিক নয়।
লাসে ভি কার্লসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.