এরিয়েল নোট হিসাবে , নীচে দেওয়া মান সর্বাধিক সন্ধানকারী অ্যালগরিদম:
def find_maximum(a):
m = a[0]
for x in a:
if x > m: m = x
return m
আসলে যতক্ষণ না পরিবর্তন ছাড়া কাজ করবে:
- উপাদানগুলির যে কোনও জোড়া তুলনা করা যেতে পারে, এবং
- ইনপুটটিতে সর্বাধিক উপাদান, অর্থাৎ একটি উপাদান যা ইনপুটটির অন্য কোনও উপাদানের চেয়ে জোড়ায় বড় contain
(উপরে আসলে শিথিল করা যেতে পারে, এমনকি, অ্যালগরিদম সংশোধন করার যতদিন হিসাবে আমরা অনুমান সর্বোচ্চ উপাদান প্রত্যেক অন্যান্য উপাদান সাথে তুলনীয় এবং যে করেও প্রথম ধৃষ্টতা x > y
সবসময় মিথ্যা হলে উপাদান x
এবং y
অনুপম আছে।)
বিশেষত, আপনার দাবি যে:
[…] একটি উত্তরের বিষয়ে নিশ্চিত হওয়ার জন্য, উপাদানটি প্রতিটি অন্যান্য উপাদানের সাথে সুস্পষ্টভাবে তুলনা করা প্রয়োজন (কারণ তুলনা ট্রানজিটিভ নয়)।
উপরোক্ত অনুমানের অধীনে সত্য নয়। আসলে, উপরের অ্যালগরিদম সর্বদা সর্বাধিক উপাদানটি সন্ধান করে তা প্রমাণ করার জন্য এটি পর্যালোচনা করা যথেষ্ট:
- যেহেতু লুপটি সমস্ত ইনপুট উপাদানগুলির উপরে পুনরাবৃত্তি করে, তাই কোনও পুনরাবৃত্তিতে
x
সর্বাধিক উপাদান হবে;
- যেহেতু সর্বাধিক উপাদানটি প্রতিটি অন্যান্য উপাদানের তুলনায় যুগলতর বেশি, এটি অনুসরণ করে যে সেই পুনরাবৃত্তির শেষে,
m
সর্বাধিক উপাদান হবে; এবং
- যেহেতু অন্য কোনও উপাদান সর্বাধিক উপাদানের চেয়ে জোড়ায় বড় হতে পারে না, এটি অনুসরণ করে যে
m
পরবর্তী কোনওগুলির মধ্যে পরিবর্তন হবে না।
অতএব, লুপের শেষে, m
ইনপুটটিতে একটি থাকে তবে সর্বদা সর্বাধিক উপাদান হবে।
পুনশ্চ. যদি ইনপুটটি অগত্যা সর্বদা একটি সর্বাধিক উপাদান থাকে না , তবে সত্য সত্যতা যাচাইয়ের জন্য প্রকৃতপক্ষে প্রার্থীর উত্তরটি অন্য উপাদানগুলির বিরুদ্ধে পরীক্ষা করতে হবে যা সত্যই এটি সর্বোচ্চ সর্বোচ্চ max তবে আমরা এর পরে ও ( এন ) সময়ে এটি করতে পারি উপরে সর্বোচ্চ-খোঁজার অ্যালগরিদম চলমান:
def find_maximum_if_any(a):
# step 1: find the maximum, if one exists
m = a[0]
for x in a:
if x > m: m = x
# step 2: verify that the element we found is indeed maximal
for x in a:
if x > m: return None # the input contains no maximal element
return m # yes, m is a maximal element
(আমি এখানে ধরে নিচ্ছি যে সম্পর্কটি >
অপ্রতিরোধ্য, অর্থাত্ কোনও উপাদান নিজের থেকে বড় হতে পারে না that's যদি এটি অবশ্যই প্রয়োজন না হয়, তবে x > m
দ্বিতীয় পদক্ষেপের তুলনাটি প্রতিস্থাপন করা উচিত)x ≠ m and x > m
≠
তুলনাটি , যেখানে পরিচয়ের তুলনা বোঝায়। বা আমরা কেবলমাত্র অপ্টিমাইজেশন প্রয়োগ করতে পারি নীচে উল্লিখিত।)
অ্যালগরিদমের এই প্রকরণটির যথার্থতা প্রমাণ করতে, সম্ভাব্য দুটি ক্ষেত্রে বিবেচনা করুন:
- যদি ইনপুটটিতে সর্বাধিক উপাদান থাকে, তবে পদক্ষেপ 1 এটি খুঁজে পাবেন (উপরে দেখানো হয়েছে) এবং দ্বিতীয় ধাপটি এটি নিশ্চিত করবে।
- যদি ইনপুটটিতে সর্বাধিক উপাদান থাকে না , তবে পদক্ষেপ 1 এ কিছু স্বেচ্ছাসেবী উপাদান হিসাবে বাছাই করা শেষ হবে
m
। এটি কোন উপাদানটি গুরুত্বপূর্ণ তা বিবেচ্য নয়, যেহেতু এটি যে কোনও ক্ষেত্রেই সর্বাধিক হবে এবং তাই দ্বিতীয় পদক্ষেপটি এটি সনাক্ত করে ফিরে আসবে None
।
আমরা সূচক সঞ্চিত যদি m
ইনপুট অ্যারের মধ্যে a
, আমরা পারা আসলে কেবলমাত্র সেই উপাদান আছে যা আগে আসবে চেক করতে অপ্টিমাইজ ধাপ 2 m
মধ্যে a
কোন পরে উপাদান যেহেতু ইতিমধ্যে সঙ্গে তুলনা করা হয়েছে m
পদক্ষেপ 1. কিন্তু এই অপ্টিমাইজেশান মধ্যে asymptotic সময় জটিলতা পরিবর্তন করে না অ্যালগরিদমের, যা এখনও হে ( এন )।