সংক্ষিপ্ত বিবরণ
অন্যরা গাছের ডায়াগ্রামের মতো ভাল চিত্রের উদাহরণ দিয়েছেন। আমি কোনও সাধারণ কোড উদাহরণ দেখতে পেলাম না। সুতরাং আমার ব্যাখ্যা ছাড়াও, আমি বিভিন্ন অ্যালগরিদম বিভাগের জটিলতা চিত্রিত করতে সাধারণ মুদ্রণ বিবৃতি সহ কয়েকটি অ্যালগোরিদম সরবরাহ করব।
প্রথমত, আপনি লোগারিদম সম্পর্কে একটি সাধারণ ধারণা রাখতে চান যা আপনি https://en.wikedia.org/wiki/Logarithm থেকে পেতে পারেন । প্রাকৃতিক বিজ্ঞান ব্যবহার e
এবং প্রাকৃতিক লগ। ইঞ্জিনিয়ারিং শিষ্যরা লগ_10 (লগ বেস 10) এবং কম্পিউটার বিজ্ঞানীরা লগ_2 (লগ বেস 2) প্রচুর ব্যবহার করবেন, যেহেতু কম্পিউটারগুলি বাইনারি ভিত্তিক। কখনও কখনও আপনি প্রাকৃতিক লগের সংক্ষিপ্ত রূপগুলি দেখতে পাবেন ln()
, ইঞ্জিনিয়াররা সাধারণত log()
_10 ছাড়েন এবং কেবল ব্যবহার করুন এবং লগ_2 সংক্ষেপে সংক্ষেপিত হয় lg()
। সমস্ত ধরণের লোগারিদম একই ধরণের ফ্যাশনে বৃদ্ধি পায়, এ কারণেই তারা একই বিভাগে ভাগ করে log(n)
।
আপনি নীচের কোডের উদাহরণগুলিতে নজর দিলে, আমি ও (1), তারপরে ও (এন), তারপরে ও (এন) 2) দেখার পরামর্শ দিই। আপনার সাথে ভাল হওয়ার পরে অন্যের দিকে নজর দিন। সূক্ষ্ম পরিবর্তনগুলি এখনও একই শ্রেণিবিন্যাসে কীভাবে পরিণতি পেতে পারে তা দেখানোর জন্য আমি পরিষ্কার উদাহরণের পাশাপাশি বিভিন্নতাও অন্তর্ভুক্ত করেছি।
আপনি ও (1), ও (এন), ও (লগন) ইত্যাদিকে শ্রেণি বা বিকাশের বিভাগ হিসাবে ভাবেন। কিছু বিভাগ অন্যদের থেকে বেশি সময় নিতে পারে। এই বিভাগগুলি অ্যালগরিদম পারফরম্যান্সকে অর্ডার দেওয়ার একটি উপায় দিতে সহায়তা করে। কিছু ইনপুট এন বাড়ার সাথে সাথে দ্রুত বেড়েছে। নিম্নলিখিত সারণীটি সংখ্যাবৃদ্ধি হিসাবে বৃদ্ধি দেখিয়েছে। নীচের সারণীতে লগ (স) লগের সিলিং হিসাবে ভাবেন।
বিভিন্ন বিগ হে বিভাগগুলির সহজ কোড উদাহরণ:
ও (1) - ধ্রুব সময় উদাহরণ:
অ্যালগরিদম 1 হ্যালো একবার প্রিন্ট করে এবং এটি n এর উপর নির্ভর করে না, তাই এটি সর্বদা স্থির সময়ে চলবে, তাই এটি O(1)
।
print "hello";
অ্যালগরিদম 2 হ্যালো 3 বার প্রিন্ট করে তবে এটি কোনও ইনপুট আকারের উপর নির্ভর করে না। এমনকি n বড় হওয়ার সাথে সাথে এই অ্যালগরিদম সর্বদা কেবল 3 বার হ্যালো প্রিন্ট করবে। এটি 3 বলা হচ্ছে, একটি ধ্রুবক, তাই এই অ্যালগরিদমটিও O(1)
।
print "hello";
print "hello";
print "hello";
ও (লগ (এন)) - লগারিদমিক উদাহরণসমূহ:
- অ্যালগরিদম 3 - এটি "লগ_2" এর মতো কাজ করে
অ্যালগরিদম 3 একটি অ্যালগরিদম দেখায় যা লগ 3 (এন) এ চলে। লুপের পোস্ট ক্রিয়াকলাপটি লক্ষ করুন যে i এর বর্তমান মানকে 2 দ্বারা গুণ করে, তাই i
1 থেকে 2 থেকে 4 থেকে 8 থেকে 16 থেকে 32 পর্যন্ত যায় ...
for(int i = 1; i <= n; i = i * 2)
print "hello";
- অ্যালগরিদম 4 - এটি "লগ_3" এর মতো কাজ করে
অ্যালগরিদম 4 লগ_3 প্রদর্শন করে। নোটিশ i
1 থেকে 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";
ও (এন) - লিনিয়ার সময় উদাহরণ:
এই অ্যালগরিদম সহজ, যা হ্যালো এন বার মুদ্রণ করে।
for(int i = 0; i < n; i++)
print "hello";
এই অ্যালগরিদম একটি প্রকরণ দেখায়, যেখানে এটি হ্যালো এন / 2 বার মুদ্রণ করবে। n / 2 = 1/2 * এন। আমরা 1/2 ধ্রুবকটিকে উপেক্ষা করে দেখি যে এই অ্যালগরিদমটি ও (এন)।
for(int i = 0; i < n; i = i + 2)
print "hello";
ও (এন * লগ (এন)) - এনলগ (এন) উদাহরণ:
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 অ্যালগরিদম 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 স্কোয়ার উদাহরণ:
O(n^2)
লুপগুলির জন্য নেস্টিং স্ট্যান্ডার্ডের মাধ্যমে সহজেই পাওয়া যায়।
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
print "hello";
অ্যালগরিদম 10 এর মতো তবে কিছু প্রকারের সাথে।
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j = j + 2)
print "hello";
ও (এন ^ 3) - এন কিউবেড উদাহরণ:
এটি আলগোরিদিম 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";
অ্যালগরিদম 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";
সারসংক্ষেপ
উপরোক্তগুলি বেশ কয়েকটি সোজা ফরোয়ার্ড উদাহরণ দেয়, এবং কী কী সূক্ষ্ম পরিবর্তনগুলি চালু করা যায় যা বিশ্লেষণকে সত্যই পরিবর্তন করে না তা প্রমাণ করতে সহায়তা করে। আশা করি এটি আপনাকে যথেষ্ট অন্তর্দৃষ্টি দেয়।