(N ^ 2 + n) / 2 বৃদ্ধির হার সহ একটি অ্যালগরিদম সম্পর্কে বিগ ও প্রশ্ন


16

আমি এই প্রশ্নটি জিজ্ঞাসা করছি কারণ বড় ও স্বরলিপি সম্পর্কিত একটি দিক সম্পর্কে আমি বিভ্রান্ত।

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

int sum = 0, i = 1, j = 1
for (i = 1 to n) {
    for (j = 1 to i)
        sum = sum + 1
}

তিনি প্রথমে এই অ্যালগরিদমকে (এন 2  + এন) / 2 এর বৃদ্ধির হার হিসাবে বর্ণনা করেছেন । যা দেখলে তা স্বজ্ঞাত মনে হয়।

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

আমি যে পেতে (ঢ 2  + N) / 2 অনুরূপ এন 2 / 2 কারণ শতাংশ জ্ঞানী, এন সামান্য পার্থক্য তোলে। আমি যেটি পাই না তা হ'ল এন (বৃহত্তর) যখন কেন (এন 2  + এন) / 2 এবং এন 2 সমান হয়।

উদাহরণস্বরূপ, যদি এন = 1,000,000 :

(n^2 + n) / 2 =  500000500000 (5.000005e+11)
(n^2) / 2     =  500000000000 (5e+11)
(n^2)         = 1000000000000 (1e+12)

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


আপনি যদি আগ্রহী হন তবে আমি ফাঁসির গাছের ডায়াগ্রাম চেক সহ তিনটি নেস্টেড লুপের জন্য একটি উত্তর দিয়েছিলাম নেস্টেড লুপগুলি সম্পর্কিত একটি ধাঁধা
গ্রিজেশ চৌহান



1
মূলত ধারণাটি হ'ল nবড় হওয়ার সাথে সাথে উভয়ই 'n n 2`' এবং আপনার ক্রিয়াকলাপ একইভাবে আচরণ করে এবং তাদের বৃদ্ধির হারের ক্ষেত্রে একটি ধ্রুবক পার্থক্য রাখে। আপনার যদি কোনও জটিল প্রকাশ থাকে তবে দ্রুত ক্রমবর্ধমান ক্রিয়াটি প্রাধান্য পায়।
একে_২০

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

উত্তর:


38

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

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


2
আমি এটি পছন্দ করি, এটি একটু পরিষ্কার হয়ে যাচ্ছে।
অ্যান্ড্রু এস

7
এটি খুব হাতের avyেউ সত্য হতে পারে বা মিথ্যাও হতে পারে। আপনি যদি অল্প পরিমাণ গণিত নিতে পারেন তবে নীচের উত্তরগুলির মধ্যে একটি দেখুন।
usr ডিরেক্টরির

3
এই যুক্তিটি খুব অস্পষ্ট: এর অর্থ O(n * log n) = O(n)হ'ল আমরা এটি উপসংহারে ফেলতে পারি , যা সত্য নয়।
সিএফএফ

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

বার্ট সত্যিই পদগুলির বিষয়ে কথা বলছিল, কারণগুলি নয়। এটি বুঝতে পেরে, আমরা এটি উপসংহার করতে পারি না O(n * log n) = O(n)। আমি মনে করি এটি সংজ্ঞার পিছনে যুক্তির একটি ভাল ব্যাখ্যা দেয়।
মার্ক ফস্কি

10

সংজ্ঞা যে

f(n) = O(g(n))

যদি কোনও ধ্রুবক সি> 0 এর উপস্থিত থাকে তবে সমস্ত n এর জন্য কিছু n_0 এর চেয়ে বড় আমাদের রয়েছে

|f(n)| <= C * |g(n)|

এটি f (n) = n ^ 2 এবং g (n) = 1/2 n ^ 2 এর ক্ষেত্রে স্পষ্টভাবে সত্য, যেখানে ধ্রুবক সি হওয়া উচিত 2, এটি এফ (এন) = এন for এর ক্ষেত্রেও সত্য এটি দেখতে সহজ easy 2 এবং জি (এন) = 1/2 (এন ^ 2 + এন)।


4
"যদি সেখানে কিছু ধ্রুবক সি> 0 থাকে তবে এর জন্য সমস্ত এন," হওয়া উচিত "যদি কিছু ধ্রুবক সি থেকে বেরিয়ে যায়, n_0 যেমন, সমস্ত n> n_0 এর জন্য,"
তাইমির

@ টেমিয়ার: যতক্ষণ না এই ফাংশনটি gননজারো হয় ততক্ষণ এটির প্রয়োজন হয় না কারণ আপনি চূড়ান্তভাবে অনেকগুলি প্রথম এনটিও মানগুলির জন্য বিবৃতিটিকে সত্য করে তুলতে ধ্রুবক সি বাড়াতে পারেন।
সিএফএইচ

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

@ টেমিয়ার: n_0 একটি সীমাবদ্ধ সংখ্যা। সি = সর্বোচ্চ {চ (আই) / জি (আই) চয়ন করুন: i = 1, ..., n_0}, এবং তারপরে বিবৃতিটি সর্বদা প্রথম এনটিও মানগুলিতে রাখা হবে, আপনি সহজেই পরীক্ষা করতে পারেন can
সিএফএফ

সিএসে এটি কোনও উদ্বেগের দিক থেকে কম কারণ এন সাধারণত ইনপুট আকার এবং তাই বিচক্ষণ। কোন ক্ষেত্রে সি সি বেছে নিতে পারে যে এনটি = 1 কাজ করে। তবে আনুষ্ঠানিক সংজ্ঞাটি কিছু প্রান্তিকের চেয়ে বৃহত্তর এন, যা সংজ্ঞাটি প্রয়োগে পুরোপুরি নিটপিকিং সরিয়ে দেয়।
তাইমির

6

জটিলতার কথা বলার সময়, আপনি কেবলমাত্র উপাদানগুলির সংখ্যার ( n) এর ভিত্তিতে সময়ের ফ্যাক্টর পরিবর্তনে আগ্রহী ।

এর ফলে আপনি যে কোনও ধ্রুবক ফ্যাক্টরটি সরিয়ে ফেলতে পারেন ( 2এখানে এখানে)।

এটি আপনাকে ছেড়ে দেয় O(n^2 + n)

এখন, একটি যুক্তিসঙ্গত বৃহৎ জন্য nপণ্য, অর্থাত n * n, শুধু তুলনায় উল্লেখযোগ্যভাবে বড় হতে হবে n, কোন কারণে, যার একটি চূড়ান্ত জটিলতা সঙ্গে পাতার আপনি প্রকৃতপক্ষে আপনি যে অংশটি এড়িয়ে যেতে পাশাপাশি অনুমতি করছি O(n^2)

এটি সত্য, স্বল্প সংখ্যার জন্য একটি তাত্পর্যপূর্ণ পার্থক্য হবে তবে এটি আপনার প্রান্তিকের চেয়ে বেশি প্রান্তিক nহয়ে উঠবে।


পার্থক্যটি প্রান্তিক হওয়ার জন্য এন কত বড় হতে পারে? এছাড়াও, কেন / 2 সরানো হয়, এর অস্তিত্বের মূল্য অর্ধেক হয়?
অ্যান্ড্রু এস

6
@ অ্যান্ড্রুস কারণ বিগ ও নোটেশন বৃদ্ধির কথা বলে। 2 দিয়ে ভাগ করা বেঞ্চমার্ক এবং টাইমস্ট্যাম্পগুলির প্রসঙ্গে বাইরে অপ্রাসঙ্গিক কারণ এটি শেষ পর্যন্ত বৃদ্ধি হার পরিবর্তন করে না। বৃহত্তম উপাদানটি অবশ্য করে এবং তাই এটি আপনি রাখেন।
নীল

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

আমি আশা করি আমি এই উত্তরটি একাধিকবার উপস্থাপন করতে পারতাম! @ নীল, আপনার উচিত বিগ ও বইগুলি লেখা উচিত।
তেরসোসোরাস

3

এটা যে "(ছিল n ² + N) ছিল n ² মত / 2 আচরণ করবে যখন এন বড়" না, এটি যে (ছিল n ² + N) এর / 2 মত বৃদ্ধি ছিল n ² যেমন এন বৃদ্ধি

উদাহরণস্বরূপ, এন হিসাবে 1,000 থেকে 1,000,000 পর্যন্ত বৃদ্ধি পায়

(n² + n) / 2  increases from  500500 to  500000500000
(n²) / 2      increases from  500000 to  500000000000
(n²)          increases from 1000000 to 1000000000000

একইভাবে এন হিসাবে 1,000,000 থেকে 1,000,000,000 এ বৃদ্ধি পায়

(n² + n) / 2  increases from  500000500000 to  500000000500000000
(n²) / 2      increases from  500000000000 to  500000000000000000
(n²)          increases from 1000000000000 to 1000000000000000000

এগুলি একইভাবে বৃদ্ধি পায়, যা বিগ ও নোটেশন সম্পর্কে।

যদি আপনি ওল্ফ্রাম আলফায় (n² + n) / 2 এবং n² / 2 ষড়যন্ত্র করেন তবে এগুলি এতটাই সমান যে তারা n = 100 দ্বারা পার্থক্য করা শক্ত। যদি আপনি তিনটি ওল্ফ্রাম আলফায় প্লট করেন তবে আপনি 2 টি ধ্রুবক ফ্যাক্টর দ্বারা পৃথক দুটি লাইন দেখতে পাবেন।


এটি ভাল, এটি আমার কাছে এটি খুব স্পষ্ট করে তোলে। জবাব দেওয়ার জন্য ধন্যবাদ
অ্যান্ড্রু এস

2

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

আপনি কি জানেন, এই স্বরলিপি ফাংশন একটি asymptotic তুলনা প্রকাশ ও রাইটিং F = হে (ছ) মানে যে চ (ঢ) যেমন সর্বাধিক বৃদ্ধি দ্রুত ছ (ঢ) হিসাবে এন অনন্ত চলে যায়। এটির অনুবাদ করার একটি সহজ উপায় হ'ল ফাংশন এফ / জি সীমাবদ্ধ বলে। তবে অবশ্যই, আমাদের সেই জায়গাগুলির যত্ন নিতে হবে যেখানে জি শূন্য এবং আপনি আরও দৃ definition় সংজ্ঞা দিয়ে শেষ করতে পারেন যে আপনি প্রায় সর্বত্র পড়তে পারেন ।

এই স্বীকৃতিগুলি কম্পিউটিংয়ের জন্য খুব সুবিধাজনক হিসাবে প্রমাণিত হয়েছে - এই কারণেই এটি এত বেশি বিস্তৃত - তবে এটি যে সমান চিহ্ন হিসাবে আমরা দেখি সেখানে কার্যকারিতার সাম্যকে বোঝায় না কারণ এটি যত্ন সহকারে পরিচালনা করা উচিত । এটি বেশ অনেকটা বলার মতো যে 2 = 5 মড 3 এর দ্বারা 2 = 5 বোঝায় না এবং যদি আপনি বীজগণিত আগ্রহী, আপনি আসলে একটি সমতা মডিউল কিছু হিসাবে বড় হে স্বরলিপি বুঝতে পারবেন না।

এখন, আপনার নির্দিষ্ট প্রশ্নের দিকে ফিরে যেতে কয়েকটি সংখ্যার মানগুলি গণনা করা এবং সেগুলি তুলনা করা সম্পূর্ণ বেহুদা: তবে এক মিলিয়ন বড় হলেও এটি অসম্পূর্ণ আচরণের জন্য দায়ী নয় account ফ (n) = n (n-1) / 2 এবং g (n) = n² ফাংশনগুলির অনুপাতটি আরও কার্যকর করতে পারে - তবে এই বিশেষ ক্ষেত্রে আমরা সহজেই দেখতে পাব যে এফ (এন) / জি (এন) যদি এন> 0 এর চেয়ে 1/2 এর চেয়ে ছোট হয় তবে এটি f = O (ছ) বোঝায়

স্বরলিপি সম্পর্কে আপনার বোঝার উন্নতি করার জন্য আপনার উচিত

  • একটি পরিষ্কার সংজ্ঞা দিয়ে কাজ করুন, জিনিসগুলি একই রকমের ভিত্তিতে অস্পষ্ট ছাপ নয় - যেমনটি আপনি কেবল এটির অভিজ্ঞতা পেয়েছেন, এমন অস্পষ্ট ছাপটি ভাল কাজ করে না।

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


বীজগাণিতিক সাইড নোট যদি একটি সব ফাংশন এর বীজগণিত হল Ν → Ν এবং সি , বেষ্টিত ফাংশন subalgebra একটি ফাংশন দেওয়া একাত্মতার ফাংশন সেট হে (চ) একটি হল সি এর -submodule একজন , এবং বড় উপর গণনার নিয়ম হে স্বরলিপি ঠিক কীভাবে একজন এই submodules উপর কাজ করে। সুতরাং, সমতা আমরা দেখতে একজন সমতা হয় সি এর -submodules একজন এই মাত্র মডুলাস আরেকটি সাজানোর হয়।


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

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

1

আমি মনে করি আপনি বড় ভুল সংখ্যার অর্থ কী বোঝায়।

আপনি যখন ও (এন ^ 2) দেখেন তবে এর মূল অর্থ: সমস্যাটি যখন 10 গুণ হিসাবে বড় হয়, তখন সমাধানের সময়টি হবে: 10 ^ 2 = 100 গুণ হিসাবে বড়।

আসুন আপনার সমীকরণে 1000 এবং 10000 ঘুষি: 1000: (1000 ^ 2 + 1000) / 2 = 500500 10000: (10000 ^ 2 + 10000) / 2 = 50005000

50005000/500500 = 99,91

এন যখন 10 গুণ বড় হয়েছে তখন সমাধানগুলি 100 গুণ বড় হয়েছে। সুতরাং এটি আচরণ করে: O (N ^ 2)


1

যদি n একটি ছিল 1,000,000তারপর

(n^2 + n) / 2  =  500000500000  (5.00001E+11)
(n^2) / 2      =  500000000000  (5E+11)
(n^2)          = 1000000000000  (1E+12)

1000000000000.00 কি?

জটিলতা আমাদেরকে বাস্তব-বিশ্বের ব্যয়ের পূর্বাভাস দেওয়ার একটি উপায় দেয় (আমরা সময়ের জটিলতা বা স্পেস জটিলতার কথা বলছি কিনা তার উপর নির্ভর করে সেকেন্ড বা বাইটস), এটি আমাদের কয়েক সেকেন্ড বা অন্য কোনও নির্দিষ্ট ইউনিট দেয় না।

এটি আমাদেরকে অনুপাতের একটি ডিগ্রি দেয়।

যদি একটি অ্যালগরিদমকে n² বার কিছু করতে হয়, তবে এটি সি এর কিছু মানের জন্য n² take c লাগবে যা প্রতিটি পুনরাবৃত্তির জন্য কতক্ষণ সময় নেয়।

যদি একটি অ্যালগরিদকে 2 বার n times ÷ করতে হয়, তবে এটি সি এর কিছু মানের জন্য n² × c লাগবে যা প্রতিটি পুনরাবৃত্তির দ্বিগুণ দীর্ঘ হবে।

যেভাবেই হোক, নেওয়া সময়টি এখনও n² এর সমানুপাতিক ²

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

কিন্তু জটিলতা আমাদের সম্পর্কে যা বলে তা তারা নয়।

অনুশীলনে, কয়েকটি ভিন্ন উপায় রয়েছে যা আমরা একটি অ্যালগরিদমের কার্যকারিতা উন্নত করতে পারি:

  1. প্রতিটি পুনরাবৃত্তির দক্ষতা উন্নত করুন: O (n²) এখনও n² × c সেকেন্ডে চলে তবে সি ছোট।
  2. দেখা মামলার সংখ্যা হ্রাস করুন: O (n²) এখনও n² × c সেকেন্ডে চলে তবে n এর চেয়ে ছোট।
  3. অ্যালগরিদমকে একই ফলাফলযুক্ত, তবে কম জটিলতার সাথে প্রতিস্থাপন করুন: উদাহরণস্বরূপ যদি আমরা কিছু O (n²) কে কিছু O (n লগ এন) এ প্রতিস্থাপন করতে পারি এবং তাই n² × c₀ সেকেন্ড থেকে (n লগ এন) × c₁ সেকেন্ডে পরিবর্তিত হয়েছি ।

অথবা এটি অন্যভাবে দেখার জন্য, আমাদের f(n)×cকয়েক সেকেন্ড সময় নেওয়া হয়েছে এবং প্রদত্তের জন্য কী কী পরিমাণ ফিরে আসে তা হ্রাস c, হ্রাস nবা হ্রাস করে আপনি কর্মক্ষমতা উন্নত করতে পারেন ।fn

প্রথমটি আমরা কোনও লুপের অভ্যন্তরে কিছু মাইক্রো-অপ্টগুলি বা আরও ভাল হার্ডওয়্যার ব্যবহার করে করতে পারি। এটি সর্বদা উন্নতি দেবে।

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

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

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


"O (n!) হ'ল O (1) এর মতো যথেষ্ট পরিমাণে n এর মান কম থাকে" ঠিক ভুল। এটি বোঝানোর আরও ভাল উপায় থাকতে হবে যে "যখন nযথেষ্ট পরিমাণে কম রাখা হয় তখন বিগ-ও কিছু যায় আসে না"।
বেন ভয়েগট

@ বেনওয়েগট আমি প্রথম যখন এটি পড়েছিলাম তখন যেমনটি হয়েছিল তেমন বাড়াবাড়ি প্রভাব নিয়ে এখনও আসতে পেরেছি; এটি মূলত আমার নয়, আমি এরিক লিপার্টের কাছ থেকে এটিকে চুরি করেছি, যিনি এটির উদ্ভব করেছেন বা এটি অন্য কারও কাছ থেকে নিয়ে গিয়েছিলেন। অবশ্যই এটি "small এর ছোট মানগুলির জন্য 3 π সমান 3 এবং 3 টির বৃহত মানের" এর মতো কৌতুকের উল্লেখ করে যা এখনও পুরানো।
জন হান্না

0

ধ্রুবক ফ্যাক্টর

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

আসুন ধারণাটি চিত্রিত করার জন্য 1000000 এর একটি ধ্রুবক গুণককে ধরে নিই - এটি প্রয়োজনীয়তার চেয়ে মিলিয়ন গুণ বড়, তবে এটি সেই বিন্দুকে চিত্রিত করে যা তারা অপ্রাসঙ্গিক বলে বিবেচিত হয়।

(n ^ 2 + n) / 2 "O (n ^ 2) এর ভিতরে ফিট করে কারণ যে কোনও এন এর পক্ষে যত বড়ই নয়, (এন ^ 2 + এন) / 2 <1000000 * n। 2।

(n ^ 2 + n) / 2 একটি ছোট সেট যেমন "O ফিট" ফিট করে না, যেমন ও (এন) কারণ কিছু মান (n ^ 2 + n) / 2> 1000000 * n এর জন্য।

ধ্রুবক কারণগুলি নির্বিচারে বড় হতে পারে - n বছরের চলমান সময় সহ একটি অ্যালগরিদমের ও (এন) জটিলতা রয়েছে যা এন * লগ (এন) মাইক্রোসেকেন্ডের চলমান সময়ের সাথে অ্যালগরিদমের চেয়ে "ভাল"।


0

অ্যালগরিদম "কতটা জটিল" তা নিয়েই বিগ-ও is আপনি দুটি আলগোরিদিম আছে, এবং এক নেয় n^2*kসেকেন্ড চালানোর জন্য, এবং অন্যান্য লাগে n^2*jচালানোর সেকেন্ড, তারপর আপনি তর্ক করতে পারেন যা প্রায় এক উত্তম, এবং আপনি প্রভাবিত করার চেষ্টা করতে কিছু মজার অপ্টিমাইজেশন করতে সক্ষম হতে পারে kবা jকিন্তু উভয় এই অ্যালগরিদমগুলি অ্যালগরিদমের সাথে তুলনা করতে ধীরে ধীরে মারা যায় n*mযা চালাতে লাগে । আপনি কতটা ধ্রুবক তৈরি করেন তা গুরুত্বপূর্ণ নয় kবা jএকটি বড় পর্যাপ্ত ইনপুটের জন্য n*mঅ্যালগরিদম সর্বদা জিতবে, এমনকি mবেশ বড় হলেও ।

সুতরাং আমরা প্রথম দুটি অ্যালগরিদম O(n^2)কল, এবং আমরা দ্বিতীয় কল O(n)। এটি সুন্দরভাবে বিশ্বকে অ্যালগরিদমের শ্রেণিতে ভাগ করে দেয় । এটিই বিগ-ও সম্পর্কে। এটি গাড়ি এবং ট্রাক এবং বাস ইত্যাদিতে যানবাহনকে বিভক্ত করার মতো ... গাড়িগুলির মধ্যে প্রচুর পার্থক্য রয়েছে এবং আপনি প্রভিস শেভি ভোল্টের চেয়ে ভাল কিনা তা নিয়ে আপনি সারা দিন ব্যয় করতে পারেন তবে দিনের শেষে যদি আপনি যান তবে 12 জনকে একটিতে needোকানো দরকার, তবে এটি একটি বরং বোকামি যুক্তি। :)

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