বিগ-ও-নোটেশনের নিয়মিত রানটাইমের বিভিন্নতা আছে?


9

একাধিক আছে O-নোটেশন, পছন্দ O(n) অথবা O(n2)ইত্যাদি। আমি ভাবছিলাম, যদি বাস্তবে এর বিভিন্নতা থাকে তবেO(2n2) অথবা O(logn2), বা যদি সেগুলি গাণিতিকভাবে ভুল হয়।

অথবা এটি বলা ঠিক হবে যে এটির উন্নতি করা সম্ভব O(5n2) to a O(3n2)? আমার রানটাইমগুলি এখনও বের করার দরকার নেই এবং প্রয়োজন নেই এবং আমার কোনও উন্নতি করার দরকার নেই, তবে আপনি যদি আপনার কার্যাদি বাস্তবে বর্ণনা করেন তবে এটি আমার জানা দরকার।


1
অ্যাসিপোটোটিক বিশ্লেষণের সময় ও (5n ^ 2) এর মধ্যে ও (3n ^ 2) এর মধ্যে কোনও উপাদানগত পার্থক্য নেই। এগুলি উভয় হে (এন ^ 2), এবং কেবল ধ্রুবক দ্বারা পৃথক। প্রকৃতপক্ষে, প্রমাণ হিসাবে, আপনি এমনকি (5n ^ 2) থেকে O (3n ^ 2) বা O (n ^ 2) কমিয়ে গণিতকে পরিষ্কার করতে পারেন যেহেতু তারা সমতুল্য। আপনার প্রমাণ লেখার সময়, আপনি একটি সাইডবারে একটি নোট তৈরি করেন যে সেগুলি সমান। আসলে, আপনি এমনকি ও (লগ এন) ও (এন) এর সাথে অদলবদল করতে পারেন এবং লক্ষ্য রাখতে পারেন যে ও (লগ এন) <= ও (এন) সাইডবারে। সাইডবারের নোটটি পাঠককে বলেছে এটি ইচ্ছাকৃত, টাইপো নয়। (আমি যখন কলেজে অ্যালগরিদম বিশ্লেষণ করছিলাম তখন কমপক্ষে আমি এটি করেছিলাম)।
jww

2
আপনি যদি ব্যবহার করছেন O() ছোট কারণগুলি থেকে মুক্তি পেতে স্বীকৃতি, আপনি সর্বদা "... এর মতো চলমান সময়কে উন্নত করে এমন কিছু লিখতে পারেন 5n2+o(n2) নিচে 3n2+o(n2)", ইত্যাদি বা সমতুল্য, (5+o(1))n2 এবং (3+o(1))n2। কিছু লেখক কেবল লিখতে পছন্দ করেন5n2প্রাক্তন হিসাবে শর্টহ্যান্ড হিসাবে। উদাহরণস্বরূপ, ট্র্যাফেন এবং বাউ-র পাঠ্যপুস্তকটি দেখুন।
যোনাতন এন

উত্তর:


21

আমি ভাবছিলাম, যদি বাস্তবে এর বিভিন্নতা থাকে তবে O(2n2) অথবা O(log(n2)), বা যদি সেগুলি গাণিতিকভাবে ভুল হয়।

হ্যাঁ, O(2n2) অথবা O(log(n2)) বৈধ প্রকরণ হয়।

তবে আপনি এগুলি খুব কমই দেখতে পাবেন যদি আপনি এগুলি একেবারেই দেখেন, বিশেষত শেষ ফলাফলগুলিতে। কারণটি হ'লO(2n2) হয় O(n2)। একইভাবে,O(log(n2)) হয় O(logn)। এটি নতুনদের জন্য অবাক হতে পারে। যাইহোক, এই সমতাগুলি কম বেশি খুব বড় কারণ হ'লO-নোটেশনগুলি চালু করা হয়েছিল, এমন একটি গুণক ধ্রুবক ফ্যাক্টরটি গোপন করার জন্য যা প্রায়শই পিন করা শক্ত এবং তুলনামূলক তুচ্ছ।

এটি কি সঠিকভাবে বলা উচিত যে এটির উন্নতি করা সম্ভব O(5n2) to a O(3n2)?

অ্যালগরিদমের সময়-জটিলতা থেকে পরিবর্তন করা গেলে এটি মোটেও উন্নতি নয় is O(5n2) to a O(3n2) বা থেকে Ω(5n2) প্রতি Ω(3n2), কারণ O(5n2) হয় O(3n2) যখন Ω(5n2) হয় Ω(3n2)। সুতরাং সময়-জটিলতা থেকে উন্নতি হয়েছে তা বলা ভুলO(5n2) প্রতি O(3n2)। অ্যালগরিদমের সময়-জটিলতা থেকে উন্নত হওয়া বলা ঠিক5n2 প্রতি 3n2, অবশ্যই.


অনুশীলন 1. এটি দেখানO(5n2)=O(3n2)=O(n2)

অনুশীলন 2. এটি দেখানO(logn)=O(log(n2))

অনুশীলন 3. এটি দেখানΩ(n2+n)=Ω(n2)


1
@ বিভি_মার্টন স্বরলিপিটি কী তা বোঝার জন্য এখানে একটি ভাল লিঙ্ক O(n)হিসাবে সংজ্ঞায়িত করা হয়েছে (কেবল সাধারণ সীমা ক্যালকুলাস!): গণিত.স্ট্যাকেক্সেঞ্জারজিও
অক্ষত মহাজন

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

7
@AkshatMahajan শুধুমাত্র উত্তর যে প্রশ্নের /math/925053 স্পষ্টভাবে ভুল। বড় উপর নির্ভরযোগ্য প্রচুর উত্স আছেO-notations।
জন এল।

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

1
@ মার্ক: এটি কেবল ভুল।
ব্যবহারকারী 21820

13

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

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


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

1
যে কোনও সংজ্ঞা যে কেউ করে তা বিদ্যমান। আপনার স্বীকৃতিটি খুব মনোযোগ সহকারে পড়া উচিত theO(1) অথবা O(n!)এর অর্থ কারণ আপনার প্রশ্নটি বোঝায় না। এখানে কোন সংক্ষিপ্ত পথ নেই. যদি আপনি বুঝতে চান যে কোনও অঙ্কের গাণিতিক সামগ্রীর অর্থ কী, তবে আপনাকে অবশ্যই কিছু সময় বিনিয়োগ করতে রাজি হতে হবে।
জুহো

6
@ বিভি_মার্টন গণিতের অধ্যাপক আরও বেশি সরে যাওয়ার সম্ভাবনা রয়েছে কারণ আপনি সংজ্ঞার তালিকা হিসাবে উদাহরণগুলির একটি তালিকা দেখছেন । গণিতের অনেক বিষয় বিষয়গুলি এমনভাবে সংজ্ঞায়িত করা হয় যা কেবল নির্দিষ্ট ক্ষেত্রে নয়, সাধারণত তাদের কাজ করে। আপনার প্রশ্নটি মূলত "উইকিপিডিয়ায় বলা হয়েছে যে আমি একটি যুক্ত করতে এবং দুটি যোগ করতে এবং সতেরটি যোগ করতে পারি But তবে আমি অন্যান্য সংখ্যাও যুক্ত করতে পারি?"
ডেভিড রিচার্বি

7

গৃহীত উত্তরটি বেশ ভাল হলেও এটি কেন আসল কারণ তা স্পর্শ করে না O(n)=O(2n)

বিগ-হে স্বরলিপি বর্ণনা কর্মক্ষমতা প্রসারণ

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

উদাহরণস্বরূপ, বাইনারি অনুসন্ধান করুন। বাছাই করা তালিকা দেওয়া হল, আপনি কীভাবে এর অভ্যন্তরে একটি স্বেচ্ছাসেবক মান খুঁজে পাবেন? ঠিক আছে, আপনি মাঝখানে শুরু করতে পারে। যেহেতু তালিকাটি বাছাই করা হয়েছে, মাঝারি মানটি আপনাকে বলবে যে আপনার টার্গেটের মানটি তালিকার অর্ধেকের মধ্যে রয়েছে So সুতরাং আপনাকে যে তালিকাটি অনুসন্ধান করতে হবে সেটি এখন অর্ধেকে বিভক্ত। এটি পুনরাবৃত্তভাবে প্রয়োগ করা যেতে পারে, তারপরে নতুন তালিকার মাঝখানে যাবেন এবং এভাবে তালিকার আকার 1 না হওয়া পর্যন্ত আপনি নিজের মানটি খুঁজে পেয়েছেন (বা তালিকায় এটি বিদ্যমান নেই)। তালিকার আকার দ্বিগুণ করা কেবলমাত্র অ্যালগরিদমে আরও একটি পদক্ষেপ যুক্ত করে, এটি লোগারিথমিক সম্পর্ক। সুতরাং এই অ্যালগরিদম হয়O(logn)। লোগারিদম বেস 2, তবে এটি কোনও বিষয় নয় - সম্পর্কের মূলটি হ'ল তালিকার একটি ধ্রুবক মান দ্বারা কেবলমাত্র গুণকে সময়কে স্থির করে রাখে।

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

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


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

3
@ জুহো নির্দেশমূলক, সম্ভবত, তবে চূড়ান্তভাবে কম্পিউটার বিজ্ঞানের বিপুল সংখ্যাগরিষ্ঠের পক্ষে অকেজো।
ছড়িয়ে ছিটিয়ে

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

3
হ্যাঁ। প্রোগ্রামাররা এই জিনিসগুলি বুঝতে না পেরে আমার কোনও আপত্তি নেই তবে আপনি যদি নিজেকে কম্পিউটার বিজ্ঞানী বলতে চান তবে এটি মূল উপাদান।
ডেভিড রিচার্বি

2
@ ডকায়ি না, আমি এমন লোকদের উল্লেখ করছি যারা এই ক্ষেত্রের অন্যান্য ক্যারিয়ারে কাজ করে যেমন সফ্টওয়্যার বিকাশকারী।
ছড়িয়ে ছিটিয়ে

5

তুমি লিখতে পারো O(f)যে কোনও অনুষ্ঠানের জন্যfএবং এটি নিখুঁত জ্ঞান করে তোলে। সংজ্ঞা অনুসারে,g(n)=O(f(n)) যদি কিছু ধ্রুবক হয় c যেমন যে g(n)cf(n) যথেষ্ট বড় জন্য n। এই সংজ্ঞায় কিছুই বলে নাf কিছুটা "সুন্দর" ফাংশন হতে হবে।

তবে, অন্যান্য উত্তরগুলি যেমন উল্লেখ করেছে, g(n)=O(f(n)) এবং g(n)=O(2f(n)) ঠিক একই পরিস্থিতি বর্ণনা করুন: যদি g(n)cf(n) সব বড় যথেষ্ট nতাহলে আমাদেরও আছে g(n)c22f(n)তাই g(n)=O(2f(n)), এছাড়াও (ধ্রুবক গ্রহণ করা c/2)।

পার্শ্ব সমস্যা হিসাবে, লিখবেন না "logn2", কারণ এটি এর অর্থ 100% পরিষ্কার নয় You আপনি বলতে পারেন যে এটির অর্থ স্পষ্ট log(n2) তবে প্রায় সকলেই লিখতেন 2logn, তাই এটি পাঠকের মনে সন্দেহ রাখে।

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


4

ও এর সংজ্ঞা দেখুন (চ (এন)), এবং আপনি দেখতে পাচ্ছেন যে উদাহরণস্বরূপ ও (2 এন ^ 2) এবং ও (এন ^ 2) হুবহু এক রকম। 5n ^ 2 থেকে 3n ^ 2 ক্রিয়াকলাপে একটি অ্যালগরিদম পরিবর্তন করা 40 শতাংশ উন্নতি। ও (5n ^ 2) থেকে ও (3n ^ 2) এ পরিবর্তন করা আসলে কোনও পরিবর্তন নয়, সেগুলি একই।

আবার ও (এফ (এন (এন)) এর সংজ্ঞাটি পড়ুন।


4

এটি বুঝতে সহায়ক হতে পারে যে বিগ-ও ফাংশনগুলির একটি সেট বর্ণনা করে । এটাইO(f(n))={g(n)|n,c>0:m>n:c×g(m)f(m)}

এর ব্যবহার = দুর্ভাগ্যজনক এবং ব্যবহার এক ধরণের সেই সম্পর্কটিকে আরও পরিষ্কার করে তুলবে। তবে সেট চিহ্নিতকরণের চিহ্নগুলি টাইপ করা কিছুটা কঠিন তাই এখন আমরা বর্তমান সম্মেলনে আটকে আছি।

এটি তখন এটি দেখায় O(n)=O(2n) বা বিগ ওকে সংজ্ঞায়িত করার সময় যে ধ্রুবক বিষয়গুলি গুরুত্বপূর্ণ নয়


4
সমতা কনভেনশন আসলে টাইপিং সম্পর্কে নয়। এটি কারণ যেমন এর মতামত দরকারীlog(n!)=nlognn+O(logn) আমাদের দেখতে উত্সাহ দেয় O(f)উভয় "ফাংশনগুলির সেট যেমন [[]]" এবং "এমন কিছু ফাংশন যেমন [...]"
ডেভিড রিচার্বি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.