আমি সমস্যার চূড়ান্ত সমাধান পাওয়ার দাবি করি না (বা এই তালিকাটি বিস্তৃত) তবে আমি মনে করি এমন কিছু সম্ভাব্য পদ্ধতির রূপরেখা তৈরি করতে চাই এবং কেন তারা কাজ করবে না বা করবে না। আমি এলোমেলোতার উত্স হিসাবে বর্তমান টাইমস্ট্যাম্পটি ব্যবহার করা যথেষ্ট "অপ্রত্যাশিত" এবং সম্ভাব্যতা বিতরণের কিছু বৈশিষ্ট্য কীভাবে প্রয়োগ করা যায় তা যেমন স্পর্শকাতর সমস্যাগুলিও আমি সম্বোধন করব না - আমি কেবল হার্ডকোডিং ব্যবহার করে এমন সমাধানগুলি এড়ানোতে মনোনিবেশ করব।
কোনও সমাধান নয়: স্পষ্টভাবে হার্ড-কোডিংকে অস্বীকার করুন
এটি একটি খারাপ ধারণা। এটি একটি অ-পর্যবেক্ষণযোগ্য প্রয়োজনীয়তা (যার অর্থ আপনি কেবল প্রোগ্রাম চালিয়ে সন্তুষ্ট কিনা তা নির্ধারণ করতে পারবেন না), যা পিপিসি-র উপর দৃ strongly়ভাবে নিরুৎসাহিত এবং অন্য কোনও প্ল্যাটফর্মে প্রোগ্রামটি চালানোতে সম্পূর্ণ অসম্ভব হতে পারে, যেখানে জমাগুলি সাবমিশনে যাচাই করা আছে স্বয়ংক্রিয় পদ্ধতিতে। এর মতো প্রয়োজনীয়তার সমস্যাটি হ'ল আপনাকে "হার্ড-কোডিং" এর উদ্দেশ্যমূলক সংজ্ঞাটি সন্ধান করতে হবে। সাধারণভাবে, আপনি যদি এটি চেষ্টা করেন তবে আপনি কেবল জিনিসগুলিকে আরও খারাপ করতে চলেছেন।
হার্ড-কোডিংকে অদম্য করুন
যদি আপনি এটি সম্পূর্ণরূপে অস্বীকার করতে না পারেন তবে আপনি চান না যে লোকেরা এটি ব্যবহার করুন, তবে আপনি চ্যালেঞ্জটি এমনভাবে নকশা করার চেষ্টা করতে পারেন যে হার্ড-কোডিং কেবল কোনও প্রতিযোগিতামূলক পদ্ধতির নয়। এটি সম্ভব যদি অবজেক্টগুলি উত্পন্ন করা উচিত যথেষ্ট পরিমাণে এবং অবিস্মরণীয় যে কোডটির মধ্যে একটি উদাহরণ স্থাপনের জন্য এলোমারিডম লেখার চেয়ে অনেক বেশি বাইটের প্রয়োজন হবে যা এলোমেলোভাবে বৈধ সমাধান উত্পন্ন করে। আপনার নির্দিষ্ট উদাহরণে, এটি অবশ্যই ক্ষেত্রে নয়, কারণ পরিচয় ম্যাট্রিকগুলি বৈধ এবং সাধারণত উত্পন্ন করা সহজ তবে অন্যান্য সমস্যার জন্য, এটি ক্ষেত্রে নাও হতে পারে। যদি লক্ষ্য বস্তুগুলি পর্যাপ্ত পরিমাণে অনিয়মিত হয় তবে কেবলমাত্র তাদের বড় আকারের হওয়া দরকার, যা সম্ভবত কোনও আসল অ্যালগরিদমের বাইট গণনাকে প্রভাবিত করবে না তবে হার্ড কোডিং অংশটি ফুটিয়ে তুলবে।
আউটপুট প্যারামিটারাইজ করুন
প্রায়শই, এই উদাহরণগুলি এক বা একাধিক প্রাকৃতিক প্যারামিটার নিয়ে আসে যেমন আপনার উদাহরণের ম্যাট্রিক্সের আকার। যদি তা হয় তবে সেই পরামিতিটিকে ইনপুট তৈরি করা হার্ড-কোডিংকে অসম্ভব বা কমপক্ষে অবৈধ করে তুলতে যথেষ্ট। কিছু ক্ষেত্রে, প্রদত্ত প্যারামিটার মানের জন্য একটি নির্দিষ্ট সমাধানটি হার্ড-কোড করা সহজ হতে পারে যা ম্যানুয়ালি বা বিস্তৃত অনুসন্ধানের মাধ্যমে পাওয়া গেছে, তবে সাধারণভাবে এই সমাধানগুলির উদাহরণের জন্য কোনও সহজ বদ্ধ ফর্ম নেই, তাই এটি নয় not সহজেই স্বেচ্ছাচারী ইনপুটগুলির জন্য একটি ডিফল্ট মান উত্পন্ন করা সম্ভব। আবার, আপনি যে উদাহরণটি উল্লেখ করেছেন তার ক্ষেত্রে এটি ঘটেনি, কারণ পরিচয় ম্যাট্রিক্স যে কোনও আকারে কাজ করে, তবে এই সম্পর্কিত সমস্যার একটি অনুকূল সমাধানসাধারণত অত্যন্ত অনিয়মিত, সুতরাং যাইহোক বৈধ মান সক্রিয়ভাবে অনুসন্ধান না করে ডিফল্ট মান পাওয়া সম্ভব নয়। কোনও ডিফল্ট মানের জন্য ব্রুট ফোর্স অনুসন্ধান এড়ানোর জন্য আপনি এটি একটি সময়-সীমাতে একত্রিত করতে পারেন।
রাখুন কিছু সম্ভাব্যতা বিতরণের উপর বাধানিষেধ
আপনি যদি পুরোপুরি সীমাহীন সম্ভাব্যতা বিতরণ ছেড়ে দিতে চান তবে আপনি এতে কিছুটা বাধা দিতে পারেন, যা উত্তরদাতাদের তাদের বিতরণ বাছাইয়ে অনেক স্বাধীনতা দেয় তবে যা হার্ড-কোডিংকে একটি কঠিন বা অসম্ভব বলে তোলে:
- সবচেয়ে সহজ প্রতিবন্ধকতা যা মনে আসে তা হ'ল কোনও সম্ভাব্য আউটপুট নির্দিষ্ট প্রান্তিকের নীচে হওয়ার জন্য সর্বনিম্ন এবং সর্বাধিক সম্ভাবনার মধ্যে পার্থক্য প্রয়োজন। একটি হার্ড-কোডেড পদ্ধতির প্রায় সব আউটপুটগুলির জন্য প্রায় শূন্যের সম্ভাবনা এবং ডিফল্ট মানটির 1 এর কাছাকাছি সম্ভাবনা থাকে। আপনার যদি সর্বাধিক পার্থক্য 0.1 বলার নীচে প্রয়োজন হয় তবে পদ্ধতির বিকল্প হিসাবে তৈরি করতে 10 (এলোমেলোভাবে নির্বাচিত) ডিফল্ট মান হওয়া দরকার। একইভাবে আপনার কেবল প্রতিটি সম্ভাব্য আউটপুটটির জন্য ন্যূনতম সম্ভাবনাও প্রয়োজন হতে পারে, যেমন 1 / (2 * N *), যেখানে এন সম্ভাব্য আউটপুটগুলির সংখ্যা।
- বিকল্পভাবে, আপনার প্রয়োজন হতে পারে যে বিতরণে কোনও (সম্ভাবনা) ফাঁক নেই, যাতে আকারের কোনও ব্যবধান নেই δ (আপনার দ্বারা নির্বাচিত) যেমন উচ্চ এবং নিম্ন উভয় সম্ভাবনা রয়েছে। এর অর্থ সম্ভাবনার দিক থেকে কোনও আউটলিয়ার থাকতে পারে না, যা সম্ভবত হার্ড-কোডিং পদ্ধতির মাধ্যমে উত্পন্ন হয়েছিল।
এই পদ্ধতির সাথে মুখ্য বিষয়টি হ'ল তারা যুক্তিযুক্ত হতে অনেক বেশি শক্তিশালী, উত্তরের যথার্থতা প্রমাণ করা কঠিন, এবং পরীক্ষামূলকভাবে সঠিকতা যাচাই করা বড় আউটপুট স্পেসগুলির পক্ষে অসম্ভব হতে পারে। তবুও, তারা প্রোগ্রামটির জন্য মূলত পর্যবেক্ষণযোগ্য প্রয়োজনীয়তা সরবরাহ করে যা হার্ডকোডিংকে অসম্ভব করে তুলতে পারে।
এই পদ্ধতির জন্য একটি সময়সীমাও প্রয়োজন হতে পারে, কারণ অ-ডিফল্ট মানগুলির সম্ভাবনা বাড়ানোর এক উপায় হ'ল ডিফল্ট মানটিতে ফিরে যাওয়ার আগে একাধিকবার এলোমেলো foo সন্ধান করার চেষ্টা করা।