"এন এর ছোট মানগুলির জন্য, ও (এন) এমন আচরণ করা যেতে পারে যেন এটি ও (1) হয়"


26

আমি বেশ কয়েকবার শুনেছি যে পর্যাপ্ত পরিমাণে n এর জন্য O, n (O) এর বিষয়ে ধারণা / চিকিত্সা করা যেতে পারে যেন এটি O (1)।

উদাহরণ :

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

যথেষ্ট ছোট কি? 10? 100? 1,000? আপনি কী বিন্দুতে বলেছেন "আমরা আর এটি একটি নিখরচায়ার মতো আচরণ করতে পারি না"? থাম্ব একটি নিয়ম আছে?

এটি ডোমেন- বা কেস-সুনির্দিষ্ট হতে পারে বলে মনে হচ্ছে তবে কীভাবে এটি সম্পর্কে চিন্তা করা যায় সে সম্পর্কে কোনও সাধারণ নিয়ম রয়েছে?


4
থাম্বের বিধি নির্ভর করে আপনি কোন সমস্যার সমাধান করতে চান। দিয়ে এম্বেড থাকা সিস্টেমগুলিতে দ্রুত থাকবেন ? জটিলতা তত্ত্বে প্রকাশ করবেন? n100
রাফেল

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

12
@rianjs আপনি ভুল হবে বলে মনে হচ্ছে O(1)জন্য বিনামূল্যে । প্রথম কয়েকটি বাক্যগুলির পিছনে যুক্তিটি O(1)হ'ল ধ্রুবক , যা কখনও কখনও অত্যন্ত ধীর হতে পারে। ইনপুট নির্বিশেষে এক হাজার কোটি বছর সময় লাগে এমন একটি O(1)গণনা is
মাকিং হাঁস

1
আমরা কেন প্রথম স্থানে অ্যাসিম্পটিকগুলি ব্যবহার করি সে সম্পর্কিত সম্পর্কিত প্রশ্ন
রাফেল

3
@ আরিঞ্জস: "পেন্টাগনটি প্রায় একটি বৃত্ত, যথেষ্ট পরিমাণে 5 টির জন্য বড় আকারের জন্য" র মত জোকস সম্পর্কে সচেতন হন। আপনি যে বাক্যটির বিষয়ে জিজ্ঞাসা করছেন তা একটি বিষয়বস্তু তৈরি করে, তবে যেহেতু এটি আপনাকে কিছুটা বিভ্রান্তি সৃষ্টি করেছে, তাই এরিক লিপার্টকে জিজ্ঞাসা করা আপনার পক্ষে মূল্যবান হতে পারে যে শব্দবন্ধের এই সঠিক পছন্দটি হাস্যকর প্রভাবের জন্য কতটা ছিল। তিনি বলেন, থাকতে পারে, "যদি কোনো থাকে তাহলে উপরের উপর আবদ্ধ তারপর প্রতি সমস্যা হে ( 1 ) " এবং এখনও গাণিতিকভাবে সঠিক হয়েছে না। "ছোট" গণিতের অংশ নয়। nO(1)
স্টিভ জেসোপ

উত্তর:


21

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

এটি সম্পর্কে চিন্তা করার জন্য এখানে একটি দর্শনীয় উপায়।

এখানে চিত্র বর্ণনা লিখুন

সকলের একটি স্টার্টআপ ধ্রুবক থাকে যা Y অক্ষের উপর তাদের প্রারম্ভিক অবস্থানটি নির্ধারণ করে। প্রত্যেকের একটি ক্রমবর্ধমান ধ্রুব যে তারা কীভাবে দ্রুত বৃদ্ধি পাবে।C

  • জন্য , সি সময় নির্ধারণ করে।O(1)C
  • সত্যই সি × n , যেখানে সি কোণ নির্ধারণ করে।O(n)C×nC
  • আসলে ( সি × এন ) 2 , যেখানে সি বক্রের তীক্ষ্ণতা নির্ধারণ করে।O(n2)(C×n)2C

আপনার কোন অ্যালগরিদম ব্যবহার করা উচিত তা নির্ধারণ করার জন্য, আপনাকে রানটাইমগুলি ছেদ করে এমন জায়গাটি অনুমান করতে হবে। উদাহরণস্বরূপ, যদি একটি একটি উচ্চ প্রারম্ভকালে সময় বা একটি উচ্চ সঙ্গে সমাধান সি একটি থেকে নষ্ট হয়ে যাবে হে ( ) একটি কম প্রারম্ভকালে সময় এবং কম সঙ্গে সমাধান সি আইটেম মোটামুটি বৃহৎ সংখ্যক এ।O(1)CO(n)C

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

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

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

যেহেতু এই প্রয়োজনীয়তাগুলি পরিবর্তন সাপেক্ষে, তাই এই ইন্টারফেসের পিছনে এই ধরণের সিদ্ধান্ত নেওয়া গুরুত্বপূর্ণ। উপরের গাছ / তালিকার উদাহরণে গাছ বা তালিকাটি প্রকাশ করবেন না। এইভাবে, যদি আপনার অনুমানগুলি ভুল হিসাবে দেখা দেয় বা আপনি আরও ভাল অ্যালগরিদম খুঁজে পান তবে আপনি আপনার মতামত পরিবর্তন করতে পারেন। এমনকি আইটেমের সংখ্যা বাড়ার সাথে সাথে আপনি একটি হাইব্রিডও করতে পারেন এবং गतिशीलভাবে অ্যালগরিদমগুলি স্যুইচ করতে পারেন।


বলা অর্থহীন । আপনার সত্যিকারের অর্থ যা হ'ল চলমান সময়টি যদি টি = ( 1 ) হয় তবে (অনেক ক্ষেত্রে) টি সে । যদি T = O ( n ) হয় তবে অনেক ক্ষেত্রে T C n , বা আরও আনুষ্ঠানিকভাবে T = C n + o ( n ) । ইত্যাদি। তবে দ্রষ্টব্য, অন্য ক্ষেত্রে ধ্রুবক সি এর সাথে পরিবর্তিত হয়O(1)=O(C)T=O(1)TCT=O(n)TCnT=Cn+o(n)C , নির্দিষ্ট গণ্ডির মধ্যে। n
যুবাল ফিল্মাস

@ ইউভালফিল্মাস এই কারণেই আমি গ্রাফগুলি পছন্দ করি।
শোওয়ার্ন

এটি এখন পর্যন্ত সেরা উত্তর, মূল বিষয়টি কীভাবে দ্রুত ফাংশন বড় হয়।
রিকার্ডো

1
দুর্দান্ত গ্রাফ, তবে অক্ষটি সত্যই "গতি" নয়, "সময়" লেবেলযুক্ত হওয়া উচিত। y
ইলমারি করোনেন

1
কি লাইন সত্যিই একটি অধিবৃত্ত, সেখানে? এটি ছোট এন এর জন্য খুব সমতল এবং বড় এন এর জন্য খুব খাড়া দেখাচ্ছে । O(n2)nn
ডেভিড রিচারবি

44

এটি ইতিমধ্যে পোস্ট করা উত্তরগুলিতে মূলত পিগি-ব্যাকিং, তবে এটি অন্যরকম দৃষ্টিকোণ সরবরাহ করতে পারে।

এটি প্রকাশ করে যে প্রশ্নটি " এন এর যথেষ্ট পরিমাণে ছোট মানগুলি" নিয়ে আলোচনা করে । বিগ-ও এর পুরো বিষয়টি হ'ল প্রক্রিয়াজাতকরণ কীভাবে প্রক্রিয়াজাত হচ্ছে তার কার্যকারিতা হিসাবে কীভাবে প্রসেসিং বৃদ্ধি পায় তা বর্ণনা করা describe যদি প্রক্রিয়াজাত করা ডেটাটি ছোট থাকে, তবে বিগ-ও-কে নিয়ে আলোচনা করা অপ্রাসঙ্গিক, কারণ আপনি বৃদ্ধিতে আগ্রহী নন (যা ঘটছে না)।

আরেকটি উপায় রাখুন, আপনি যদি রাস্তার নিচে খুব অল্প দূরত্বে চলে যান তবে হাঁটাচলা, সাইকেল ব্যবহার করা বা গাড়ি চালানো সমান দ্রুত হতে পারে। আপনার গাড়ীর চাবিগুলি খুঁজে পেতে যদি আপনার কিছুটা সময় লাগে বা আপনার গাড়ীতে গ্যাসের প্রয়োজন হয় তবে এটি হাঁটতে আরও দ্রুত হতে পারে etc.

ছোট এন এর জন্য , যা কিছু সুবিধাজনক তা ব্যবহার করুন।

যদি আপনি ক্রস-কান্ট্রি ট্রিপ নিচ্ছেন, তবে আপনার ড্রাইভিং, আপনার গ্যাস মাইলেজ ইত্যাদির অনুকূলকরণের উপায়গুলি আপনার প্রয়োজন look


5
"ছোট এন এর জন্য, যা কিছু সুবিধাজনক তা ব্যবহার করুন" " - আপনি যদি প্রায়শই অপারেশনটি সম্পাদন করেন তবে দ্রুততম চয়ন করুন (আপনার )। এখানেও দেখুন । n
রাফেল

4
দুর্দান্ত রূপক!
ইওওলর

1
একটি বিশুদ্ধরূপে গাণিতিক দৃষ্টিকোণ থেকে, asymptotic জটিলতা আপনি কিছুই যখন বলে n < infinity
গর্ডন গুস্তাফসন

15

উদ্ধৃতিটি বরং অস্পষ্ট এবং অনর্থক। কমপক্ষে তিনটি সম্পর্কিত উপায় রয়েছে যার মাধ্যমে এটি ব্যাখ্যা করা যায়।

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

আরো ব্যবহারিক বিন্দু যে, যখন আমরা বলি যে অ্যালগরিদম চলমান সময় , যে একমাত্র উপায় এটাই এসিম্পটোটিকভাবে N 2  পদক্ষেপ, কিছু ধ্রুবক জন্য  সি । এটি হ'ল কিছু ধ্রুব n 0 রয়েছে যা সমস্ত n n 0 এর জন্য অ্যালগরিদম মোটামুটি সি n 2 পদক্ষেপ নেয় । তবে সম্ভবত এন 0 = 100 , 000 , 000Θ(n2) cn2Cn0nn0cn2n0=100,000,000এবং আপনি কেবল তার চেয়ে অনেক ছোট আকারের দৃষ্টিতে আগ্রহী। অ্যাসিম্পটোটিক চতুর্ভুজীয় সীমাটি আপনার ছোট উদাহরণগুলিতেও প্রযোজ্য নয়। আপনি ভাগ্যবান হতে পারেন এবং এটি ছোট ইনপুটগুলিতে দ্রুত হতে পারে (বা আপনি দুর্ভাগ্য হতে পারেন এবং এটি ধীরে ধীরে হতে পারে)। উদাহরণস্বরূপ, ছোট  , এন 2 < 1000 এন এর জন্য আপনি খারাপ ধ্রুবকগুলির সাথে রৈখিক অ্যালগরিদমের চেয়ে ভাল ধ্রুবক সহ একটি চতুর্ভুজ অ্যালগরিদম চালিয়ে যান। এই একটি বাস্তব জীবনের উদাহরণ এসিম্পটোটিকভাবে সবচেয়ে বেশি কার্যকরী ম্যাট্রিক্স গুণ আলগোরিদিম (রুপভেদ হয় কপারস্মিথ-Winograd , সময় চলমান হে ( 2.3729 ) ) কদাপি অনুশীলন ব্যবহার করা হয় কারণ Strassen এর হেnn2<1000nO(n2.3729) অ্যালগরিদম দ্রুততর হয় যদি না আপনার ম্যাট্রিকগুলি সত্যই বড় হয়।O(n2.8074)

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


4
পুরোপুরি সঠিক এবং বৈধ পয়েন্টগুলি থাকা সত্ত্বেও, আমি মনে করি আপনি পয়েন্টটি মিস করেছেন। মনে হয় তাদের বোঝানো হয়েছে যে কখনও কখনও সাথে অ্যালগরিদম ( 1 ) এর সাথে একটি অ্যালগরিদমের তুলনায় আরও ভাল পারফরম্যান্স করে ছোট ছোট এনএস এর জন্য। এটি ঘটে, উদাহরণস্বরূপ, যখন প্রাক্তনের চলমান সময় হয় 10 এন + 50 , যখন পরবর্তীটি 100000 সময় চালিত হয় । তারপর, জন্য এন ছোট যথেষ্ট এটা আসলে ব্যবহার করতে দ্রুততর হে ( ) প্রোটোকল। O(n)O(1)n10n+50100000nO(n)
রণ জি।

@RanG। এটা কি আমার দ্বিতীয় মামলায় আসে না? (বিশেষত যদি আমি এটির মতো আরও কিছু বলার জন্য সম্পাদনা করি তবে "ভাল ধ্রুবক সহ একটি লিনিয়ার অ্যালগরিদম খারাপ ধ্রুবকগুলির সাথে একটি ধ্রুবক /
লোগারিথমিক

1
এন ছোট হলে ধ্রুবকের গুরুত্ব স্পষ্টভাবে উল্লেখ করা ভাল হবে । এটি এমন কিছু যা সম্ভবত এর আগে কখনও শোনেনি এমন কারওর জন্য ঘটে না।
রব ওয়াটস

9

বিগ-ও স্বরলিপিটি কেবল স্বেচ্ছাসেবী বড় এন এর আচরণ সম্পর্কে কিছু বলে। উদাহরণস্বরূপ, অর্থ হল একটি ধ্রুবক সি> 0 এবং একটি পূর্ণসংখ্যা n 0 যেমন প্রতিটি এন > এন 0 এর জন্য ( এন ) < সি এন 2 থাকেf(n)=O(n2)n0f(n)<cn2n>n0

অনেক ক্ষেত্রে, আপনি একটি ধ্রুবক সি খুঁজে পেতে এবং "প্রতিটি এন> 0 এর জন্য, চ (এন) প্রায় " বলতে পারেন। যা দরকারী তথ্য আছে। তবে কিছু ক্ষেত্রে এটি সত্য নয়। যদি f (n) = n 2 + 10 18 হয় তবে এটি সম্পূর্ণ বিভ্রান্তিকর। তাই কেবলমাত্র কোনও কিছু O (n ^ 2) এর অর্থ এই নয় যে আপনি আপনার মস্তিষ্ক স্যুইচ করতে পারেন এবং আসল ফাংশনটি উপেক্ষা করতে পারেন।cn2n2+1018

অন্যদিকে, যদি আপনি কেবলমাত্র n = 1, 2 এবং 3 মানের মুখোমুখি হন তবে অনুশীলনে এফ (এন) n ≥ 4 এর জন্য কী করে তা কোনও পার্থক্য করে না, সুতরাং আপনি সেই চটিকে বিবেচনা করতে পারেন ( n) = ও (1), সি = সর্বোচ্চ (চ (1), চ (2), চ (3)) সহ। এবং এটিই যথেষ্ট পরিমাণে ছোট্ট এর অর্থ: যদি f (n) = O (1) দাবী আপনাকে বিভ্রান্ত না করে তবে যদি চ (এন) এর একমাত্র মানগুলি আপনার মুখোমুখি হয় তবে "যথেষ্ট পরিমাণে ছোট"।


5

যদি এটি বৃদ্ধি না পায় তবে এটি ও (1)

লেখকের বক্তব্যটি কিছুটা অজস্র।

বৃদ্ধির অর্ডারগুলি বর্ণনা করে যে আপনার কাজের পরিমাণ বৃদ্ধির সাথে কী হবে তার কী ঘটে N। আপনি কি জানেন যে যদি Nবাড়ে না, আপনার সমস্যা কার্যকরভাবে হয় O(1)

মনে রাখবেন এর O(1)অর্থ "দ্রুত" নয়। একটি অ্যালগরিদমের জন্য সর্বদা সম্পূর্ণ করতে 1 ট্রিলিয়ন পদক্ষেপ প্রয়োজন O(1)। একটি অ্যালগরিদম যা 1-200 পদক্ষেপ থেকে যে কোনও জায়গায় নেয়, তবে আর কখনও হয় না O(1)। [1]

যদি আপনার অ্যালগরিদম হুবহু N ^ 3পদক্ষেপ নেয় এবং আপনি জানেন যে N5 টির বেশি হতে পারে না তবে এটি কখনও 125 টিরও বেশি পদক্ষেপ নিতে পারে না, সুতরাং এটি কার্যকরভাবে O(1)

কিন্তু আবার, O(1)অগত্যা "দ্রুত যথেষ্ট" অর্থ হয় না। এটি একটি পৃথক প্রশ্ন যা আপনার প্রসঙ্গে নির্ভর করে। যদি কোনও কাজ শেষ করতে এক সপ্তাহ সময় লাগে তবে আপনি সম্ভবত প্রযুক্তিগতভাবে এটির যত্ন নেবেন না O(1)


[১] উদাহরণস্বরূপ, একটি হ্যাশটিতে অনুসন্ধান করা O(1), যদিও হ্যাশের সংঘর্ষের অর্থ হল যে আপনি একটি বালতিতে বেশ কয়েকটি আইটেম সন্ধান করতে পারেন, যতক্ষণ না সেই বালতিতে কতগুলি আইটেম থাকতে পারে তার সীমাবদ্ধতা রয়েছে।


1
এটি ব্যতীত সমস্তটি বৈধ বলে মনে হচ্ছে: "যদি আপনার অ্যালগরিদম ঠিক N ^ 3 পদক্ষেপ নেয় এবং আপনি জানেন যে N 5 এর বেশি হতে পারে না তবে এটি কখনও 125 এর বেশি পদক্ষেপ নিতে পারে না, সুতরাং এটি ও (1)।" । আবার, যদি একটি অ্যালগোরিদম কোনও পূর্ণসংখ্যার গ্রহণ করে এবং আমার সর্বাধিক পূর্ণসংখ্যার সমর্থন 32767 হয় তবে এটি ও (1)? অবশ্যই না. পরামিতিগুলির সীমাবদ্ধতার ভিত্তিতে বিগ-ও পরিবর্তন হয় না। এটি ও (এন) এমনকি যদি আপনি জানেন যে 0 <n <3 কারণ এন = 2 n = 1 হিসাবে দ্বিগুণ সময় নেয়।
JSobell

3
@ জেএসোবেল তবে এটি ও (1)। যদি কোনও সীমাবদ্ধতা থাকে যা আপনার এন (f) এর জন্য সীমাবদ্ধ করে, তার অর্থ এটি অনির্দিষ্টকালের জন্য বাড়তে পারে না। যদি আপনার এন 2 ^ 15 দ্বারা সীমাবদ্ধ থাকে তবে আপনার দুর্দান্ত এন ^ 2 ফাংশনটি আসলে g(n) = min(f(2^15), f(n))- যা ও (1) এ রয়েছে। এটি বলেছে যে অনুশীলনে ধ্রুবকরা খুব বেশি গুরুত্বপূর্ণ এবং স্পষ্টভাবে এন এত বড় হয়ে উঠতে পারে যে অ্যাসিপটোটিক বিশ্লেষণ কার্যকর।
ভু

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

আমি বেশ কয়েক বছর আগে একটি আর্থিক ঝুঁকি ব্যবস্থা লিখেছিলাম যাতে এন ^ 5 ম্যাট্রিক্স ম্যানিপুলেশন জড়িত ছিল, সুতরাং সম্পদগুলি ইস্যুতে পরিণত হওয়ার আগে তার n = 20 এর ব্যবহারিক সীমা ছিল।
JSobell

দুঃখিত, খুব শীঘ্রই এন্টার টিপুন। আমি বেশ কয়েক বছর আগে একটি আর্থিক ঝুঁকি ব্যবস্থা লিখেছিলাম যাতে এন ^ 5 ম্যাট্রিক্স ম্যানিপুলেশন জড়িত ছিল, সুতরাং সম্পদগুলি ইস্যুতে পরিণত হওয়ার আগে তার n = 20 এর ব্যবহারিক সীমা ছিল। এই ত্রুটিযুক্ত যুক্তি অনুসারে তৈরি করা ফাংশনটি হ'ল (1) কারণ আমার 20 এর সীমা রয়েছে have ক্লায়েন্ট যখন বলে "হুঁ, সম্ভবত আমাদের এটি সীমা হিসাবে 40 এ স্থানান্তর করা উচিত ... হ্যাঁ, আলগোরিদমটি হ'ল (1) ) তাই কোনও সমস্যা নেই "... এই কারণেই কোনও ইনপুটটির সীমা অর্থহীন। ফাংশনটি O (n ^ 5) ছিল না, ও (1), এবং এটি বিগ-ও কেন সীমানা থেকে পৃথক তার একটি বাস্তব উদাহরণ।
JSobell

2

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

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


আপনি যদি নিশ্চিত হতে চান তবে আপনার পরামিতিগুলির জন্য কোন ডেটা কাঠামো ভাল is
যুবাল ফিল্মাস

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

2

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

এটি বলা খুব সহজ: আরে আমার কেবল একটি ছোট তালিকা রয়েছে, আমি যদি আইটি এ তালিকায় রয়েছে কিনা তা যদি জানতে চাই তবে আমি কেবল তালিকাটি পেরিয়ে আইটেমগুলির তুলনা করার জন্য একটি সহজ লুপ লিখব।

তারপরে আপনার বডিপ্রোগ্রামারটি তালিকাটি ব্যবহার করার সাথে সাথে আসে, আপনার ফাংশনটি দেখে এবং এর মতো হয়: আরে আমি তালিকার কোনও সদৃশ চাই না তাই তিনি তালিকায় যুক্ত প্রতিটি আইটেমের জন্য ফাংশনটি ব্যবহার করেন uses

(মনে রাখবেন, এটি এখনও একটি ছোট তালিকা পরিস্থিতি))

3 বছর পরে আমি আসি এবং আমার বস সবেমাত্র একটি বড় বিক্রয় করেছে: আমাদের সফ্টওয়্যারটি একটি বড় জাতীয় খুচরা বিক্রেতা ব্যবহার করতে চলেছে। আমরা কেবল ছোট ছোট দোকানগুলি চালিত করার আগেই। এবং এখন আমার বস আমাকে শপথ করে এবং চিত্কার করতে এসেছিলেন, কেন যে সফ্টওয়্যারটি সর্বদা "ভাল কাজ করেছে" এখন এত ভয়ঙ্কর ধীর slow

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

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


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

1

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

যদি আমার এই সময়ের সাথে দুটি অ্যালগরিদম থাকে:

  • লগ (ঢ) +10000
  • এন +1

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

যদি এন ছোট থাকে তবে প্রতিটি সমস্যা হ'ল ও (1)!

আমি অনুমান করছি যে এখানে বোঝানো মানে হ'ল যদি nসীমাবদ্ধ থাকে তবে প্রতিটি সমস্যা O (1)। উদাহরণস্বরূপ, আমরা যদি পূর্ণসংখ্যা বাছাই করে থাকি তবে আমরা কুইকোর্টটি ব্যবহার করতে বেছে নিতে পারি। O(n*log(n))স্পষ্টত। তবে যদি আমরা স্থির করি যে পূর্বে 2^64=1.8446744e+19পূর্ণসংখ্যার চেয়ে বেশি কখনও থাকতে পারে না , তবে আমরা জানি যে n*log(n)<= 1.8446744e+19*log(1.8446744e+19)<= 1.1805916e+21। সুতরাং, অ্যালগরিদম সর্বদা 1.1805916e+21"সময়ের একক" এর চেয়ে কম সময় নেয়। যেহেতু এটি একটি স্থির সময়, আমরা বলতে পারি যে অ্যালগরিদম সর্বদা সেই ধ্রুবক সময়ে করা যায় -> O(1)। (দ্রষ্টব্য যে সেই সময়কালের ইউনিটগুলি ন্যানোসেকেন্ডগুলি হলেও, এটি মোটামুটি 37411 বছরেরও বেশি)। তবুও O(1)


0

আমি সন্দেহ করি যে এর অনেক উত্তর একটি মৌলিক ধারণা অনুপস্থিত। ও (1): ও (এন) চ (1) এর সমান নয়: চ (এন) যেখানে চ একই ফাংশন, কারণ ও কোনও একক ক্রিয়াকে প্রতিনিধিত্ব করে না। এমনকি শোওয়ার্নের দুর্দান্ত গ্রাফটি বৈধ নয় কারণ এতে সমস্ত লাইনের জন্য একই অক্ষ রয়েছে। সকলকে একই অক্ষ ব্যবহার করার জন্য লাইনগুলি fn1, fn2 এবং fn3 হতে হবে, যেখানে প্রতিটি একটি ফাংশন ছিল যার পারফরম্যান্স অন্যের সাথে সরাসরি তুলনা করা যেতে পারে।

আমি বেশ কয়েকবার শুনেছি যে পর্যাপ্ত পরিমাণে n এর জন্য O, n (O) সম্পর্কে ধারণা / চিকিত্সা করা যেতে পারে যেন এটি O (1)

ঠিক আছে, যদি এন = 1 তারা ঠিক একই হয়? না। একটি ক্রিয়াকলাপ সংখ্যক পুনরাবৃত্তির অনুমতি দেয় এমন কোনও ক্রিয়াকলাপের সাথে মিল নেই যা বিগ-ও স্বীকৃতি দেয় না এবং আমাদেরও উচিত নয়।

আমাদের যখন পুনরাবৃত্তি প্রক্রিয়া ঘটে তখন কী ঘটে এবং কীভাবে পারফরম্যান্স (সময় বা সংস্থানগুলি) 'এন' বাড়ার সাথে সাথে কীভাবে হ্রাস পাবে তা প্রকাশ করার জন্য বিগ-ও স্বরলিপিটি কেবল সেখানে রয়েছে।

আসল প্রশ্নের উত্তর দেওয়ার জন্য ... আমি বলব যে যারা দাবি করেন তারা বিগ-ও স্বরলিপিটি সঠিকভাবে বুঝতে পারেন না, কারণ এটি অযৌক্তিক তুলনা।

এখানে একটি অনুরূপ প্রশ্ন: আমি যদি অক্ষরের একটি স্ট্রিংয়ের মধ্য দিয়ে লুপ করি এবং আমি জানি যে সাধারণভাবে আমার স্ট্রিংগুলি 10 টি অক্ষরের চেয়ে কম হবে তবে আমি কি বলতে পারি যে এটি হে (1) এর সমতুল্য, তবে যদি আমার স্ট্রিংগুলি দীর্ঘ হয় তবে আমি 'ও বলতো ও (এন)?

না, কারণ 10 টি অক্ষরের একটি স্ট্রিং 1 অক্ষরের স্ট্রিং হিসাবে 10 গুণ বেশি সময় নেয় তবে 1000 অক্ষরের স্ট্রিংয়ের চেয়ে 100 গুণ কম! এটা চালু).


O(1)f(i)imax{f(0),,f(10)}O(1)

হ্যাঁ, এবং এটি বিগ-ও স্বরলিপি সাধারণত ভুল বোঝাবুঝির উদাহরণ। আপনার যুক্তি অনুসারে, যদি আমি জানি যে n এর সর্বাধিক মান 1,000,000, তবে আমার ফাংশনটি হ'ল (1)। আসলে, আমার ফাংশন সর্বোত্তম হে (1) এবং সবচেয়ে খারাপ ও (এন) হতে পারে। এই স্বরলিপিটি কোনও কংক্রিট বাস্তবায়ন নয়, অ্যালগরিদমিক জটিলতা বর্ণনা করতে ব্যবহৃত হয় এবং আমরা সবসময় সবচেয়ে ব্যয়বহুল একটি দৃশ্যের বর্ণনা দিতে ব্যবহার করি, সেরাটি নয়। আসলে, আপনার যুক্তি অনুসারে, এন <2 কে মঞ্জুরি দেয় এমন প্রতিটি ফাংশন হ'ল হে (1)! :)
JSobell

n<2O(1)f(n)f(10)nO(1)

দুঃখিত, তবে আপনি যদি বলছেন যে n এর উপরের সীমানা জানার ফলে একটি ফাংশন O (1) হয়ে যায়, তবে আপনি বলছেন যে নোটেশনাল প্রতিনিধিত্ব সরাসরি এন এর মানের সাথে সম্পর্কিত, এবং এটি নয়। আপনি যে সমস্ত কিছু উল্লেখ করেছেন তা সঠিক, তবে প্রস্তাবিত যে এন এর সীমানা রয়েছে এটি হে (1) সঠিক নয়। অনুশীলনে এমন জায়গাগুলি রয়েছে যেখানে আপনি যা বর্ণনা করেছেন তা পর্যবেক্ষণযোগ্য হতে পারে তবে আমরা এখানে বিগ-ও স্বরলিপিটি দেখছি, কার্যকরী কোডিং নয়। সুতরাং আবারও, আপনি কেন পরামর্শ দিবেন যে সর্বোচ্চ 10 টি থাকা ওকে এটি ও (1) করে দেবে? কেন 10? 65535, বা 2 ^ 64 কেন নয়?
JSobell

এই বলে যে, আপনি যদি এমন একটি ফাংশন লিখেন যা 10 টি চরকে স্ট্রিংকে প্যাড করে, তবে সর্বদা স্ট্রিংয়ের উপরে লুপ করে, তবে এটি ও (1) কারণ এন সর্বদা 10 থাকে
JSobell

0

আমি বিশ্বাস করি আপনার উদ্ধৃত পাঠ্যটি বেশ বেআইনী (আপনি "প্রসঙ্গটি প্রদান না করলে" "ভাল" শব্দটি সাধারণত অর্থহীন হয়: সময়, স্থান ইত্যাদির ক্ষেত্রে) যাইহোক, আমি বিশ্বাস করি এর সহজ ব্যাখ্যাটি হবে:

O(1)O(1)

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

  1. O(1)
  2. O(n)
  3. O(nlog(n))
  4. O(n2)

O(1)

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

  1. 200
  2. 11n
  3. 4nlog(n)
  4. 1n2

যদি আমাদের ইনপুটটি 10 ​​মাপের হয় তবে উপরে উল্লিখিত প্রতিটি অ্যালগরিদমের জন্য সঠিক পরিমাণের পদক্ষেপগুলি:

  1. 200
  2. 11×10=110
  3. 4×10×3.32134
  4. 1×100=100

O(n2)O(1),O(n)O(nlog(n))O(n2)O(1)O(n2)O(1)

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