ও (লগ এন) এর সঠিক অর্থ কী?


2138

আমি বিগ হে নোটেশন চলমান সময় এবং orশ্বরিক বার সম্পর্কে শিখছি। আমি ও (এন) রৈখিক সময়ের ধারণাটি বুঝতে পারি , মানে ইনপুটটির আকারটি আনুপাতিকভাবে অ্যালগোরিদমের বৃদ্ধিকে প্রভাবিত করে ... এবং একই হিসাবে দেখা যায়, উদাহরণস্বরূপ, চতুর্ভুজ সময় O (n 2 ) ইত্যাদি..আপনি আলগোরিদিম যেমন ওমু (এন!) বারের সাথে ক্রিয়াকলাপ জেনারেটরগুলি, যা ফ্যাক্টরিওরগুলি দ্বারা বৃদ্ধি পায়।

উদাহরণস্বরূপ, নিম্নলিখিত ফাংশনটি হ'ল (এন) কারণ অ্যালগরিদম তার ইনপুট এন অনুপাতে বৃদ্ধি পায় :

f(int n) {
  int i;
  for (i = 0; i < n; ++i)
    printf("%d", i);
}

একইভাবে, যদি নেস্টেড লুপ থাকে তবে সময়টি হবে ও (এন 2 )।

তবে ও (লগ এন) ঠিক কী ? উদাহরণস্বরূপ, সম্পূর্ণ বাইনারি গাছের উচ্চতা ও (লগ এন) বলতে কী বোঝায় ?

লোগারিদম কী তা আমি জানি (সম্ভবত খুব বিস্তৃতভাবে নয়), এই অর্থে যে: লগ 10 100 = 2, তবে আমি বুঝতে পারি না কীভাবে লগারিদমিক সময় দিয়ে কোনও ফাংশন সনাক্ত করতে হয়।


60
একটি 1-নোড বাইনারি গাছের উচ্চতা লগ 2 থাকে (1) +1 = 1, একটি 2-নোড গাছের উচ্চতা লগ 2 থাকে (2) +1 = 2, একটি 4-নোড গাছের উচ্চতা লগ 2 থাকে (4) +1 = 3, এবং শীঘ্রই. একটি এন-নোড গাছের উচ্চতা লগ 2 (এন) +1 থাকে, সুতরাং গাছে নোড যুক্ত করার ফলে এটির গড় উচ্চতা লোগারিথ্মিকভাবে বৃদ্ধি পায়।
ডেভিড আর ট্রিবিলে

36
একটি জিনিস যা আমি বেশিরভাগ উত্তরে দেখছি তা হ'ল তারা মূলত "ও (কিছু)" বর্ণনা করে মানে অ্যালগরিদমের চলমান সময়টি "কিছু" এর অনুপাতে বৃদ্ধি পায়। প্রদত্ত যে আপনি "ও (লগ এন)" এর "সঠিক অর্থ" চেয়েছিলেন, এটি সত্য নয়। এটি বিগ-থা স্বীকৃতিটির স্বজ্ঞাত বর্ণনা, বিগ-ও নয়। ও (লগ এন) স্বজ্ঞাতভাবে বোঝা যাচ্ছে চলমান সময়টি "লগ এন" এর সমানুপাতিকভাবে বেড়ে যায় : স্ট্যাকওভারফ্লো
প্রশ্নগুলি / 11471199/…

31
আমি সর্বদা ও (লগ এন) এর উদাহরণ হিসাবে বিভাজন এবং
বিজয়কে স্মরণ করি

14
এটি উপলব্ধি করা গুরুত্বপূর্ণ যে এর লগ বেস 2 (বেস 10 নয়)। এটি কারণ একটি অ্যালগরিদমের প্রতিটি পদক্ষেপে, আপনি আপনার অবশিষ্ট পছন্দগুলির অর্ধেকটি সরিয়ে দেন। কম্পিউটার বিজ্ঞানে আমরা প্রায়শই লগ বেস 2 নিয়ে ডিল করি কারণ আমরা ধ্রুবকগুলিকে উপেক্ষা করতে পারি। তবে কিছু ব্যাতিক্রম রয়েছে (যেমন চতুষ্কাল গাছের রান সময়গুলি লগ বেস 4)
ইথান

13
@ ইথান: আপনি কোন ভিত্তিতে রয়েছেন তা বিবেচ্য নয়, যেহেতু বেস রূপান্তরটি কেবল একটি ধ্রুবক গুণ, সূত্রটি লগ_বি (এক্স) = লগ_ড (এক্স) / লগ_ডি (বি)। লগ_ডি (খ) কেবল একটি ধ্রুবক হবে।
মাইন্ডভাইরাস

উত্তর:


2709

আমি বুঝতে পারি না লগ সময় দিয়ে কীভাবে কোনও ফাংশন সনাক্ত করতে হয়।

লগারিদমিক চলমান-সময় ফাংশনের সর্বাধিক সাধারণ বৈশিষ্ট্যগুলি হ'ল:

  • পরবর্তী পদক্ষেপের উপর কিছু ক্রিয়াকলাপ সম্পাদন করা বাছাই করা বেশ কয়েকটি সম্ভাবনার একটি এবং and
  • শুধুমাত্র একটি চয়ন করা প্রয়োজন।

অথবা

  • যে উপাদানগুলির উপর ক্রিয়াটি করা হয় তা হ'ল n এর অঙ্ক s

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

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


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

দ্রুততম থেকে ধীরতম পর্যন্ত আমরা কিছু কিছু অপারেশনের চলমান সময়গুলি এখানে দিচ্ছি যা ফোন বইতে করা যায়:

  • ও (1) (সবচেয়ে খারাপ ক্ষেত্রে): কোনও ব্যবসায়ের নাম এবং ব্যবসায়ের নাম রয়েছে এমন পৃষ্ঠাটি দেওয়া হয়েছে, ফোন নম্বরটি সন্ধান করুন।

  • ও (1) (গড় ক্ষেত্রে): কোনও ব্যক্তির নাম এবং তার নাম রয়েছে এমন পৃষ্ঠাটি দেওয়া হয়েছে, ফোন নম্বরটি সন্ধান করুন।

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

  • ও (এন): সমস্ত লোকের সন্ধান করুন যাদের ফোন নম্বরগুলিতে "5" সংখ্যা রয়েছে।

  • ও (এন): একটি ফোন নম্বর দেওয়া হয়েছে, সেই নম্বরটি সহ ব্যক্তি বা ব্যবসায় সন্ধান করুন।

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

নীচের উদাহরণগুলির জন্য, আমরা এখন প্রিন্টারের অফিসে আছি। ফোন বইগুলি প্রতিটি বাসিন্দা বা ব্যবসায়ের কাছে মেইল ​​করার অপেক্ষায় রয়েছে এবং প্রতিটি ফোন বইতে একটি স্টিকার রয়েছে যেখানে এটি প্রেরণ করা হবে তা চিহ্নিত করে। প্রতিটি ব্যক্তি বা ব্যবসায় একটি ফোন বই পায়।

  • ও (এন লগ এন): আমরা ফোন বইটি ব্যক্তিগতকৃত করতে চাই, তাই আমরা প্রতিটি ব্যক্তি বা ব্যবসায়ের নাম তাদের মনোনীত অনুলিপিতে খুঁজে পেতে যাচ্ছি, তারপরে বইটিতে তাদের নামটি বৃত্তাকারে লিখুন এবং তাদের পৃষ্ঠপোষকতার জন্য একটি সংক্ষিপ্ত ধন্যবাদ নোট লিখুন ।

  • ও (এন 2 ): অফিসে একটি ত্রুটি ঘটেছে, এবং প্রতিটি ফোন বইয়ের প্রতিটি প্রবেশের ফোন নম্বর শেষে অতিরিক্ত "0" থাকে। কিছুটা হোয়াইট আউট নিন এবং প্রতিটি শূন্য সরান।

  • ও (n · n!): আমরা শিপিং ডকের উপর ফোনবুকগুলি লোড করতে প্রস্তুত। দুর্ভাগ্যক্রমে, যে রোবটটি বইগুলি বোঝানোর কথা ছিল তা হায়াওয়াইর হয়ে গেছে: এটি বইগুলিকে একটি এলোমেলোভাবে ক্রমে ট্রাকে রেখে দিচ্ছে! আরও খারাপ, এটি সমস্ত বই ট্রাকের উপরে লোড করে, তারপরে তারা সঠিক ক্রমে রয়েছে কিনা তা পরীক্ষা করে দেখুন এবং যদি তা না হয় তবে তা সেগুলি আনলোড করে আবার শুরু করে। (এটি ভয়ঙ্কর বোগো সাজান sort )

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


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

12
"অফিসে একটি ত্রুটি ঘটেছে, এবং প্রতিটি ফোন বইয়ের প্রতিটি প্রবেশের ফোন নম্বর শেষে একটি অতিরিক্ত" 0 "থাকে some কিছুটা শ্বেত আউট নিন এবং প্রতিটি শূন্য সরান" " <- এটি এন স্কোয়ার অর্ডার নয়। এন ইনপুট আকার হিসাবে সংজ্ঞায়িত করা হয়। ইনপুটটির আকার হ'ল ফোন নম্বরগুলির সংখ্যা, যা বইয়ের সংখ্যা অনুসারে বইয়ের সংখ্যার সংখ্যা। এটি এখনও লিনিয়ার টাইম অপারেশন।
বিলি ওনিল

21
@ বিলি: এই উদাহরণে, Nএকটি একক বইয়ের লোক সংখ্যা। যেহেতু ফোন বইয়ের প্রতিটি ব্যক্তিও বইটির নিজস্ব অনুলিপি পান, সেখানে N অভিন্ন ফোনের বই রয়েছে, প্রত্যেকটিতে Nএটির লোক রয়েছে, যা ও (এন ^ 2)।
জন Feminella

48
ও (1) সবচেয়ে খারাপ কেসটি নয়, সবচেয়ে খারাপ কেস হিসাবে এটি আশ্চর্যরূপে হাইলাইট করা হয়েছে?
এসভিপ

54
একটি হে (লগ এন) সংজ্ঞাটি খুঁজে পেতে আমার ও (দীর্ঘকাল! N-55/2) সময় নিয়েছে যা অবশেষে তা বোঝায়। +1
আইটিএব্যাগ_আন্দ_আই লাইকড_এটি

611

O(log N)মূলত সময়টি রৈখিকভাবে উপরে nযায় যখন তাত্ক্ষণিকভাবে উপরে যায়। তাই আপনি যদি এটা লাগে 1গনা দ্বিতীয় 10উপাদান, এটি নিতে হবে 2গনা সেকেন্ড 100উপাদান, 3গনা সেকেন্ড 1000উপাদান, ইত্যাদি।

এটি তখনই O(log n)যখন আমরা ভাগ করে নেব এবং ধরণের অ্যালগোরিদম যেমন বাইনারি অনুসন্ধান করি। আর একটি উদাহরণ হ'ল দ্রুত সাজানো যেখানে প্রতিবার আমরা অ্যারেটিকে দুটি ভাগে ভাগ করি এবং প্রতিবার O(N)পিভট উপাদান আবিষ্কার করতে সময় লাগে । সুতরাং এটি N O(log N)


108
জ্ঞানের তিনটি লাইন যা অন্য সমস্ত প্রবন্ধের উত্তরগুলিকে প্রহার করে ... :) প্রোগ্রামিং প্রসঙ্গে যদি কেউ এটির অনুপস্থিত থাকে তবে ল (লগ এন) 10 এর জন্য 1 সেকেন্ডের মতো স্কেলগুলি উপাদানসমূহ, 20 এর জন্য 2 সেকেন্ড, 40 এর জন্য 3 ইত্যাদি
নওফাল 23'14

3
সম্মত, সংক্ষিপ্ত এবং স্পষ্ট, যদিও ওপি থেকে শেষ প্রশ্নটি ছিল লোগারিথমিক ফাংশনটি কীভাবে চিহ্নিত করা যায়, এটি "কী তা নয়"
অ্যাডাম

4
হ্যাঁ, লগারিদমিক ফাংশনটি এটি সূচকীয় ফাংশনের বিপরীত। ((লগ এক্স) বেস এ) এর বিপরীতে (একটি পাওয়ার এক্স)। গ্রাফ সহ এই ফাংশনগুলির গুণগত বিশ্লেষণ আরও স্বজ্ঞাততা দেয়।
ওভাররেচেন্জ করুন

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

1
আমি মনে করি এটি খুব ভাল উত্তর, অংশটি বাদে যেখানে দাবি করে যে বাইনারি অনুসন্ধানটি একটি বিভাজন এবং বিজয়ী অ্যালগরিদম। এটা না।
কোড_ড্রেড

579

এই প্রশ্নটিতে ইতিমধ্যে অনেক ভাল উত্তর পোস্ট করা হয়েছে, তবে আমি বিশ্বাস করি যে আমরা সত্যই একটি গুরুত্বপূর্ণ উত্তর মিস করছি - যথা সচিত্র উত্তর answer

সম্পূর্ণ বাইনারি গাছের উচ্চতা ও (লগ এন) বলতে কী বোঝায়?

নিম্নলিখিত অঙ্কন একটি বাইনারি গাছ চিত্রিত করা হয়। উপরের স্তরের তুলনায় প্রতিটি স্তরে নোডের দ্বিগুণ কীভাবে রয়েছে তা লক্ষ্য করুন (তাই বাইনারি ):

বাইনারি ট্রি

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

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

ষড়যন্ত্র log(n)কাগজ একটি প্লেইন টুকরা, একটি গ্রাফ যেখানে বক্ররেখা উত্থান যেমন decelerates পরিণাম ডেকে আনবে nবৃদ্ধি:

ও (লগ এন)


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

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

5
একটি সম্পূর্ণ বাইনারি গাছের সম্পূর্ণ স্তর পূরণের শেষ স্তর থাকা দরকার না। আমি বলব, একটি 'পূর্ণ বাইনারি গাছ' আরও উপযুক্ত।
মিঃ এজে

আপনার উত্তরটি ওপি-র মূল সমস্যার বিষয়ে আরও
দৃ concrete়তার

2
এই গাছটিতে 31 টি আইটেম রয়েছে, 16 নয় it কেন এটি 16 আইটেম ডেটা সেট বলা হয়? এর প্রতিটি নোড একটি সংখ্যার প্রতিনিধিত্ব করে, অন্যথায় এটি একটি অকার্যকর বাইনারি গাছ হবে: পি
পেরি মনসচাউ

245

নীচের ব্যাখ্যাটি সম্পূর্ণরূপে সুষম বাইনারি গাছের কেসটি ব্যবহার করছে যাতে আপনি বুঝতে পারবেন কীভাবে আমরা লগারিদমিক সময় জটিলতা পাই।

বাইনারি ট্রি এমন একটি ক্ষেত্র যেখানে আকার n এর সমস্যাটিকে আকার 1/2 এর উপ-সমস্যায় বিভক্ত করা হয় যতক্ষণ না আমরা আকার 1 এর সমস্যায় পৌঁছায়:

একটি বাইনারি গাছের উচ্চতা

এবং এইভাবে আপনি ও (লগ এন) পান যা কোনও সমাধানে পৌঁছানোর জন্য উপরের গাছের উপরে কাজ করা পরিমাণ।

ও (লগ এন) সময় জটিলতার সাথে একটি সাধারণ অ্যালগরিদম হ'ল বাইনারি অনুসন্ধান যার পুনরাবৃত্তির সম্পর্ক টি (এন / 2) + ও (1) অর্থাৎ গাছের প্রতিটি পরবর্তী স্তরে আপনি সমস্যার অর্ধেককে বিভক্ত করেন এবং ধ্রুব পরিমাণ অতিরিক্ত কাজ করেন।


2
নবাগত এখানে। সুতরাং আপনি কি বলতে পারবেন যে গাছের উচ্চতাটি n = 1 আকারে পৌঁছানোর জন্য পুনরাবৃত্তি করে বিভাগের হার?
কোডি

@ কোডি, হ্যাঁ বেশিরভাগ অংশের জন্য আপনার পর্যবেক্ষণটি সঠিক। এই উদাহরণ চিত্রিত / ব্যবহার করে log_2। তোমার পর্যবেক্ষণ পরলোক ব্যয় হবে log_2এবং কোন জন্য সঠিক হতে পারে log_xযেখানে x > 1। সরল বিভাগ করা ঠিক 1 এর দিকে নাও যেতে পারে, সুতরাং আপনি Ceiling()সর্বশেষ বিভাগের 1 বা সমান কিছু সমান না হওয়া পর্যন্ত পুনরাবৃত্ত বিভাগ বলতে চাইতে পারেন ।
জেমস ওরাভেক

198

সংক্ষিপ্ত বিবরণ

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

প্রথমত, আপনি লোগারিদম সম্পর্কে একটি সাধারণ ধারণা রাখতে চান যা আপনি https://en.wikedia.org/wiki/Logarithm থেকে পেতে পারেন । প্রাকৃতিক বিজ্ঞান ব্যবহার eএবং প্রাকৃতিক লগ। ইঞ্জিনিয়ারিং শিষ্যরা লগ_10 (লগ বেস 10) এবং কম্পিউটার বিজ্ঞানীরা লগ_2 (লগ বেস 2) প্রচুর ব্যবহার করবেন, যেহেতু কম্পিউটারগুলি বাইনারি ভিত্তিক। কখনও কখনও আপনি প্রাকৃতিক লগের সংক্ষিপ্ত রূপগুলি দেখতে পাবেন ln(), ইঞ্জিনিয়াররা সাধারণত log()_10 ছাড়েন এবং কেবল ব্যবহার করুন এবং লগ_2 সংক্ষেপে সংক্ষেপিত হয় lg()। সমস্ত ধরণের লোগারিদম একই ধরণের ফ্যাশনে বৃদ্ধি পায়, এ কারণেই তারা একই বিভাগে ভাগ করে log(n)

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

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

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

বিভিন্ন বিগ হে বিভাগগুলির সহজ কোড উদাহরণ:

ও (1) - ধ্রুব সময় উদাহরণ:

  • অ্যালগরিদম 1:

অ্যালগরিদম 1 হ্যালো একবার প্রিন্ট করে এবং এটি n এর উপর নির্ভর করে না, তাই এটি সর্বদা স্থির সময়ে চলবে, তাই এটি O(1)

print "hello";
  • অ্যালগরিদম 2:

অ্যালগরিদম 2 হ্যালো 3 বার প্রিন্ট করে তবে এটি কোনও ইনপুট আকারের উপর নির্ভর করে না। এমনকি n বড় হওয়ার সাথে সাথে এই অ্যালগরিদম সর্বদা কেবল 3 বার হ্যালো প্রিন্ট করবে। এটি 3 বলা হচ্ছে, একটি ধ্রুবক, তাই এই অ্যালগরিদমটিও O(1)

print "hello";
print "hello";
print "hello";

ও (লগ (এন)) - লগারিদমিক উদাহরণসমূহ:

  • অ্যালগরিদম 3 - এটি "লগ_2" এর মতো কাজ করে

অ্যালগরিদম 3 একটি অ্যালগরিদম দেখায় যা লগ 3 (এন) এ চলে। লুপের পোস্ট ক্রিয়াকলাপটি লক্ষ করুন যে i এর বর্তমান মানকে 2 দ্বারা গুণ করে, তাই i1 থেকে 2 থেকে 4 থেকে 8 থেকে 16 থেকে 32 পর্যন্ত যায় ...

for(int i = 1; i <= n; i = i * 2)
  print "hello";
  • অ্যালগরিদম 4 - এটি "লগ_3" এর মতো কাজ করে

অ্যালগরিদম 4 লগ_3 প্রদর্শন করে। নোটিশ i1 থেকে 3 থেকে 9 থেকে 27 পর্যন্ত যায় ...

for(int i = 1; i <= n; i = i * 3)
  print "hello";
  • অ্যালগরিদম 5 - এটি "log_1.02" এর মতো কাজ করে

অ্যালগরিদম 5 গুরুত্বপূর্ণ, যেহেতু এটি দেখায় যে যতক্ষণ সংখ্যা 1 এর চেয়ে বেশি এবং ফলাফলটি বার বার নিজের বিপরীতে বহুগুণ হয়, আপনি লোগারিদমিক অ্যালগরিদমের দিকে তাকাচ্ছেন helps

for(double i = 1; i < n; i = i * 1.02)
  print "hello";

ও (এন) - লিনিয়ার সময় উদাহরণ:

  • অ্যালগরিদম 6

এই অ্যালগরিদম সহজ, যা হ্যালো এন বার মুদ্রণ করে।

for(int i = 0; i < n; i++)
  print "hello";
  • অ্যালগরিদম 7

এই অ্যালগরিদম একটি প্রকরণ দেখায়, যেখানে এটি হ্যালো এন / 2 বার মুদ্রণ করবে। n / 2 = 1/2 * এন। আমরা 1/2 ধ্রুবকটিকে উপেক্ষা করে দেখি যে এই অ্যালগরিদমটি ও (এন)।

for(int i = 0; i < n; i = i + 2)
  print "hello";

ও (এন * লগ (এন)) - এনলগ (এন) উদাহরণ:

  • অ্যালগরিদম 8

O(log(n))এবং এর সংমিশ্রণ হিসাবে এটি ভাবেন O(n)। লুপগুলির জন্য বাসা বাঁধাই আমাদের এটি পেতে সহায়তা করেO(n*log(n))

for(int i = 0; i < n; i++)
  for(int j = 1; j < n; j = j * 2)
    print "hello";
  • অ্যালগরিদম 9

অ্যালগোরিদম 9 অ্যালগরিদম 8 এর মতো, তবে প্রতিটি লুপের বিভিন্নতা অনুমোদিত হয়েছে, যার ফলস্বরূপ চূড়ান্ত ফলাফল হতে পারে O(n*log(n))

for(int i = 0; i < n; i = i + 2)
  for(int j = 1; j < n; j = j * 3)
    print "hello";

O (n ^ 2) - n স্কোয়ার উদাহরণ:

  • অ্যালগরিদম 10

O(n^2) লুপগুলির জন্য নেস্টিং স্ট্যান্ডার্ডের মাধ্যমে সহজেই পাওয়া যায়।

for(int i = 0; i < n; i++)
  for(int j = 0; j < n; j++)
    print "hello";
  • অ্যালগরিদম 11

অ্যালগরিদম 10 এর মতো তবে কিছু প্রকারের সাথে।

for(int i = 0; i < n; i++)
  for(int j = 0; j < n; j = j + 2)
    print "hello";

ও (এন ^ 3) - এন কিউবেড উদাহরণ:

  • অ্যালগরিদম 12

এটি আলগোরিদিম 10 এর মতো তবে 2 এর পরিবর্তে 3 টি লুপ রয়েছে।

for(int i = 0; i < n; i++)
  for(int j = 0; j < n; j++)
    for(int k = 0; k < n; k++)
      print "hello";
  • অ্যালগরিদম 13

অ্যালগরিদম 12 এর মতো, তবে কিছু পরিবর্তনের সাথে এখনও পাওয়া যায় O(n^3)

for(int i = 0; i < n; i++)
  for(int j = 0; j < n + 5; j = j + 2)
    for(int k = 0; k < n; k = k + 3)
      print "hello";

সারসংক্ষেপ

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


17
অসাধারণ. আমার জন্য সবচেয়ে ভাল ব্যাখ্যা আমি কখনও দেখেছি। এটা তোলে যদি সুন্দর হতে চাই O(n^2)সংমিশ্রণ যেমন উল্লেখ করা হয়েছে O(n)এবং O(n), তাই O(n) * O(n) = O(n * n) = O(n^2)। এই সমীকরণ ছাড়াই কিছুটা লাফানোর মতো মনে হচ্ছে। এটি পূর্বের ব্যাখ্যার পুনরাবৃত্তি, তবে আমি মনে করি এই পুনরাবৃত্তি পাঠকদের বোঝার জন্য আরও আত্মবিশ্বাস জোগাতে পারে।
ইনিল

2
এটি কেবল সর্বকালের সেরা ব্যাখ্যা।
এডগার কিলজাক

2
@ আইসটিয়া, আপনার প্রশ্নের অন্তর্দৃষ্টি / অন্তর্দৃষ্টি দিতে আপনি যদি nবনাম চার্ট করেন তবে n/2দেখবেন যে তারা উভয়ই একটি সরলরেখা তৈরি করে। এটি তাদের একই বর্ধিত হারের একই শ্রেণিতে রাখে (এটিকে চার্টিংয়ের আকার হিসাবে ভাবেন)। একইভাবে, যদি আপনি log_2বনাম চার্ট করেন তবে log_3দেখবেন যে তারা উভয়ই "অনুরূপ আকার" বা "অনুরূপ বৃদ্ধির হার" গ্রহণ করে।
জেমস ওরাভেক

1
@ আইসিটিয়া, @ শাই এবং @ জেমস দ্বারা প্রদত্ত ব্যাখ্যা আরও নির্ভুল, n/2 or 2n or n+2 or nগ্রাফের মধ্যে আলাদা-আলাদা লাইন থাকবে তবে তাদের সমবৃদ্ধির হার থাকবে যার অর্থ তারা সকলেই একটি রৈখিক বৃদ্ধি অনুসরণ করবে।
নরেশ জোশী

2
কীভাবে আমাদের দুটি নেস্ট লুপ রয়েছে, তবে দ্বিতীয় পুনরাবৃত্তিটি প্রথমটির উপর নির্ভর করে, এই নির্ভরতা কি সময়ের জটিলতাকে প্রভাবিত করে?
বায়োনিক্স 1441

131

আপনার যদি এমন কোনও ফাংশন থাকে যা গ্রহণ করে:

1 millisecond to complete if you have 2 elements.
2 milliseconds to complete if you have 4 elements.
3 milliseconds to complete if you have 8 elements.
4 milliseconds to complete if you have 16 elements.
...
n milliseconds to complete if you have 2^n elements.

তারপরে এটি লগ 2 (এন) সময় লাগে । বিগ হে স্বরলিপি , ঢিলেঢালাভাবে ভাষী, তার মানে সম্পর্ক শুধুমাত্র বৃহৎ এন জন্য সত্য হতে হবে, এবং যে ধ্রুব কারণের এবং ছোট পদ উপেক্ষা করা যাবে।


লগ 2 (এন) ও (লগ এন) এর সমান?
সোভেন ভ্যান ডেন বুগার্ট

হ্যাঁ, এখানে অন্য উত্তরের জন্য নওফালের মন্তব্য দেখুন: (কপি-পেস্ট করা) - প্রোগ্রামিং প্রসঙ্গে লগের ভিত্তি 2 (10 নয়), সুতরাং ও (লগ এন) 10 টি উপাদানের জন্য 1 সেকেন্ডের মতো স্কেল, 20 এর জন্য 2 সেকেন্ড , 40 ইত্যাদির জন্য 3
আন্ড্রেজ

@ স্বেভেনডেন বুগার্ট, এই সমাধানের উদাহরণটি চিত্রিত করে log_2, যা শ্রেণিতে রয়েছে O(log(n))। সেখানে একই শ্রেণীতে অনেকে হয় O(log(n))অর্থাত log_xযেখানেx > 1
জেমস Oravec

@ আন্দ্রেজ, আপনার মন্তব্যটি so O(log n) scales like 1 sec for 10 elements, 2 sec for 20, 3 for 40 etcসঠিক নয়। যে প্যাটার্ন / বর্গ সঙ্গে মেলে / সারিবদ্ধ হবে O(n)না O(log(n))। যদি কেউ আগ্রহী হন log_10তবে সমপরিমাণ উদাহরণটি 10 ​​টি উপাদানের জন্য 1 সেকেন্ড, 100 এর জন্য 2 সেকেন্ড, 1000 এর জন্য 3 সেকেন্ড ইত্যাদি হবে
জেমস ওরাভেক

99

লোগারিদমিক চলমান সময় ( O(log n)) এর অর্থ মূলত চলমান সময়টি ইনপুট আকারের লোগারিদমের অনুপাতে বৃদ্ধি পায় - উদাহরণস্বরূপ, যদি 10 টি আইটেম বেশিরভাগ সময় xনেয় এবং 100 টি আইটেম সর্বাধিক, বলুন 2x, এবং 10,000 আইটেম নেয় সর্বাধিক সময় নেয় 4x, তারপরে এটি O(log n)সময়ের জটিলতার মতো দেখাচ্ছে।


1
+1, তবে আপনার সত্যিই এটি চিহ্নিত করা উচিত যে এটি লগ 2, লগ 10 নয়।
অ্যাড্রিয়ানো ভারোলি পিয়াজা

62
লগ 2 বা লগ 10 অপ্রাসঙ্গিক। এগুলি কেবলমাত্র একটি স্কেল ফ্যাক্টর দ্বারা পৃথক হয়, যা তাদেরকে একই ক্রম করে তোলে, অর্থাৎ তারা এখনও একই হারে বৃদ্ধি পায় grow
নলডোরিন

17
লোগারিদম সম্পর্কে মজাদার বিষয় হ'ল আপেক্ষিক উচ্চতার সাথে তুলনা করার সময়, আপনি যে সঠিক বেসটি ব্যবহার করেন তা কোনও ব্যাপার নয়। log 10,000 / log 100আপনি কি বেস ব্যবহার নির্বিশেষে 2 হয়।
আনন

12
নিটপিকি হতে, ও (এলজি এন) এর অর্থ রানটাইম সর্বাধিক আনুপাতিক lg n এর সাথে হয়। আপনি যা বর্ণনা করেছেন তা হলেন থেটা (এলজি এন)।

1
@ আরগ্রিগ: সত্য। বিগ-ও-র উপরের-আবদ্ধ প্রকৃতিটি নির্দেশ করতে আমি কয়েকটি "মোস্টগুলিতে" সম্পাদনা করেছি।
আনন

95

লগারিদম

ঠিক আছে আসুন চেষ্টা করা যাক এবং লগারিদম আসলে কী তা সম্পূর্ণরূপে বুঝতে পারি।

ভাবুন আমাদের একটি দড়ি আছে এবং আমরা এটিকে একটি ঘোড়ার সাথে বেঁধে রেখেছি। যদি দড়িটি সরাসরি ঘোড়ার সাথে বেঁধে রাখা হয়, তবে ঘোড়াটিকে যেভাবে টানতে হবে (বলুন, কোনও লোকের কাছ থেকে) সরাসরি বলার প্রয়োজন হয়।

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

এখন যদি দড়িটি একবার লুপ করা হয় তবে ঘোড়াটিকে 10 গুণ বেশি শক্ত করে টানতে হবে। মানব যদি ঘোড়ার পক্ষে সত্যিই কঠিন করার সিদ্ধান্ত নেয়, তবে সে দড়িটি আবার একটি খুঁটির চারপাশে লুপ করতে পারে এবং তার শক্তি আরও 10 বার বাড়িয়ে তুলতে পারে। তৃতীয় একটি লুপ আবার আরও দশগুণ বৃদ্ধি করবে।

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

আমরা দেখতে পাচ্ছি যে প্রতিটি লুপের জন্য, মান 10 দিয়ে বৃদ্ধি পায় যে কোনও নম্বর পেতে প্রয়োজনীয় টার্নগুলির সংখ্যাকে লগারিদম বলা হয় অর্থাৎ আপনার শক্তিকে একগুণে একাধিক বার করতে আমাদের 3 টি পোষ্ট প্রয়োজন, 6 টি পোস্ট দ্বারা আপনার শক্তি দ্বারা গুণিত করতে 1,000,000।

3 হ'ল 1000 এর লগারিদম এবং 6 টি হ'ল 1,000,000 (বেস 10) এর লোগারিথ।

সুতরাং ও (লগ এন) এর অর্থ কী?

উপরের উদাহরণে আমাদের 'বৃদ্ধির হার' হ'ল ও (লগ এন) । প্রতিটি অতিরিক্ত লুপের জন্য, আমাদের দড়িটি যে শক্তি প্রয়োগ করতে পারে তা 10 গুণ বেশি:

Turns | Max Force
  0   |   1
  1   |   10
  2   |   100
  3   |   1000
  4   |   10000
  n   |   10^n

এখন উপরের উদাহরণটি বেস 10 ব্যবহার করেছে, তবে সৌভাগ্যক্রমে লগের ভিত্তিটি তাত্পর্যপূর্ণ যখন আমরা বড় ও স্বরলিপি সম্পর্কে কথা বলি।

এখন কল্পনা করুন আপনি 1-100 এর মধ্যে কোনও সংখ্যা অনুমান করার চেষ্টা করছেন।

Your Friend: Guess my number between 1-100! 
Your Guess: 50
Your Friend: Lower!
Your Guess: 25
Your Friend: Lower!
Your Guess: 13
Your Friend: Higher!
Your Guess: 19
Your Friend: Higher!
Your Friend: 22
Your Guess: Lower!
Your Guess: 20
Your Friend: Higher!
Your Guess: 21
Your Friend: YOU GOT IT!  

এই অধিকারটি পেতে আপনার এখন 7 টি অনুমান লেগেছিল। তবে এখানে সম্পর্ক কী? প্রতিটি অতিরিক্ত অনুমান থেকে আপনি কতটা আইটেম অনুমান করতে পারবেন?

Guesses | Items
  1     |   2
  2     |   4
  3     |   8
  4     |   16
  5     |   32
  6     |   64
  7     |   128
  10    |   1024

গ্রাফটি ব্যবহার করে, আমরা দেখতে পাচ্ছি যে আমরা 1-100 এর মধ্যে একটি সংখ্যা অনুমান করার জন্য বাইনারি অনুসন্ধান ব্যবহার করি তবে এটি আমাদের সর্বাধিক attempts টি প্রচেষ্টা গ্রহণ করবে । আমাদের যদি 128 নম্বর থাকে তবে আমরা 7 টি চেষ্টাতেও সংখ্যাটি অনুমান করতে পারি তবে 129 সংখ্যা আমাদের সর্বাধিক গ্রহণ করবে 7 টি চেষ্টায়ও 8 টি প্রচেষ্টা নিয়ে যাবে (লগারিদমের সাথে সম্পর্কের ক্ষেত্রে, এখানে আমাদের 128 মান পরিসরের জন্য 7 অনুমান, 1024 মান সীমার জন্য 10 অনুমানের প্রয়োজন হবে 7 হ'ল 128 এর লগারিদম, 10 হ'ল 1024 (বেস 2) এর লগারিদম।

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

আমরা দেখতে পাচ্ছি যে প্রতিটি অনুমানের জন্য আমাদের ডেটা সেট সঙ্কুচিত হচ্ছে। একটি অ্যালগরিদমের লোগারিদ্মিক সময় রয়েছে কিনা তা সনাক্ত করার জন্য থাম্বের একটি ভাল নিয়মটি দেখতে হবে যে ডাটাটি সেটটি প্রতিটি পুনরাবৃত্তির পরে একটি নির্দিষ্ট ক্রমে সঙ্কুচিত হয় কিনা

ও (এন লগ এন) সম্পর্কে কী?

আপনি অবশেষে একটি রৈখিক সময় হে (এন লগ (এন)) অ্যালগরিদম জুড়ে আসবেন । উপরের থাম্বের নিয়ম আবার প্রযোজ্য, তবে এবার লগারিদমিক ফাংশনটি n বার চালাতে হবে যেমন একটি তালিকাতে এন বার হ্রাস করতে হবে , যা একটি mergesort মত আলগোরিদিম ঘটে।

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

অস্বীকৃতি: দড়ি- লোগারিদমের উদাহরণটি ডাব্লু.এসওয়ায়ারের দুর্দান্ত গণিতজ্ঞ ডিলাইট বই থেকে ধরা হয়েছিল


না In our example above, our 'growth rate' is O(log n). For every additional loop, the force our rope can handle is 10 times more, কোনও চার্ট দ্বারা সমর্থিত যা n == লুপের সংখ্যা এবং our 'growth rate'=> 10 ^ n দেখায় , যা লগ নয়। উদাহরণটি তৈরি করে সঠিকভাবে তৈরি করা যেতে পারে n=# horses, যা নিয়ন্ত্রণে লগ এন লুপগুলির প্রয়োজন। দুর্বল প্যাডোগোগিকাল উদাহরণগুলি এমন শিক্ষার্থী তৈরি করে যারা কেবল বিশ্বাস করে যে তারা বোঝে।
পিএস্পসন

56

আপনি ও (লগ এন) স্বজ্ঞাতভাবে বলতে পারেন যে সময়টি এন এর সংখ্যার সাথে সমানুপাতিক by

যদি কোনও ক্রিয়াকলাপ প্রতিটি অঙ্ক বা কোনও ইনপুট বিটের স্থির সময় কাজ করে তবে পুরো ক্রিয়াকলাপটি ইনপুটটির অঙ্ক বা বিটের সংখ্যার সাথে আনুপাতিক সময় নেবে, ইনপুটটির প্রস্থতা নয়; সুতরাং, ও (লগ এন) ও (এন) এর পরিবর্তে।

কোনও ক্রিয়াকলাপ যদি প্রত্যেকে স্থির সময়ের সিদ্ধান্ত নেয় যার প্রতিটি অর্ধেক (3, 4, 5 এর একটি উপাদানকে হ্রাস করে) বিবেচনা করার জন্য ইনপুটটির আকারটি সম্পূর্ণ করে লগ বেস 2 এর সমানুপাতিক সময় নেয় (বেস 3) , ওপেন (এন) হওয়ার পরিবর্তে ইনপুটটির আকার এন এর বেস 4, বেস 5 ...)।

ইত্যাদি।


7
বেশিরভাগ ব্যাখ্যার চেয়ে যথেষ্ট নির্ভুল এবং সহজেই আঁকড়ে ধরা হয়েছে, আমি মনে করি।
টি।

এটি এর ব্যাখ্যা log<sub>10</sub> N, তাই না?
লিউইয়ান 研

1
@ লিউইয়ান 刘 研 তারা অঙ্কের সংখ্যাটি কোন ভিত্তিতে ছিল তা বলেন নি any যাইহোক, লগ (এন) = লগ (এন) / লগ (2) এবং 1 / লগ (2) অতএব একটি ধ্রুবক গুণক, একই নীতিটি অন্যান্য সমস্ত ঘাঁটিতে প্রয়োগ করে। এটি দুটি বিষয় দেখায়। প্রথমত যে মুনশাদোর নীতিটি বেসটি যাই হোক না কেন প্রয়োগ করে (যদিও নীচের নীচে, অনুমানের তুলনায় কম "জাগস") এবং ও (লগ এন) ও (লগ এন) নির্ধারণ করে না যে কোনও হিসাবই আপনাকে সেই সিদ্ধান্তে পৌঁছেছে no ।
জন হান্না

"আনুপাতিক" ... "যার প্রতিটিই ইনপুটটির আকার অর্ধেক করে দেয়" ??????
সিএসগুই

52

ও (লগ এন) এ চলে এমন একটি অ্যালগোরিদমকে মানসিকভাবে আমার সবসময় দেখার জন্য সবচেয়ে ভাল উপায়টি হ'ল:

আপনি যদি একটি গুণকে পরিমাণের দ্বারা সমস্যার আকার বাড়ায় (অর্থাত্ এর আকার 10 দ্বারা গুন করেন), কাজটি কেবলমাত্র একটি সংযোজনীয় পরিমাণ দ্বারা বৃদ্ধি করা হয়।

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


52

প্রথমে আপনাকে নীচের বইটি পড়ার পরামর্শ দিচ্ছি;

অ্যালগরিদম (চতুর্থ সংস্করণ)

এখানে কিছু ফাংশন এবং তাদের প্রত্যাশিত জটিলতা রয়েছে। নাম্বার ইঙ্গিত করছে বিবৃতি সঞ্চালনের ফ্রিকোয়েন্সি

এখানে কিছু ফাংশন এবং তাদের প্রত্যাশিত জটিলতা রয়েছে

বিগ-ও জটিলতা চার্ট অনুসরণ করে বিগোচিট পত্রক থেকে নেওয়া বিগ-ও জটিলতা চার্ট

শেষ পর্যন্ত খুব সাধারণ শোকেস দেখায় যে এটি কীভাবে গণনা করা হয়;

কোনও প্রোগ্রামের বিবৃতি কার্যকরকরণের ফ্রিকোয়েন্সিগুলির অ্যানাটমি।

একটি প্রোগ্রাম চলমান সময় বিশ্লেষণ (উদাহরণ)।

একটি প্রোগ্রাম চলমান সময় বিশ্লেষণ


5
আমি খারাপ ঝুড়িতে ও (এন লগ এন) রাখব না । এটা মেলা এক।
আন্দ্রে ওয়ার্ল্যাং

বিগ-ও জটিলতার চার্টটি দেখার সময় (উপরে) আপনাকে মনে রাখতে হবে ও (এন) হ'ল প্রকৃত রৈখিক বিন্দু, গোলাপী / কমলা বোর্ডার নয়। @ আন্ড্রে এজন্যই ও (এন লগ এন) সঠিকভাবে 'খারাপ' পারফরম্যান্স ব্র্যাকেটে চিহ্নিত করা হয়েছে, এটি লিনিয়ারের চেয়ে খারাপ কর্মক্ষমতা।
জাভাবিস্ট

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

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

1
ও (এন) ত্রিভুজ হওয়া উচিত নয়?
gyosifov

46

(ল) লগ কী ?

আকার 1 এর বিভাগে পৌঁছানোর আগে আপনি বার বার সমান ভাগে বার বার দৈর্ঘ্যের লগ কেটে নিতে পারবেন এমন সংখ্যা।


দুর্দান্ত মন্তব্য! এটি সংক্ষিপ্ত এবং ঠিক উত্তর আমি পরে করছি।
ডেনিসএল

18

বিভাজন এবং বিজয়ী অ্যালগরিদমে সাধারণত একটি থাকে logn চলমান সময়ের উপাদান থাকে। এটি ইনপুটটির পুনরাবৃত্তি অর্ধেক থেকে আসে।

বাইনারি অনুসন্ধানের ক্ষেত্রে, প্রতিটি পুনরাবৃত্তি আপনি ইনপুটটির অর্ধেক ফেলে দেন। এটি লক্ষ করা উচিত যে বিগ-ও স্বরলিপিতে লগ হল লগ বেস 2।

সম্পাদনা: যেমনটি উল্লেখ করা হয়েছে, লগ বেসটি কোনও ব্যাপার নয়, তবে যখন একটি অ্যালগোরিদমের বিগ-ও পারফরম্যান্স পাওয়া যায় তখন লগ ফ্যাক্টরটি অর্ধবৃত্তি থেকে আসে, সুতরাং কেন আমি এটিকে বেস 2 হিসাবে ভাবি?


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

1
: রে "লগ লগ বেস 2 হয়" stackoverflow.com/questions/1569702/is-big-ologn-log-base-e/...
user200783

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

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

লগ 2 এ স্থানান্তরটি আসলে বেশ সহায়ক ছিল।
ড্যান রোজনস্টার্ক

15

তবে ও (লগ এন) ঠিক কী? উদাহরণস্বরূপ, এ> সম্পূর্ণ বাইনারি গাছের উচ্চতা ও (লগ এন) হওয়ার অর্থ কী?

'সম্পূর্ণ বাইনারি গাছের উচ্চতা লোগ এন' বলে আমি এটি পুনরায় লিখব। যদি আপনি ধাপে ধাপে নিচে চলে যাচ্ছেন তবে একটি সম্পূর্ণ বাইনারি গাছের উচ্চতা নির্ধারণ করা ও (লগ এন) হবে।

লগারিদমিক সময় সহ একটি ফাংশন কীভাবে চিহ্নিত করব তা আমি বুঝতে পারি না।

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

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


3
"লোগারিদম মূলত ক্ষয়ক্ষতির বিপরীত" উল্লেখ করার জন্য +1।
টালোনেক্স

12

এই 2 টি ক্ষেত্রে ও (লগ এন) সময় লাগবে

case 1: f(int n) {
      int i;
      for (i = 1; i < n; i=i*2)
        printf("%d", i);
    }


 case 2  : f(int n) {
      int i;
      for (i = n; i>=1 ; i=i/2)
        printf("%d", i);
    }

আমি নিশ্চিত যে আমি কিছু মিস করছি, তবে আমি কি সর্বদা শূন্য থাকব না এবং 0 * 2 = 0 এবং 0/2 = 0 থেকে যে দুটি ক্ষেত্রে লুপগুলি চিরতরে চলে?
dj_segfault

2
@ ডিজে_সেগফল্ট, এটি আমার ভুল ছিল। আমি এখন মনে করি এটি বোধগম্য হয় .. :)
রবি বিসালা

@ রাবিবিস্লা অন্যান্য উত্তরে বলা হয়েছে যে 10 টির ইনপুট 10 টি লুপ হিসাবে 1 সময় নেবে এবং 100 এর ইনপুটটি 1 এর ইনপুট সময়টির 3 গুণ সময় নেবে, এটি অবশ্যই উদাহরণ হিসাবে দেখা যায় না। stackoverflow.com/a/2307330/1667868
সেভেন ভ্যান Boogaart গুহা

12

ও (লগ এন) কিছুটা বিভ্রান্তিকর, আরও স্পষ্টভাবে এটি হে (লগ 2) এন), অর্থাৎ (বেস 2 সহ লোগারিদম)।

ভারসাম্যযুক্ত বাইনারি গাছের উচ্চতা ও (লগ 2 এন), যেহেতু প্রতিটি নোডে দুটি থাকে (লগ 2 এন হিসাবে "দুটি" নোট করুন ) শিশু নোডগুলি। সুতরাং, n নোডযুক্ত একটি গাছের লগ 2 এন এর উচ্চতা থাকে ।

আর একটি উদাহরণ বাইনারি অনুসন্ধান, যা চলমান সময় রয়েছে (লগ 2 এন) কারণ প্রতিটি পদক্ষেপে আপনি অনুসন্ধানের স্থানটিকে 2 দ্বারা বিভক্ত করেন।


4
ও (লগ এন) ও (এলডি এন) বা ও (এলএন এন) এর একই ক্রম। এগুলি সমানুপাতিক। আমি বুঝতে পারি যে শেখার উদ্দেশ্যে ld ব্যবহার করা সহজ।
হেলিওস

4
"আরও স্পষ্টভাবে এটি ও (এলডি এন)" - না, এটি নয়: সমস্ত লগ একই ক্রম হয় (প্রতিটি অন্যকে থেকে কেবল কিছু ধ্রুবক স্কেলিং ফ্যাক্টর দ্বারা পৃথক হয়, যা উপেক্ষা / উপেক্ষা করা হয়)।
ক্রিসডাব্লু

1
আপনি ঠিক ক্রিস, খুব খারাপ শব্দ। হিলিওজের মতো এটি করা উচিত ছিল। এটি শিখতে / বোঝার জন্য সহায়তা করে তবে শেষ পর্যন্ত সমস্ত লগই একই ক্রম।
stmax

10

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

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

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

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

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

* মনে রাখবেন যে বিগ-ও সংকেত, সংজ্ঞা অনুসারে , ধ্রুবকগুলি কোনও ব্যাপার নয়। এছাড়াও লগারিদমগুলির জন্য বেস নিয়ম পরিবর্তনের মাধ্যমে , বিভিন্ন ঘাঁটির লোগারিদমের মধ্যে একমাত্র পার্থক্য একটি ধ্রুবক উপাদান।


চূড়ান্ত * নোটটি লগারিদমগুলি 2 বা 10 এর উপর ভিত্তি করে সম্পর্কে আমার বিভ্রান্তির সমাধান করেছে :) অনেক অনেক ধন্যবাদ।
ইয়াহিয়া

9

এর সহজ অর্থ হল এই কাজের জন্য প্রয়োজনীয় সময়টি লগ (এন) দিয়ে বৃদ্ধি পায় (উদাহরণস্বরূপ: এন = 10 এর জন্য 2 এস, এন = 100 এর জন্য 4 এস, ...)। আরও নির্ভুলতার জন্য বাইনারি অনুসন্ধান অ্যালগরিদম এবং বিগ হে নোটেশনে উইকিপিডিয়া নিবন্ধগুলি পড়ুন ।


9

সহজ ভাষায়: আপনার অ্যালগরিদমের প্রতিটি ধাপে আপনি অর্ধেকটি কাটাতে পারেন। (তাত্পর্যপূর্ণভাবে তৃতীয়, চতুর্থ এর সমান ...)


2
এই উত্তরটি খুব অনর্থক। প্রথমত, আপনি কেবল বেস 2 এর লগারিদমের ক্ষেত্রে অর্ধেকের কাজটি কাটানোর কথা ভাবতে পারেন এটি সত্যিই অবিশ্বাস্য যে কীভাবে এই উত্তর (এবং মূল প্রশ্নের বেশিরভাগ উত্তর) এত বেশি ভোট পেয়েছিল। "(তৃতীয়, চতুর্থ, এর সমান সংবেদনশীল ...)"? আপনার কাছে সময় না থাকলে কেন একটি প্রশ্নের উত্তর দিচ্ছেন?
nbro

8

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

এ কারণেই লোগারিদমিক সময় জটিলতার সাথে অ্যালগরিদমগুলি খুব বেশি চাওয়া হয়: এমনকি বড় বড় এনগুলির জন্য (উদাহরণস্বরূপ এন = 10 ^ 8 বলে নেওয়া যাক), তারা গ্রহণযোগ্যতার চেয়ে আরও বেশি সম্পাদন করে।


7

তবে ও (লগ এন) ঠিক কী

এর সুনির্দিষ্টভাবে nবোঝার অর্থ হ'ল "যেমন দিকে ঝোঁক infinity, সেখানে ধ্রুবক স্কেলিং ফ্যাক্টারের timeদিকে ঝুঁকছে"।a*log(n)a

বা আসলে, এর পুরোপুরি অর্থ এই নয়; সম্ভাবনা বেশি এটা মত "কিছু মানে timeবিভক্ত দ্বারা a*log(n)প্রতি tends 1"।

"ঝুঁকির দিকে" "বিশ্লেষণ" থেকে স্বাভাবিক গাণিতিক অর্থ রয়েছে: উদাহরণস্বরূপ, "যদি আপনি কোনও নির্বিচারে ছোট শূন্য-অবিচ্ছিন্ন ধ্রুবক বেছে নেন kতবে আমি একটি উপযুক্ত মান খুঁজে পেতে পারি Xযা এর ((time/(a*log(n))) - 1)চেয়ে বড় kমানের চেয়ে কম হয় " "nX


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

মনে রাখবেন যে সমীকরণটি যদি উদাহরণস্বরূপ হয় ...

সময় (এন) = এ + বি লগ (এন) + সি এন + ডি এন এন

... তারপরে এটি ও (এন স্কোয়ার) হবে কারণ, ধ্রুবকগুলির ক, খ, সি এবং শূন্য-ডি-এর ধরণের মান যাই হোক না কেন d*n*n শব্দটি সর্বদা n এর কোনও বৃহত মানের জন্য অন্যের উপর আধিপত্য বজায় রাখবে।

বিট ও স্বরলিপি এর অর্থ: এটির অর্থ "কোনও বৃহত এন এর জন্য প্রভাবশালী পদটির ক্রম কি"।



7

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

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

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


6

আমি লুপের জন্য একটি উদাহরণ দিতে পারি এবং সম্ভবত একবার ধারণাটি উপলব্ধি করা হতে পারে এটি বিভিন্ন প্রসঙ্গে বুঝতে সহজ হবে।

এর অর্থ এই যে লুপে ধাপটি দ্রুত বৃদ্ধি পায়। যেমন

for (i=1; i<=n; i=i*2) {;}

এই প্রোগ্রামের ও-চিহ্নিতকরণের জটিলতা হ'ল ও (লগ (এন))। আসুন হাত দিয়ে এটি লুপ করার চেষ্টা করুন (এন 512 এবং 1023 এর মধ্যে কোথাও নেই (1024 বাদে):

step: 1   2   3   4   5    6    7    8     9     10
   i: 1   2   4   8   16   32   64   128   256   512

যদিও এন 512 এবং 1023 এর মধ্যে কোথাও রয়েছে, তবে কেবল 10 টি পুনরাবৃত্তি ঘটে। এটি কারণ লুপের ধাপটি তাত্পর্যপূর্ণভাবে বৃদ্ধি পায় এবং এইভাবে সমাপ্তি পৌঁছাতে কেবল 10 টি পুনরাবৃত্তি লাগে।

X এর লগারিদম (a এর গোড়ায়) একটি a x এর বিপরীত ফাংশন function

এটা বলার মতো যে লোগারিদম হ'ল তাত্পর্যপূর্ণ বিপরীত।

এখন এটি সেভাবে দেখার চেষ্টা করুন, যদি সূচকীয় খুব দ্রুত বৃদ্ধি পায় তবে লোগারিদম খুব ধীরে ধীরে বৃদ্ধি পায়।

ও (এন) এবং ও (লগ (এন)) এর মধ্যে পার্থক্য বিশাল, ও (এন) এবং ও (এ ^ এন) (একটি ধ্রুবক হওয়া) এর পার্থক্যের অনুরূপ।


6

আসলে, যদি আপনার এন উপাদানগুলির একটি তালিকা থাকে এবং সেই তালিকা থেকে একটি বাইনারি গাছ তৈরি করেন (যেমন বিভাজনে এবং বিজয়ী অ্যালগরিদমের মতো) তবে আপনি আকার 1 (পাতাগুলির) তালিকায় পৌঁছানো অবধি 2 দ্বারা বিভাজক রাখবেন।

প্রথম ধাপে, আপনি ২ দিয়ে বিভক্ত করুন আপনার তারপরে ২ টি তালিকাগুলি রয়েছে (২ ^ 1), আপনি প্রত্যেককে ২ দ্বারা বিভক্ত করেন, সুতরাং আপনার কাছে ৪ টি তালিকাগুলি রয়েছে (২ ^ ২), আপনি আবার বিভক্ত হন, আপনার 8 টি তালিকা রয়েছে (2 ^ 3) ) এবং এই পর্যন্ত আপনার তালিকার আকার 1 না হওয়া পর্যন্ত

এটি আপনাকে সমীকরণ দেয়:

n/(2^steps)=1 <=> n=2^steps <=> lg(n)=steps

(আপনি প্রতিটি পক্ষের এলজি নেন, লগ লগ বেস 2)


2
যতক্ষণ না কিছু ম্যালওয়্যার পাতার নোডের আগে দুটি স্তরে এক্স দৈর্ঘ্য সহ একটি নতুন তালিকা সন্নিবেশ করা শুরু করে। তারপরে এটি মনে হবে একটি অসীম লুপ ...
ফ্রান্সিস কুগার

1
আমি আপনার মন্তব্য পাইনি। আমার ব্যাখ্যা কি ভুল?
দিনাইজ

1
আমি কেবল একটি অনুমানমূলক রসিকতা করছিলাম। আমি এর দ্বারা আসলে কিছুই বোঝাতে চাইছিলাম না।
ফ্রান্সিস কিউলার 26'17

6

যতবারই আমরা একটি অ্যালগরিদম বা কোড লিখি আমরা এর অ্যাসিপোটোটিক জটিলতা বিশ্লেষণ করার চেষ্টা করি। এটি তার সময়ের জটিলতা থেকে পৃথক ।

অ্যাসিপটোটিক জটিলতা হ'ল অ্যালগরিদমের সঞ্চালনের সময় আচরণ এবং সময় জটিলতা প্রকৃত মৃত্যুর সময়। তবে কিছু লোক এই পদগুলি আন্তঃবিন্যাসযোগ্যভাবে ব্যবহার করে।

কারণ সময় জটিলতা বিভিন্ন পরামিতি উপর নির্ভর করে যেমন।
1. শারীরিক সিস্টেম
2. প্রোগ্রামিং ভাষা
3. কোডিং স্টাইল
4. এবং আরও অনেক কিছু ......

প্রকৃত মৃত্যুর সময় বিশ্লেষণের জন্য ভাল পরিমাপ নয়।


পরিবর্তে আমরা পরামিতি হিসাবে ইনপুট আকার গ্রহণ কারণ কোড যাই হোক না কেন, ইনপুট একই। সুতরাং কার্যকর করার সময় ইনপুট আকারের একটি ফাংশন।

লিনিয়ার টাইম অ্যালগোরিদমের উদাহরণ নীচে দেওয়া হল


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

এবং এটি কেবল অনুসন্ধান নয়, যা কিছু কাজ (ইনক্রিমেন্ট, তুলনা বা কোনও ক্রিয়াকলাপ) এর ইনপুট আকারের একটি ফাংশন।

সুতরাং আপনি যখন বলেন যে কোনও অ্যালগোরিদম ও (লগ এন) এর অর্থ এক্সিকিউশন সময় হ'ল লগ বার ইনপুট আকার এন।

ইনপুট আকারের কাজ বাড়ার সাথে সাথে (এখানে কার্যকর করার সময়) বৃদ্ধি পায় ((সুতরাং আনুপাতিকতা)

      n      Work
      2     1 units of work
      4     2 units of work
      8     3 units of work

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


5

গাছ

log x to base b = y এর বিপরীত হয় b^y = x

আপনার যদি গভীরতা ডি এবং আকার এন এর এম-অ্যারি গাছ থাকে তবে:

  • পুরো গাছকে অতিক্রম করে ~ O (M ^ d) = O (n)

  • গাছের একটি একক পথ হাঁটা O (d) = O (বেস এম তে লগ এন)


5

তথ্য প্রযুক্তিতে এর অর্থ এটি:

  f(n)=O(g(n)) If there is suitable constant C and N0 independent on N, 
  such that
  for all N>N0  "C*g(n) > f(n) > 0" is true.

পিঁপড়ে মনে হয় এই স্বরলিপিটি বেশিরভাগই গণিত থেকে নেওয়া হয়েছিল।

এই নিবন্ধটিতে একটি উদ্ধৃতি রয়েছে: ডি নুথ, "বিগ ওমিক্রন এবং বড় ওমেগা এবং বিশাল থিটা", 1976 :

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

আজকের দিন 2016, তবে আমরা আজও এটি ব্যবহার করি।


গাণিতিক বিশ্লেষণে এর অর্থ এটি:

  lim (f(n)/g(n))=Constant; where n goes to +infinity

তবে এমনকি গাণিতিক বিশ্লেষণেও কখনও কখনও এই চিহ্নটি "সি * জি (এন)> চ (এন)> 0" অর্থ ব্যবহৃত হত।

আমি যেমন জানি বিশ্ববিদ্যালয় থেকে প্রতীকটি জার্মান গণিতবিদ ল্যান্ডাউ (1877-1938) দ্বারা প্রবর্তিত হয়েছিল


3

সম্পূর্ণ বাইনারি উদাহরণ হ'ল ও (ln এন) কারণ অনুসন্ধানটি এরকম দেখাচ্ছে:

1 2 3 4 5 6 7 8 9 10 11 12

4 টি ফলন 3 হিট: 6, 3 তারপরে 4 অনুসন্ধান করা হচ্ছে And এবং লগ 2 12 = 3 যা প্রয়োজন যেখানে কতগুলি হিট তার তুলনায় ভাল।


উদাহরণের জন্য ধন্যবাদ। এটি পরিষ্কারভাবে বলেছে যে কীভাবে আমাদের অ্যালগরিদম বিভাজন এবং বিজয় পদ্ধতিতে লগারিদমিক সময় ব্যবহার করতে পারে।
Abc

সুতরাং যদি এর N / 2 এর লুপ থাকে তবে এটি সর্বদা লগ (এন) থাকে?
গিল বেরিথ

3

আপনি যদি অন্তর্দৃষ্টি ভিত্তিক উত্তর খুঁজছেন তবে আমি আপনার জন্য দুটি ব্যাখ্যা পেশ করতে চাই।

  1. খুব বিস্তৃত বেস সহ একটি খুব উঁচু পাহাড়ের কল্পনা করুন। পাহাড়ের চূড়ায় পৌঁছানোর জন্য দুটি উপায় রয়েছে: একটি হ'ল একটি উত্সর্গীকৃত পথ যা পাহাড়ের চূড়ায় চূড়ায় চূড়ান্তভাবে পৌঁছে যা শীর্ষে পৌঁছেছে, অন্যটি: সিঁড়ি সরবরাহের জন্য কাটা কাঠের মতো ছোট্ট টেরেস। এখন যদি প্রথম পথটি রৈখিক সময়ের হে (এন) এ পৌঁছায় তবে দ্বিতীয়টি হ'ল হে (লগ এন)।

  2. একটি অ্যালগরিদম কল্পনা করুন, যা কোনও পূর্ণসংখ্যাকে nইনপুট হিসাবে গ্রহণ করে এবং সময় অনুসারে সমানুপাতিক হয় nএটি ও (এন) বা থিটা (এন) তবে যদি এটি সময়ের অনুপাতে চলে number of digits or the number of bits in the binary representation on numberতবে সেই অ্যালগরিদম ও (লগ এন) বা থিতায় চলে (লগ এন) সময়।


দয়া করে সম্পাদনা করুন। উভয় পরিস্থিতিতে "O (n) বা থিটা (এন)" রয়েছে ...? এছাড়াও, আমি এটি অনেক শুনেছি, আকারটি # অঙ্কের তুলনায়। আমরা কি এন = 10000000 এর জন্য আকার === 128 এবং এন = 10000000 এর জন্য অঙ্কগুলি === 8 বলছি? অনুগ্রহ করে বলুন
কোডি

2

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

int power(int x, unsigned int y)
{
    int temp;
    if( y == 0)
        return 1;
    temp = power(x, y/2);
    if (y%2 == 0)
        return temp*temp;
    else
        return x*temp*temp;
}

http://www.geeksforgeeks.org/writ-ac-program-to-calculate-powxn/ থেকে

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