লগারিদমিক জটিলতার জন্য অ্যালগরিদমিক অন্তর্দৃষ্টি


59

আমি বিশ্বাস করি I , এবং মতো জটিলতার আমার কাছে যুক্তিসঙ্গত উপলব্ধি রয়েছে ।Θ ( এন ) Θ ( এন 2 )O(1)Θ(n)Θ(n2)

একটি তালিকার ক্ষেত্রে, একটি ধ্রুবক অনুসন্ধান, তাই এটি কেবল তালিকার শীর্ষস্থানীয়। The ( n ) হ'ল আমি পুরো তালিকায় হাঁটছি এবং Θ ( n 2 ) তালিকার প্রতিটি উপাদানগুলির জন্য একবারে তালিকাটি হাঁটছে।O(1)Θ(n)Θ(n2)

এটি ( 1 ) এবং Θ ( n ) এর মধ্যে কোথাও রয়েছে উপলব্ধি করার মতো অন্য কোন স্বজ্ঞাত উপায় ?Θ(logn)O(1)Θ(n)


8
লগ এন "অনুসন্ধান"
সুরেশ

2
এই প্রশ্নটি জিজ্ঞাসা করতে ব্যবহার Oকরা ভুল, কারণ এটি কেবল একটি উপরের সীমানা নির্দেশ করে। উদাহরণস্বরূপ ধ্রুবক সময় হল O(logn)θ আরো উপযুক্ত হতে হবে। মেটা প্রশ্নটি দেখুন: meta.cs.stackexchange.com/questions/182/…
আর্যভট্ট


একটি সামান্য দ্রষ্টব্য: শাস্ত্রীয় ট্যুরিং মেশিন সেটিংসে সমস্ত অ্যালগরিদমগুলি , যেহেতু তাদের ইনপুটটির প্রতিটি প্রতীক কমপক্ষে একবার পড়তে হবে। বাইনারি অনুসন্ধান ( লগ এন ) এ করা যেতে পারে কারণ আমাদের কাছে প্রতিশ্রুতি রয়েছে যে তালিকাটি সাজানো হয়েছে, উদাহরণস্বরূপ। Ω(n)O(logn)
চিজিসপ

1
একজন প্রয়াত অবদান: সংজ্ঞা দ্বারা, বেস একটি সংখ্যার লগারিদম এন আপনি সংখ্যাবৃদ্ধি সময়ের মাত্র সংখ্যা নিজে পেতে এনl =bnbn । উদাহরণস্বরূপ, 2 3 =bl=nl=logb(n) । আপনি যদি একটি নম্বর আছে তাই আপনি যদি এন এবং আপনি খুঁজে বের করতে কি আপনি চান ( এন ) = ? আপনি 1 এ পৌঁছানো অবধিকেবল বি দ্বারা ভাগ করে চলুন(ধরে নেওয়া এন সরলতার জন্য খ এর একটি শক্তি)। বিভাগগুলির সংখ্যা l o g b ( n ) এর সমান। এই বিভাগের আচরণটি প্রদর্শন করে এমন অ্যালগরিদমগুলিতে( এল জি) চলমান সময় রয়েছে23=8log2(8)=3nlogb(n)=?b1nblogb(n)O(log(n))
সাদাতাম

উত্তর:


53

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

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

আপনি দেখতে পাচ্ছেন যে তালিকাটি প্রতিটি পদক্ষেপকে কার্যকরভাবে অর্ধেক করেছে। তার মানে আপনি দৈর্ঘ্য সম্বন্ধে জানতে-- , সর্বোচ্চ ধাপ আপনার যা দরকার পৌঁছানোর এক আইটেমটি তালিকা 5 । আপনি একটি তালিকা থেকে থাকে তাহলে 128 = 2 7 আইটেম, আপনি শুধুমাত্র প্রয়োজন 7 একটি তালিকার জন্য পদক্ষেপ, 1024 = 2 10 আপনি শুধুমাত্র প্রয়োজন 10325128=2771024=21010 ধাপ ইত্যাদি

যেহেতু আপনি দেখতে পারেন, সূচক মধ্যে 2 এন সবসময় প্রয়োজনীয় পদক্ষেপ সংখ্যা দেখায়। লোগারিদম এই এক্সপোজেন্ট নম্বরটি "এক্সট্রাক্ট" করতে ব্যবহৃত হয়, উদাহরণস্বরূপ লগ 2 2 10 = 10 । এটি দৈর্ঘ্যের তালিকাকে সাধারণীকরণ করে যা দুটি দীর্ঘ শক্তি নয়।n2nlog2210=10


4
এটি লক্ষ করা উচিত যে O(log n)তালিকার অবিচ্ছিন্ন সময় এলোমেলো অ্যাক্সেস থাকলে কেবল এটি হয়। আরও সাধারণ তালিকা বাস্তবায়নের (লিঙ্কযুক্ত তালিকাগুলি)O(n log n)
এএসএম

1
পয়েন্টারগুলির অভাবের জন্য বাইনারি অনুসন্ধান তালিকায় কাজ করে না; এটি সাধারণত অ্যারেতে করা হয়।
রাফেল

বাইনারি অনুসন্ধান তালিকায় ঠিক কাজ করে fine এটি প্রয়োজনীয় / দরকারী / ব্যবহারিকের চেয়ে অনেক বেশি জটিল হওয়ার কারণে এটি কেবল অর্থহীন।
আন্তোন

@ অ্যান্ড্রুমায়ার্স লিঙ্কযুক্ত তালিকার সন্ধান আরও নিখুঁতভাবে O(n)
ফ্যান্ট0 মি

1
@ ফ্যান্ট0 মিঃ হ্যাঁ, আমাকে এটি নির্ধারণ করতে কিছুটা সময় নিয়েছিল যে এটি ধরে নিয়েছে যে আপনি প্রতিবারের শুরু থেকে ট্র্যাভ্রিংয়ের পরিবর্তে বর্তমান অবস্থান থেকে এগিয়ে চলেছেন।
asm

38

(ভারসাম্যপূর্ণ) গাছের ক্ষেত্রে (বলুন, বাইনারি ট্রি, সুতরাং সমস্ত বেস 2):log

  • গাছের গোড়া পাচ্ছেΘ(1)
  • মূল থেকে পাতায় হাঁটাΘ(logn)
  • গাছের সমস্ত নোডকে অনুসরণ করছেΘ(n)
  • হল গাছের সমস্ত উপগ্রহ দুটি নোডের উপর ক্রিয়া, যেমন কোনও দুটি নোডের মধ্যে বিভিন্ন পাথের সংখ্যা।Θ(n2)
  • - কে নোডেরকোনও উপসেটের জন্য উপরের সাধারণীকরণ(ধ্রুবক কে জন্য )Θ(nk)kk
  • হ'ল নোডের সমস্ত সম্ভাব্য সাবসেটের উপর ক্রিয়া (সমস্ত সম্ভাব্য আকারের উপসেট, অর্থাৎ, কে = 1 , 2 , , এন ।)। উদাহরণস্বরূপ,গাছেরবিভিন্নউপ-গাছেরসংখ্যা।Θ(2n)k=1,2,,n

5
এটি যুক্ত করতে, Θ ( l o g) এর জন্য অন্তর্দৃষ্টি দুটি জিনিস থেকে আসে: 1.) পুনরাবৃত্তি টি ( এন ) = টি ( ) Θ(loglogn)এবং ২) আকারেরকোনও ক্ষেত্রে বাইনারি অনুসন্ধানlog(n)অর্থাত্ গাছের উচ্চতায় বাইনারি অনুসন্ধান। T(n)=T((n))+1log(n)
এমকর্লি

17

জন্য সম্ভব হবে, আপনি নিচে থেকে সম্মান সঙ্গে কিছু অবাধ পরিমাণ দ্বারা আনুপাতিকভাবে সমস্যা আকার কাটা সক্ষম হতে হবে এনO(logn)n একটি ধ্রুবক সময় অপারেশন সঙ্গে।

উদাহরণস্বরূপ, বাইনারি অনুসন্ধানের ক্ষেত্রে, আপনি প্রতিটি তুলনা ক্রিয়াকলাপের সাহায্যে সমস্যার আকারটি অর্ধেক কেটে ফেলতে পারেন।

এখন, আপনার কি সমস্যার আকারটি অর্ধেকে কেটে ফেলতে হবে, আসলে না। একটি অ্যালগরিদম হয় , এমনকি যদি এটি ডাউন সমস্যা সার্চ স্পেস 0.0001% করে, যতদিন শতাংশ এবং অপারেশন ওটাকে কেটে ফেলবেন সমস্যা আকার ধ্রুবক থাকে ব্যবহার যেমন কেটে যাবে এটি একটি এর হে ( লগ ইন করুন এন ) অ্যালগরিদম এটি দ্রুত অ্যালগরিদম হবে না তবে এটি এখনও খুব বড় ধ্রুবক সহ ( লগ এন ) । (ধরে নিলাম আমরা বেস 2 লগ দিয়ে লগ এন সম্পর্কে কথা বলছি )O(logn)O(logn)O(logn)logn


1
'ডাউন কাটিংয়ের পরিমাণ' ধ্রুবক না হলে কী হবে?
Svish

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

হ্যাঁ, আমার অর্থ হ'ল সমস্যা অনুসন্ধানের জায়গাটি সর্বদা হ্রাস পেয়েছে তবে অবিচ্ছিন্নভাবে স্থির হারে নয়। কেবলমাত্র আপনার "যতক্ষণ শতাংশ এবং অপারেশন সমস্যার আকার কাটাতে ব্যবহার করে তা স্থির থাকে, এটি একটি ও (লগ এন) অ্যালগরিদম" এর কথা ভেবেছিল; যদি শতাংশটি ধ্রুবক না থাকে তবে যদি এটির আলাদা নাম থাকে।
Svish

8

দশমিক সংখ্যা কে বাইনারি রূপান্তর করতে অ্যালগরিদম সম্পর্কে চিন্তা করুনn

while n != 0:
   print n%2, 
   n = n/2

এই whileলুপটি বার চালায় ।log(n)


1
অবশ্যই এই প্রোগ্রাম loops বার, কিন্তু সাধারণভাবে আমরা যখন সম্পর্কে কথা বলতে হে ( ( গুলি ) ) জটিলতা গুলি আপনার ইনপুট মাপ। এখানে আপনার ইনপুট মাপ ইতিমধ্যেই গুলি = লগ ইন করুন এন , তাই আমি বলতে চাই এই প্রোগ্রাম শুধুমাত্র রৈখিক (হয় হে ( গুলি ) )lognO(f(s))ss=lognO(s)
jmad

@ জ্যামদ ডান। তবে এই উদাহরণটি আপনাকে লগ (এন) এর অন্তর্দৃষ্টি দেয়।
প্রতীক দেওঘরে

@ জ্যামদ আমি এলোমেলোমটিও এলোমেলো সংখ্যা জেনারেট করতে ব্যবহার করতে পারতাম তবে আমি এটিকে যথাসম্ভব সহজ চাইতাম।
প্রতীক দেওঘরে

8

হ্যাঁ, 1 এবং n এর মধ্যে হয় তবে এটি n এর চেয়ে 1 এর কাছাকাছি । লগ কি ( এন )log(n)1n1nlog(n) ? লগ ফাংশন ক্ষয়ক্ষতির বিপরীত ফাংশন। আমাকে ক্ষয়ক্ষতি দিয়ে শুরু করা যাক এবং লগারিদম কী তা আপনার একটি ভাল ধারণা পাওয়া উচিত।

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

এখন, দুটি সংখ্যার মধ্যে এবং 2 100 , 100 হ'ল 2 100 (বেস 2 তে ) এর লগারিদম । 100 তুলনামূলকভাবে 2 100 এর তুলনায় এমন একটি ছোট সংখ্যা । কারও বাড়ীতে 100 টি আলাদা আইটেম থাকা উচিত। তবে, 2 100 মহাবিশ্বের জন্য যথেষ্ট ভাল। লগ ( এন ) এবং এন এর কথা ভাবার সময় হোম বনাম মহাবিশ্বকে ভাবুন10021001002100210021001002100log(n)n

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

বলুন আপনার দুটি শহর এবং B রয়েছে এবং এর মধ্যে দুটি পথ যেতে পারে। তাদের মধ্যে কতগুলি পথ রয়েছে? দুই। তা তুচ্ছ। এখন বলুন, অন্য একটি সি সি আছে , এবং আপনি তিনটি উপায়ে বি থেকে সি যেতে পারেন । এবং সি এর মধ্যে এখন কতটি পথ রয়েছে ? ছয়, তাই না? কীভাবে পেল? আপনি তাদের গণনা করেছেন? না আপনি এগুলি বহুগুণ করেছেন? যেভাবেই হোক না কেন, উভয় উপায়ে একইরকম ফল দেয় তা দেখতে সহজ। এখন আপনি যদি একটি সিটি ডি যুক্ত করেন যা সি থেকে চারটি উপায়ে পৌঁছানো যায়, A এবং D এর মধ্যে কতগুলি পথ রয়েছেABCBCACDCAD? আপনি যদি আমার উপর বিশ্বাস না করেন তবে তা গণনা করুন তবে এটি সমান যা 24 । এখন, যদি দশটি শহর থাকে এবং একটি শহর থেকে অন্য শহর দুটি পথ থাকে এবং তারা সরলরেখার মতো সাজানো থাকে। শুরু থেকে শেষ পর্যন্ত কতটি পথ রয়েছে? তাদের সংখ্যা বাড়িয়ে যদি তুমি আমাকে বিশ্বাস করতে পারি না, কিন্তু আমি আপনাকে বলতে হবে আছে 2 10 , যা 1024 । দেখ, একথা 2 10 এর সূচকীয় ফল 10 , এবং 10 লগারিদম হয় 2 1010 হ'ল 1024 এর তুলনায় একটি ছোট সংখ্যা ।2342421010242101010210101024

লগারিদম ফাংশন হয় এন কি এন হয় 2 এন (নোট যে 2 লগারিদম বেস যায়)। যদি আপনি বহুগুণ লগে ( এন ) নিজেই বার হয় (দ্রষ্টব্য যে লোগারিদমের ভিত্তি) আপনি এন পাবেনলগ ইন করুন ( এন ) তাই অতি ক্ষুদ্র, সঙ্গে তুলনা এত ছোট এন , যে এটি আপনার বাড়িতে যেখানে আকার এনlog2(n)nn2n2logb(n)bbnlog(n)nn মহাবিশ্বের আকার।

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


3
সুন্দরভাবে লেখা থাকাকালীন, এই উত্তরে " সত্যিই ছোট" ছাড়াও খুব কম তথ্য রয়েছে । log(n)
রাফেল

3
আমি এটি কতটা ছোট তার একটি অন্তর্দৃষ্টি দেওয়ার চেষ্টা করছিলাম।
রবি

5

আপনার থিমটি চালিয়ে যেতে, বারবার অনুমান করার মতো যেখানে এক্সO(logn)x যা তালিকায় রয়েছে এবং "উচ্চতর" বা "নিম্ন" (সূচকের দিক থেকে) বলা হচ্ছে।

এটি এখনও তালিকার আকারের উপর ভিত্তি করে, তবে আপনাকে কেবলমাত্র উপাদানগুলির একটি ভগ্নাংশ দেখতে হবে।


4

আমাদের যদি একটি বিভাজন থাকে এবং অ্যালগরিদম জয় করে , এবং আমরা সাব-প্রব্লেমটির জন্য কেবল একটি পুনরাবৃত্ত কল করি এবং এটি মাস্টার উপপাদ্যের দ্বিতীয় ক্ষেত্রে , অর্থাত্ পুনঃবিবেচিত অংশটির সময় জটিলতা হ'ল , অ্যালগরিদমের জটিলতা Θ ( lg k + 1 n ) হবেΘ(lgkn)Θ(lgk+1n)

অন্য কথায়, যখন আমাদের একটি বিভাজন ঘটে এবং যখন একটি সমস্যা হিসাবে ধীরে ধীরে সমস্যা হয় তখনকার সমস্যাটির ধ্রুবক ফ্যাক্টরটি একটি পুনরাবৃত্ত কলের সাথে অ্যালগরিদমকে জয় করে এবং অ-পুনরাবৃত্ত অংশে সময়টি (ধ্রুবক) হয়, অ্যালগরিদমের চলমান সময়টি এলজি এন হতে চলেছেΘ(1)lgn

বাইনারি অনুসন্ধান অ্যালগোরিদম শাস্ত্রীয় উদাহরণ।


1

স্বজ্ঞাততাটি হ'ল আপনি কতবার একটি সংখ্যা অর্ধেক করতে পারবেন, এন বলুন, এটি 1 এ হ্রাস হওয়ার আগে ও (এলজি এন) হয়।

দেখার জন্য, এটি একটি বাইনারি গাছ হিসাবে অঙ্কন করার চেষ্টা করুন এবং এই জ্যামিতিক অগ্রগতি সমাধান করে স্তরের সংখ্যা গণনা করুন।

2^0+2^1+...+2^h = n

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