অ্যালগরিদম বাছাই করার জন্য এখানে একটি দুর্দান্ত সাধারণ প্যাটার্ন:
def sort(l):
while not is_sorted(l):
choose indices i, j
assert i < j
if l[i] > l[j]:
l[i], l[j] = l[j], l[i]
এই অ্যালগরিদমগুলি সূচকগুলি কারণ খুব ভাল কাজ করে i
এবং j
তালিকার রাজ্যের উপর ভিত্তি করে সাবধানে বেছে নেওয়া হয় l
।
যাইহোক, যদি আমরা দেখতে না পেতাম l
, এবং কেবল অন্ধভাবে বেছে নিতে হয়েছিল? তাহলে আমরা তালিকাটি কত দ্রুত বাছাই করতে পারি?
আপনার চ্যালেঞ্জটি হ'ল এমন একটি ফাংশন লিখুন যা কেবলমাত্র দৈর্ঘ্যের সূচী অনুসারে সূচকগুলির এলোমেলো জোড়াকে আউটপুট করে l
। বিশেষত, আউটপুট দুই সূচকের, must i, j
, সঙ্গে 0 <= i < j < len(l)
। আপনার ফাংশনটি তালিকার যে কোনও দৈর্ঘ্যে কাজ করা উচিত, তবে এটি 100 দৈর্ঘ্যের তালিকায় তৈরি হবে।
উপরের প্যাটার্ন অনুযায়ী একইভাবে এলোমেলোভাবে বদলানো তালিকা সাজানোর জন্য আপনার স্কোর হল সূচক পছন্দগুলির গড় সংখ্যা, যেখানে সূচকগুলি আপনার ফাংশন অনুসারে চয়ন করা হয়।
আমি বারবার এন্ট্রি ছাড়াই 100 টি দৈর্ঘ্যের অভিন্ন এলোমেলোভাবে পরিবর্তিত তালিকায় 100 টি পরীক্ষার উপরে সূচী পছন্দগুলির গড় সংখ্যা গ্রহণ করে সাবমিশনগুলি স্কোর করব।
জমাটি স্পষ্টভাবে অপ্রতিযোগিতামূলক বা অবসান না হলে আমি কম ট্রায়াল চালানোর অধিকার সংরক্ষণ করি এবং একক বিজয়ী সন্ধানের জন্য শীর্ষ প্রতিযোগীদের আলাদা করার জন্য আমি আরও ট্রায়াল চালাব। যদি আমার গণ্য সংস্থানসমূহের সীমাতে একাধিক শীর্ষ জমা দেওয়া ত্রুটির প্রান্তে থেকে যায় তবে আমি পূর্ববর্তী জমাটি বিজয়ী হিসাবে ঘোষণা করব, যতক্ষণ না আরও গণ্য সংস্থান বহন করা না যায়।
পাইথনে স্কোরিং প্রোগ্রামের একটি উদাহরণ এখানে:
import random
def is_sorted(l):
for x in range(len(l)-1):
if l[x] > l[x+1]:
return False
return True
def score(length, index_chooser):
steps = 0
l = list(range(length))
random.shuffle(l)
while not is_sorted(l):
i, j = index_chooser(length)
assert (i < j)
if l[i] > l[j]:
l[i], l[j] = l[j], l[i]
steps += 1
return steps
তোমার ফাংশন কোনো চপল রাষ্ট্র বজায় রাখা নাও হতে পারে, ইন্টারঅ্যাক্ট গ্লোবাল ভেরিয়েবল সঙ্গে, তালিকা প্রভাবিত l
, ইত্যাদি আপনার ফাংশনের শুধুমাত্র ইনপুট তালিকার দৈর্ঘ্য হতে হবে l
, এবং এটি আউটপুট সীমার মধ্যে পূর্ণসংখ্যার একটি আদেশ যুগল অবশ্যই [0, len(l)-1]
(অথবা আপনার ভাষা এর জন্য উপযুক্ত তালিকা সূচক)। মন্তব্যে কোনও কিছুর অনুমতি দেওয়া হয়েছে কিনা তা নির্দ্বিধায় জিজ্ঞাসা করুন।
জমাগুলি যে কোনও বিনামূল্যে ব্যবহারের ভাষা হতে পারে। আপনার ভাষার জন্য ইতিমধ্যে যদি কেউ পোস্ট না করা হয় তবে দয়া করে একটি স্কোরিং জোতা অন্তর্ভুক্ত করুন। আপনি একটি অস্থায়ী স্কোর পোস্ট করতে পারেন, তবে আমি অফিসিয়াল স্কোর নিয়ে একটি মন্তব্য করব।
স্কোরিং হ'ল দৈর্ঘ্যের 100 টি অভিন্ন এলোমেলোভাবে পরিবর্তিত তালিকায় বাছাই করা তালিকার গড় সংখ্যা number